From 7e2a6b05c8f827c30d13cbeecd965db651175273 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 13 Aug 2020 00:28:44 +0700 Subject: [PATCH 01/44] refactoring --- pom.xml | 730 ++-- .../com/angkorteam/fintech/Application.java | 178 +- .../angkorteam/fintech/BootApplication.java | 132 + .../angkorteam/fintech/HostnameVerifier.java | 12 + .../com/angkorteam/fintech/Localizer.java | 290 +- .../com/angkorteam/fintech/MasterPage.java | 170 + .../fintech/MifosDataContextManager.java | 75 + .../fintech/MifosDataSourceFactoryBean.java | 76 - .../fintech/MifosDataSourceManager.java | 63 +- .../java/com/angkorteam/fintech/Page.java | 554 +-- .../java/com/angkorteam/fintech/ProxyAPI.java | 790 ++-- .../angkorteam/fintech/SSLContextUtils.java | 117 + .../fintech/ServletInitializer.java | 20 + .../java/com/angkorteam/fintech/Session.java | 140 - .../com/angkorteam/fintech/WorkingPage.java | 460 +-- .../fintech/boot/AppProperties.java | 251 ++ .../angkorteam/fintech/client/AppError.java | 57 + .../fintech/client/AppException.java | 23 + .../fintech/client/AuthenticateRequest.java | 32 + .../fintech/client/EnumOptionData.java | 54 + .../angkorteam/fintech/client/ErrorItem.java | 67 + .../angkorteam/fintech/client/ErrorValue.java | 14 + .../fintech/client/FineractClient.java | 351 ++ .../fintech/client/FineractResponse.java | 143 + .../client/PostAuthenticationResponse.java | 117 + .../fintech/client/PostGlClosureRequest.java | 40 + .../fintech/client/PostHolidaysRequest.java | 4 + .../fintech/client/PostOfficeRequest.java | 53 + .../client/PostOfficeTransactionRequest.java | 76 + .../fintech/client/PostRunAccrualRequest.java | 20 + .../fintech/client/PutGlClosureRequest.java | 18 + .../fintech/client/PutOfficeRequest.java | 53 + .../angkorteam/fintech/client/RoleData.java | 62 + .../angkorteam/fintech/client/SysError.java | 55 + .../fintech/client/SysException.java | 22 + .../data/MifosSingleChoiceProvider.java | 64 + .../fintech/data/MultipleChoiceProvider.java | 65 + .../fintech/data/MySQLDataProvider.java | 41 + .../fintech/data/OfficeHierarchyProvider.java | 72 + .../angkorteam/fintech/data/OptionMapper.java | 16 + .../fintech/data/SingleChoiceProvider.java | 66 + .../com/angkorteam/fintech/ddl/MOffice.java | 23 - .../com/angkorteam/fintech/dto/Language.java | 4 +- .../constant/FinancialActivityTypeEnum.java | 2 +- .../fintech/dto/constant/TellerStatus.java | 2 +- .../fintech/dto/enums/AccountType.java | 2 +- .../fintech/dto/enums/AccountUsage.java | 2 +- .../fintech/dto/enums/AccountingType.java | 2 +- .../fintech/dto/enums/ApplyPenalOn.java | 2 +- .../fintech/dto/enums/Attribute.java | 2 +- .../fintech/dto/enums/ChargeCalculation.java | 2 +- .../fintech/dto/enums/ChargeFrequency.java | 2 +- .../fintech/dto/enums/ChargePayment.java | 2 +- .../fintech/dto/enums/ChargeTime.java | 2 +- .../fintech/dto/enums/ChargeType.java | 2 +- .../fintech/dto/enums/ColumnType.java | 2 +- .../fintech/dto/enums/DayInYear.java | 2 +- .../fintech/dto/enums/DepositType.java | 2 +- .../fintech/dto/enums/Destination.java | 2 +- .../fintech/dto/enums/EntityStatus.java | 2 +- .../fintech/dto/enums/EntityType.java | 2 +- .../dto/enums/FinancialAccountType.java | 2 +- .../fintech/dto/enums/InstructionType.java | 2 +- .../dto/enums/InterestCalculatedUsing.java | 2 +- .../dto/enums/InterestCompoundingPeriod.java | 2 +- .../dto/enums/InterestPostingPeriod.java | 2 +- .../fintech/dto/enums/JournalEntry.java | 2 +- .../fintech/dto/enums/LegalForm.java | 2 +- .../fintech/dto/enums/LoanCycle.java | 2 +- .../fintech/dto/enums/LockInType.java | 2 +- .../dto/enums/MinimumActivePeriod.java | 2 +- .../fintech/dto/enums/OperandType.java | 2 +- .../fintech/dto/enums/Operator.java | 2 +- .../fintech/dto/enums/Priority.java | 2 +- .../fintech/dto/enums/ProductType.java | 2 +- .../dto/enums/RecurrenceFrequency.java | 2 +- .../fintech/dto/enums/RecurrenceType.java | 2 +- .../fintech/dto/enums/RepaymentOption.java | 2 +- .../fintech/dto/enums/ReschedulingType.java | 2 +- .../fintech/dto/enums/ServiceType.java | 2 +- .../enums/StandingInstructionAccountType.java | 2 +- .../angkorteam/fintech/dto/enums/Status.java | 2 +- .../fintech/dto/enums/TableType.java | 2 +- .../fintech/dto/enums/TransferType.java | 2 +- .../loan/AdvancePaymentsAdjustmentType.java | 2 +- .../fintech/dto/enums/loan/Amortization.java | 2 +- .../loan/ClosureInterestCalculationRule.java | 2 +- .../fintech/dto/enums/loan/DayInMonth.java | 2 +- .../fintech/dto/enums/loan/Frequency.java | 2 +- .../fintech/dto/enums/loan/FrequencyDay.java | 2 +- .../fintech/dto/enums/loan/FrequencyType.java | 2 +- .../enums/loan/InterestCalculationPeriod.java | 2 +- .../dto/enums/loan/InterestMethod.java | 2 +- .../loan/InterestRecalculationCompound.java | 2 +- .../enums/loan/NominalInterestRateType.java | 2 +- .../fintech/dto/enums/loan/RepaidOn.java | 2 +- .../dto/enums/loan/RepaymentStrategy.java | 2 +- .../fintech/dto/enums/loan/WhenType.java | 2 +- .../fintech/factory/GsonFactoryBean.java | 79 + .../factory/JavaMailSenderFactoryBean.java | 114 + .../fintech/factory/WebSession.java | 77 + .../fintech/factory/WicketFactory.java | 37 + .../fintech/helper/ClientHelper.java | 20 +- .../fintech/helper/CurrencyHelper.java | 1 + .../com/angkorteam/fintech/helper/Helper.java | 36 +- .../fintech/helper/LoginHelper.java | 23 +- .../fintech/layout/SectionBlock.java | 31 - .../fintech/layout/SectionContainer.java | 18 - .../com/angkorteam/fintech/layout/Size.java | 22 - .../angkorteam/fintech/layout/UIBlock.java | 40 - .../fintech/layout/UIContainer.java | 21 - .../com/angkorteam/fintech/layout/UIRow.java | 51 - .../fintech/meta/AbstractTable.java | 152 + .../fintech/meta/AccAccountingRule.java | 43 + .../angkorteam/fintech/meta/AccGlAccount.java | 49 + .../angkorteam/fintech/meta/AccGlClosure.java | 43 + .../meta/AccGlFinancialActivityAccount.java | 25 + .../fintech/meta/AccGlJournalEntry.java | 100 + .../fintech/meta/AccProductMapping.java | 37 + .../angkorteam/fintech/meta/AccRuleTag.java | 28 + .../fintech/meta/CAccountNumberFormat.java | 25 + .../com/angkorteam/fintech/meta/CCache.java | 22 + .../fintech/meta/CConfiguration.java | 37 + .../fintech/meta/CExternalService.java | 22 + .../meta/CExternalServiceProperty.java | 25 + .../meta/ClientDeviceRegistration.java | 28 + .../angkorteam/fintech/meta/GlimAccount.java | 40 + .../angkorteam/fintech/meta/GsimAccount.java | 43 + .../fintech/meta/InteropIdentifier.java | 43 + .../java/com/angkorteam/fintech/meta/Job.java | 64 + .../angkorteam/fintech/meta/JobParameter.java | 28 + .../fintech/meta/JobRunHistory.java | 43 + .../fintech/meta/MAccountTransferDetail.java | 46 + .../MAccountTransferStandingInstruction.java | 61 + ...untTransferStandingInstructionHistory.java | 34 + .../meta/MAccountTransferTransaction.java | 55 + .../com/angkorteam/fintech/meta/MAddress.java | 67 + .../com/angkorteam/fintech/meta/MAdhoc.java | 58 + .../com/angkorteam/fintech/meta/MAppUser.java | 67 + .../meta/MAppUserPreviousPassword.java | 28 + .../angkorteam/fintech/meta/MAppUserRole.java | 25 + .../angkorteam/fintech/meta/MCalendar.java | 70 + .../fintech/meta/MCalendarHistory.java | 58 + .../fintech/meta/MCalendarInstance.java | 28 + .../com/angkorteam/fintech/meta/MCashier.java | 43 + .../fintech/meta/MCashierTransaction.java | 46 + .../com/angkorteam/fintech/meta/MCharge.java | 73 + .../com/angkorteam/fintech/meta/MClient.java | 154 + .../fintech/meta/MClientAddress.java | 34 + .../fintech/meta/MClientAttendance.java | 28 + .../fintech/meta/MClientCharge.java | 64 + .../fintech/meta/MClientChargePaidBy.java | 28 + .../fintech/meta/MClientIdentifier.java | 49 + .../fintech/meta/MClientNonPerson.java | 37 + .../fintech/meta/MClientTransaction.java | 52 + .../fintech/meta/MClientTransferDetail.java | 40 + .../com/angkorteam/fintech/meta/MCode.java | 25 + .../angkorteam/fintech/meta/MCodeValue.java | 40 + .../fintech/meta/MCreditBureau.java | 31 + .../meta/MCreditBureauConfiguration.java | 31 + .../meta/MCreditBureauLoanProductMapping.java | 37 + .../angkorteam/fintech/meta/MCurrency.java | 37 + .../MDepositAccountOnHoldTransaction.java | 37 + .../meta/MDepositAccountRecurringDetail.java | 43 + .../MDepositAccountTermAndPreClosure.java | 76 + .../MDepositProductInterestRateChart.java | 22 + .../meta/MDepositProductRecurringDetail.java | 31 + .../MDepositProductTermAndPreClosure.java | 58 + .../angkorteam/fintech/meta/MDocument.java | 46 + .../fintech/meta/MEntityDatatableCheck.java | 34 + .../fintech/meta/MEntityRelation.java | 28 + .../fintech/meta/MEntityToEntityAccess.java | 34 + .../fintech/meta/MEntityToEntityMapping.java | 34 + .../fintech/meta/MFamilyMember.java | 58 + .../fintech/meta/MFieldConfiguration.java | 37 + .../fintech/meta/MFloatingRate.java | 40 + .../fintech/meta/MFloatingRatePeriod.java | 46 + .../com/angkorteam/fintech/meta/MFund.java | 25 + .../com/angkorteam/fintech/meta/MGroup.java | 67 + .../angkorteam/fintech/meta/MGroupClient.java | 22 + .../com/angkorteam/fintech/meta/MHoliday.java | 43 + .../fintech/meta/MHolidayOffice.java | 22 + .../com/angkorteam/fintech/meta/MOffice.java | 34 + .../fintech/meta/MOrganisationCurrency.java | 37 + .../com/angkorteam/fintech/meta/Tenant.java | 46 + .../fintech/meta/TenantServerConnection.java | 82 + .../com/angkorteam/fintech/meta/TimeZone.java | 28 + .../fintech/pages/AccountingPage.java | 107 +- .../pages/CurrencyConfigurationPage.java | 195 - .../pages/GlobalConfigurationPage.java | 448 +- .../angkorteam/fintech/pages/IndexPage.java | 102 +- .../angkorteam/fintech/pages/LoginPage.java | 154 +- .../angkorteam/fintech/pages/LogoutPage.java | 22 +- .../fintech/pages/MakerCheckerPage.java | 432 +- .../pages/OrganizationDashboardPage.java | 103 - .../pages/PasswordPreferencesPage.java | 292 +- .../fintech/pages/ProductDashboardPage.java | 172 +- .../fintech/pages/ServiceDashboardPage.java | 130 +- .../fintech/pages/SimulatorPage.java | 180 +- .../fintech/pages/SystemDashboardPage.java | 182 +- .../fintech/pages/TaxDashboardPage.java | 130 +- .../angkorteam/fintech/pages/TodoPage.java | 29 + .../fintech/pages/WorkingDayPage.java | 568 +-- .../pages/account/AccountBrowsePage.java | 386 +- .../pages/account/AccountCreatePage.java | 566 +-- .../pages/account/AccountHierarchyPage.java | 218 +- .../pages/account/AccountModifyPage.java | 672 +-- .../pages/account/AccrualAccountingPage.java | 222 +- .../pages/account/ClosureBrowsePage.java | 294 +- .../pages/account/ClosureCreatePage.java | 312 +- .../account/FinancialActivityBrowsePage.java | 328 +- .../account/FinancialActivityCreatePage.java | 350 +- .../account/FinancialActivityModifyPage.java | 424 +- .../pages/account/FrequentPostPage.java | 1220 +++--- .../pages/account/JournalPostPage.java | 1108 ++--- .../fintech/pages/account/RuleBrowsePage.java | 350 +- .../fintech/pages/account/RuleCreatePage.java | 692 ++-- .../fintech/pages/account/RuleModifyPage.java | 858 ++-- .../fintech/pages/account/RuleSelectPage.java | 206 +- .../pages/account/SearchJournalPage.java | 562 +-- .../pages/account/TransactionPage.java | 478 +-- .../fintech/pages/admin/OrganizationPage.java | 105 + .../fintech/pages/admin/ProductsPage.java | 61 + .../fintech/pages/admin/SystemPage.java | 87 + .../fintech/pages/admin/UserBrowsePage.java | 180 + .../currency/CurrencyConfigurationPage.java | 165 + .../funds/ExternalIdValidator.java | 53 + .../organization/funds/FundBrowsePage.java | 140 + .../organization/funds/FundCreatePage.java | 99 + .../organization/funds/FundModifyPage.java | 127 + .../organization/funds/NameValidator.java | 53 + .../holidays/HolidayBrowsePage.java | 169 + .../holidays/HolidayCreatePage.java | 241 ++ .../holidays/HolidayModifyPage.java | 16 + .../offices/ExternalIdValidator.java | 53 + .../organization/offices/NameValidator.java | 53 + .../offices/OfficeCreatePage.java | 167 + .../offices/OfficeHierarchyPage.java | 55 + .../offices/OfficeModifyPage.java | 200 + .../organization/offices/OfficeTablePage.java | 146 + .../fintech/pages/admin/system/Test.java | 4 + .../ConfigurationBrowsePage.java | 144 + .../ConfigurationCreatePage.java | 159 + .../ConfigurationModifyPage.java | 13 + .../pages/charge/ChargeBrowsePage.java | 324 +- .../pages/charge/ClientChargeCreatePage.java | 634 +-- .../pages/charge/ClientChargeModifyPage.java | 780 ++-- .../pages/charge/LoanChargeCreatePage.java | 948 ++--- .../pages/charge/LoanChargeModifyPage.java | 1096 ++--- .../charge/SavingDepositChargeCreatePage.java | 720 ++-- .../charge/SavingDepositChargeModifyPage.java | 860 ++-- .../pages/charge/ShareChargeCreatePage.java | 544 +-- .../pages/charge/ShareChargeModifyPage.java | 658 +-- .../pages/client/center/CenterBrowsePage.java | 258 +- .../pages/client/center/CenterClosePage.java | 46 +- .../pages/client/center/CenterCreatePage.java | 760 ++-- .../pages/client/center/CenterModifyPage.java | 364 +- .../client/center/CenterPreviewPage.java | 162 +- .../client/center/ChargePreviewPage.java | 38 +- .../pages/client/center/GroupCreatePage.java | 812 ++-- .../pages/client/center/GroupManagePage.java | 438 +- .../client/center/TransactionPreviewPage.java | 38 +- .../pages/client/client/ChargeCreatePage.java | 514 +-- .../client/client/ChargeOverviewPage.java | 334 +- .../pages/client/client/ChargePayPage.java | 394 +- .../client/client/ChargeSelectionPage.java | 284 +- .../client/client/ChargeTransactionPage.java | 638 +-- .../client/ClientAcceptTransferPage.java | 292 +- .../client/client/ClientAssignStaffPage.java | 324 +- .../pages/client/client/ClientBrowsePage.java | 282 +- .../pages/client/client/ClientCreatePage.java | 1706 ++++---- .../ClientDefaultSavingAccountPage.java | 328 +- .../client/ClientDocumentUploadPage.java | 426 +- .../client/ClientFamilyMemberCreatePage.java | 640 +-- .../client/ClientIdentityCreatePage.java | 452 +- .../client/client/ClientPreviewPage.java | 184 +- .../client/ClientRejectTransferPage.java | 294 +- .../client/ClientSignatureUploadPage.java | 328 +- .../ClientStandingInstructionBrowsePage.java | 304 +- .../ClientStandingInstructionCreatePage.java | 1048 ++--- .../client/client/ClientTransferPage.java | 364 +- .../client/client/ClientUndoTransferPage.java | 292 +- .../pages/client/client/ClientWebcamPage.java | 392 +- .../client/common/LoanAccountApprovePage.java | 648 +-- .../LoanAccountCloseAsSchedulePage.java | 320 +- .../client/common/LoanAccountClosePage.java | 316 +- .../client/common/LoanAccountCreatePage.java | 3654 ++++++++--------- .../common/LoanAccountDisbursePage.java | 948 ++--- .../common/LoanAccountDisburseSavingPage.java | 612 +-- .../common/LoanAccountForeclosurePage.java | 714 ++-- .../client/common/LoanAccountPrepayPage.java | 1038 ++--- .../client/common/LoanAccountPreviewPage.java | 1918 ++++----- .../LoanAccountRecoverGuaranteePage.java | 208 +- .../common/LoanAccountRecoveryPage.java | 796 ++-- .../client/common/LoanAccountRejectPage.java | 562 +-- .../common/LoanAccountRepaymentPage.java | 998 ++--- .../common/LoanAccountReschedulePage.java | 706 ++-- .../common/LoanAccountUndoApprovalPage.java | 510 +-- .../common/LoanAccountUndoDisbursePage.java | 254 +- .../common/LoanAccountWaiveInterestPage.java | 392 +- .../common/LoanAccountWithdrawPage.java | 322 +- .../common/LoanAccountWriteOffPage.java | 332 +- .../client/common/LoanChargeCreatePage.java | 788 ++-- .../common/LoanCollateralCreatePage.java | 338 +- .../common/LoanGuarantorBrowsePage.java | 232 +- .../LoanGuarantorCreateExternalPage.java | 522 +-- .../LoanGuarantorCreateInternalPage.java | 324 +- .../client/common/LoanOfficerAssignPage.java | 600 +-- .../common/LoanOfficerUnAssignPage.java | 542 +-- .../client/common/loan/AccountCreatePage.java | 1080 ++--- .../common/loan/AccountSelectionPage.java | 376 +- .../common/saving/AccountActivatePage.java | 246 +- .../common/saving/AccountApprovePage.java | 296 +- .../common/saving/AccountAssignStaffPage.java | 358 +- .../common/saving/AccountClosePage.java | 784 ++-- .../common/saving/AccountCreatePage.java | 690 ++-- .../common/saving/AccountDepositPage.java | 612 +-- .../common/saving/AccountPreviewPage.java | 754 ++-- .../common/saving/AccountSelectionPage.java | 374 +- .../common/saving/AccountUndoApprovePage.java | 236 +- .../common/saving/AccountWithdrawPage.java | 614 +-- .../pages/client/group/GroupBrowsePage.java | 246 +- .../pages/client/group/GroupCreatePage.java | 774 ++-- .../pages/client/group/GroupLoanPage.java | 174 +- .../pages/client/group/GroupPreviewPage.java | 78 +- .../fintech/pages/code/CodeBrowsePage.java | 346 +- .../fintech/pages/code/ValueBrowsePage.java | 582 +-- .../pages/entity/CheckerBrowsePage.java | 342 +- .../pages/entity/CheckerCreatePage.java | 446 +- .../fintech/pages/fund/FundBrowsePage.java | 126 - .../fintech/pages/fund/FundCreatePage.java | 144 - .../fintech/pages/fund/FundModifyPage.java | 164 - .../pages/holiday/HolidayBrowsePage.java | 352 +- .../pages/holiday/HolidayCreatePage.java | 432 +- .../fintech/pages/hook/HookBrowsePage.java | 376 +- .../fintech/pages/hook/HookCreatePage.java | 762 ++-- .../fintech/pages/hook/HookModifyPage.java | 868 ++-- .../pages/office/OfficeBrowsePage.java | 154 - .../pages/office/OfficeCreatePage.java | 184 - .../pages/office/OfficeHierarchyPage.java | 109 - .../pages/office/OfficeModifyPage.java | 211 - .../pages/payment/PaymentTypeBrowsePage.java | 324 +- .../pages/payment/PaymentTypeCreatePage.java | 336 +- .../pages/payment/PaymentTypeModifyPage.java | 394 +- .../pages/product/fixed/FixedBrowsePage.java | 256 +- .../pages/product/fixed/FixedCreatePage.java | 852 ++-- .../pages/product/fixed/FixedPreviewPage.java | 1056 ++--- .../pages/product/loan/LoanBrowsePage.java | 276 +- .../pages/product/loan/LoanCreatePage.java | 1480 +++---- .../pages/product/loan/LoanPreviewPage.java | 1788 ++++---- .../pages/product/mixed/MixedBrowsePage.java | 240 +- .../pages/product/mixed/MixedCreatePage.java | 326 +- .../recurring/RecurringBrowsePage.java | 244 +- .../recurring/RecurringCreatePage.java | 874 ++-- .../recurring/RecurringPreviewPage.java | 1066 ++--- .../product/saving/SavingBrowsePage.java | 246 +- .../product/saving/SavingCreatePage.java | 670 +-- .../product/saving/SavingPreviewPage.java | 848 ++-- .../pages/product/share/ShareBrowsePage.java | 252 +- .../pages/product/share/ShareCreatePage.java | 530 +-- .../pages/product/share/SharePreviewPage.java | 620 +-- .../pages/rate/FloatingRateBrowsePage.java | 292 +- .../pages/rate/FloatingRateCreatePage.java | 572 +-- .../pages/rate/FloatingRateModifyPage.java | 712 ++-- .../fintech/pages/role/RoleBrowsePage.java | 350 +- .../fintech/pages/role/RoleCreatePage.java | 280 +- .../pages/role/RolePermissionPage.java | 530 +-- .../pages/service/EMailConfigurationPage.java | 422 +- .../pages/service/S3ConfigurationPage.java | 348 +- .../pages/service/SMSConfigurationPage.java | 388 +- .../fintech/pages/staff/StaffBrowsePage.java | 294 +- .../fintech/pages/staff/StaffCreatePage.java | 470 +-- .../fintech/pages/staff/StaffModifyPage.java | 548 +-- .../fintech/pages/staff/UserBrowsePage.java | 248 +- .../fintech/pages/staff/UserCreatePage.java | 774 ++-- .../fintech/pages/staff/UserModifyPage.java | 822 ++-- .../pages/table/DataTableBrowsePage.java | 234 +- .../pages/table/DataTableCreatePage.java | 600 +-- .../pages/tax/TaxComponentBrowsePage.java | 260 +- .../pages/tax/TaxComponentCreatePage.java | 442 +- .../pages/tax/TaxComponentModifyPage.java | 450 +- .../fintech/pages/tax/TaxGroupBrowsePage.java | 252 +- .../fintech/pages/tax/TaxGroupCreatePage.java | 474 +-- .../fintech/pages/tax/TaxGroupModifyPage.java | 614 +-- .../pages/teller/TellerBrowsePage.java | 306 +- .../pages/teller/TellerCreatePage.java | 440 +- .../pages/teller/TellerModifyPage.java | 508 +-- .../fintech/popup/AccountChargePopup.java | 568 +-- .../angkorteam/fintech/popup/ChargePopup.java | 194 +- .../angkorteam/fintech/popup/ClientPopup.java | 142 +- .../fintech/popup/CollateralPopup.java | 246 +- .../angkorteam/fintech/popup/ColumnPopup.java | 338 +- .../angkorteam/fintech/popup/CreditPopup.java | 182 +- .../fintech/popup/CreditRulePopup.java | 296 +- .../fintech/popup/CurrencyPopup.java | 52 +- .../angkorteam/fintech/popup/DebitPopup.java | 182 +- .../fintech/popup/DebitRulePopup.java | 296 +- .../fintech/popup/FamilyMemberPopup.java | 340 +- .../fintech/popup/FeeChargePopup.java | 234 +- .../popup/FloatingRatePeriodPopup.java | 220 +- .../fintech/popup/GroupLoanChargePopup.java | 10 +- .../angkorteam/fintech/popup/GroupPopup.java | 170 +- .../fintech/popup/IncentivePopup.java | 672 +-- .../fintech/popup/IncentivePreviewPopup.java | 180 +- .../fintech/popup/InterestLoanCyclePopup.java | 234 +- .../fintech/popup/InterestRateChartPopup.java | 268 +- .../fintech/popup/MarketPricePopup.java | 184 +- .../angkorteam/fintech/popup/OfficePopup.java | 52 +- .../fintech/popup/OverdueChargePopup.java | 192 +- .../fintech/popup/PaymentTypePopup.java | 162 +- .../fintech/popup/PenaltyChargePopup.java | 230 +- .../angkorteam/fintech/popup/PopupPanel.java | 50 +- .../popup/PrincipleLoanCyclePopup.java | 202 +- .../popup/RepaymentLoanCyclePopup.java | 202 +- .../fintech/popup/ReversePopup.java | 146 +- .../popup/TaxComponentCreatePopup.java | 168 +- .../fintech/popup/TaxComponentPopup.java | 168 +- .../angkorteam/fintech/popup/WebcamPopup.java | 252 +- .../client/client/ClientSignaturePopup.java | 52 +- .../client/ClientUnassignStaffPopup.java | 104 +- .../provider/AccountHierarchyProvider.java | 222 +- .../fintech/provider/AccountTypeProvider.java | 122 +- .../provider/AccountUsageProvider.java | 122 +- .../provider/AppTableOptionProvider.java | 122 +- .../provider/ApplyPenalOnProvider.java | 116 +- .../fintech/provider/AttributeProvider.java | 116 +- .../provider/ChargeCalculationProvider.java | 142 +- .../provider/ChargeFrequencyProvider.java | 118 +- .../provider/ChargePaymentProvider.java | 118 +- .../fintech/provider/ChargeTimeProvider.java | 142 +- .../ClientClassificationProvider.java | 32 +- .../ClientDepositAccountProvider.java | 26 +- .../fintech/provider/ClientTypeProvider.java | 32 +- .../provider/ColumnTypeOptionProvider.java | 122 +- .../provider/ConstitutionProvider.java | 32 +- .../fintech/provider/CurrencyProvider.java | 22 +- .../provider/CustomerIdentifierProvider.java | 32 +- .../fintech/provider/DayInYearProvider.java | 150 +- .../fintech/provider/DestinationProvider.java | 122 +- .../provider/EntityStatusProvider.java | 150 +- .../fintech/provider/EntityTypeProvider.java | 122 +- .../provider/FinancialActivityProvider.java | 122 +- .../fintech/provider/FundProvider.java | 22 +- .../fintech/provider/GenderProvider.java | 32 +- .../provider/GroupHierarchyProvider.java | 108 +- .../GuarantorRelationshipProvider.java | 32 +- .../provider/InstructionTypeProvider.java | 122 +- .../InterestCalculatedUsingProvider.java | 116 +- .../InterestCompoundingPeriodProvider.java | 122 +- .../InterestPostingPeriodProvider.java | 116 +- .../fintech/provider/JdbcProvider.java | 40 +- .../fintech/provider/LegalFormProvider.java | 118 +- .../provider/LoanCollateralProvider.java | 32 +- .../fintech/provider/LoanPurposeProvider.java | 32 +- .../fintech/provider/LockInTypeProvider.java | 136 +- .../provider/MainBusinessLineProvider.java | 32 +- .../fintech/provider/ManualEntryProvider.java | 122 +- .../provider/MaritalStatusProvider.java | 32 +- .../provider/MifosSingleChoiceProvider.java | 28 - .../provider/MinimumActivePeriodProvider.java | 116 +- .../provider/MultipleChoiceProvider.java | 60 +- .../NominalInterestRateTypeProvider.java | 122 +- .../provider/OfficeHierarchyProvider.java | 54 - .../fintech/provider/OfficeProvider.java | 22 +- .../fintech/provider/OperandTypeProvider.java | 116 +- .../fintech/provider/OperatorProvider.java | 116 +- .../fintech/provider/OptionProvider.java | 140 +- .../fintech/provider/PriorityProvider.java | 122 +- .../fintech/provider/ProfessionProvider.java | 34 +- .../provider/RecurrenceFrequencyProvider.java | 122 +- .../provider/RecurrenceTypeProvider.java | 122 +- .../provider/RelationshipProvider.java | 34 +- .../provider/RepaymentOptionProvider.java | 122 +- .../provider/ReschedulingTypeProvider.java | 13 +- .../provider/SingleChoiceProvider.java | 60 +- .../fintech/provider/StatusProvider.java | 122 +- .../fintech/provider/TellerStateProvider.java | 122 +- .../provider/TransferTypeProvider.java | 122 +- .../fintech/provider/WhenProvider.java | 122 +- ...AdvancePaymentsAdjustmentTypeProvider.java | 122 +- .../provider/loan/AmortizationProvider.java | 122 +- ...losureInterestCalculationRuleProvider.java | 122 +- .../provider/loan/DayInMonthProvider.java | 122 +- .../provider/loan/FrequencyDayProvider.java | 122 +- .../provider/loan/FrequencyProvider.java | 122 +- .../provider/loan/FrequencyTypeProvider.java | 122 +- .../InterestCalculationPeriodProvider.java | 122 +- .../provider/loan/InterestMethodProvider.java | 122 +- ...InterestRecalculationCompoundProvider.java | 122 +- .../fintech/provider/loan/OnDayProvider.java | 120 +- .../provider/loan/RepaidOnProvider.java | 122 +- .../loan/RepaymentStrategyProvider.java | 122 +- .../ui/MemoryContentHeaderProvider.java | 19 + .../provider/ui/MemoryFooterProvider.java | 26 + .../ui/MemoryMainSidebarProvider.java | 62 + .../provider/ui/MemoryNavbarProvider.java | 78 + .../provider/ui/MemoryThemeProvider.java | 16 + .../angkorteam/fintech/table/BadgeCell.java | 388 +- .../fintech/table/ClickableCell.java | 400 +- .../angkorteam/fintech/table/LinkCell.java | 386 +- .../angkorteam/fintech/table/TextCell.java | 364 +- .../fintech/widget/HookFieldWidget.java | 124 +- .../angkorteam/fintech/widget/LabelView.java | 1154 +++--- .../fintech/widget/ReadOnlyView.java | 1156 +++--- .../fintech/widget/TextFeedbackPanel.java | 26 +- .../fintech/widget/WebMarkupBlock.java | 4 +- .../client/center/CenterPreviewGeneral.java | 76 +- .../center/CenterPreviewGeneralPanel.java | 462 +-- .../client/center/CenterPreviewNote.java | 76 +- .../client/center/CenterPreviewNotePanel.java | 272 +- .../client/client/ClientPreviewDocument.java | 76 +- .../client/ClientPreviewDocumentPanel.java | 294 +- .../client/ClientPreviewFamilyMember.java | 76 +- .../ClientPreviewFamilyMemberPanel.java | 210 +- .../client/client/ClientPreviewGeneral.java | 76 +- .../client/ClientPreviewGeneralPanel.java | 1290 +++--- .../client/client/ClientPreviewIdentity.java | 76 +- .../client/ClientPreviewIdentityPanel.java | 208 +- .../client/client/ClientPreviewNote.java | 76 +- .../client/client/ClientPreviewNotePanel.java | 286 +- .../common/LoanAccountPreviewCharge.java | 76 +- .../common/LoanAccountPreviewChargePanel.java | 56 +- .../common/LoanAccountPreviewDetail.java | 76 +- .../common/LoanAccountPreviewDetailPanel.java | 814 ++-- .../common/LoanAccountPreviewDocument.java | 76 +- .../LoanAccountPreviewDocumentPanel.java | 56 +- .../LoanAccountPreviewLoanCollateral.java | 76 +- ...LoanAccountPreviewLoanCollateralPanel.java | 56 +- .../client/common/LoanAccountPreviewNote.java | 76 +- .../common/LoanAccountPreviewNotePanel.java | 56 +- .../LoanAccountPreviewRepaymentSchedule.java | 76 +- ...nAccountPreviewRepaymentSchedulePanel.java | 56 +- .../common/LoanAccountPreviewTransaction.java | 76 +- .../LoanAccountPreviewTransactionPanel.java | 56 +- .../common/SavingAccountPreviewCharge.java | 76 +- .../SavingAccountPreviewChargePanel.java | 248 +- .../SavingAccountPreviewTransaction.java | 76 +- .../SavingAccountPreviewTransactionPanel.java | 214 +- .../widget/client/common/loan/Charges.java | 76 +- .../client/common/loan/ChargesPanel.java | 546 +-- .../widget/client/common/loan/Details.java | 76 +- .../client/common/loan/DetailsPanel.java | 550 +-- .../widget/client/common/loan/Review.java | 76 +- .../client/common/loan/ReviewPanel.java | 1048 ++--- .../widget/client/common/loan/Terms.java | 76 +- .../widget/client/common/loan/TermsPanel.java | 1168 +++--- .../widget/client/common/saving/Charges.java | 76 +- .../client/common/saving/ChargesPanel.java | 546 +-- .../widget/client/common/saving/Details.java | 76 +- .../client/common/saving/DetailsPanel.java | 338 +- .../widget/client/common/saving/Review.java | 76 +- .../client/common/saving/ReviewPanel.java | 1048 ++--- .../widget/client/common/saving/Terms.java | 76 +- .../client/common/saving/TermsPanel.java | 980 ++--- .../client/group/GroupPreviewCommittee.java | 76 +- .../group/GroupPreviewCommitteePanel.java | 56 +- .../client/group/GroupPreviewGeneral.java | 76 +- .../group/GroupPreviewGeneralPanel.java | 322 +- .../widget/client/group/GroupPreviewNote.java | 76 +- .../client/group/GroupPreviewNotePanel.java | 56 +- .../widget/product/fixed/Accounting.java | 76 +- .../widget/product/fixed/AccountingPanel.java | 1076 ++--- .../fintech/widget/product/fixed/Charges.java | 76 +- .../widget/product/fixed/ChargesPanel.java | 474 +-- .../widget/product/fixed/Currency.java | 76 +- .../widget/product/fixed/CurrencyPanel.java | 296 +- .../fintech/widget/product/fixed/Details.java | 76 +- .../widget/product/fixed/DetailsPanel.java | 244 +- .../product/fixed/InterestRateChart.java | 76 +- .../product/fixed/InterestRateChartPanel.java | 646 +-- .../fintech/widget/product/fixed/Preview.java | 74 +- .../widget/product/fixed/PreviewPanel.java | 1398 +++---- .../widget/product/fixed/Settings.java | 76 +- .../widget/product/fixed/SettingsPanel.java | 638 +-- .../fintech/widget/product/fixed/Terms.java | 76 +- .../widget/product/fixed/TermsPanel.java | 474 +-- .../widget/product/loan/Accounting.java | 76 +- .../widget/product/loan/AccountingPanel.java | 1712 ++++---- .../fintech/widget/product/loan/Charges.java | 76 +- .../widget/product/loan/ChargesPanel.java | 708 ++-- .../fintech/widget/product/loan/Currency.java | 76 +- .../widget/product/loan/CurrencyPanel.java | 320 +- .../fintech/widget/product/loan/Details.java | 76 +- .../widget/product/loan/DetailsPanel.java | 360 +- .../fintech/widget/product/loan/Preview.java | 74 +- .../widget/product/loan/PreviewPanel.java | 3376 +++++++-------- .../fintech/widget/product/loan/Settings.java | 76 +- .../widget/product/loan/SettingsPanel.java | 2630 ++++++------ .../fintech/widget/product/loan/Terms.java | 76 +- .../widget/product/loan/TermsPanel.java | 1858 ++++----- .../widget/product/recurring/Accounting.java | 76 +- .../product/recurring/AccountingPanel.java | 1076 ++--- .../widget/product/recurring/Charges.java | 76 +- .../product/recurring/ChargesPanel.java | 474 +-- .../widget/product/recurring/Currency.java | 76 +- .../product/recurring/CurrencyPanel.java | 294 +- .../widget/product/recurring/Details.java | 76 +- .../product/recurring/DetailsPanel.java | 244 +- .../product/recurring/InterestRateChart.java | 76 +- .../recurring/InterestRateChartPanel.java | 644 +-- .../widget/product/recurring/Preview.java | 74 +- .../product/recurring/PreviewPanel.java | 1398 +++---- .../widget/product/recurring/Settings.java | 76 +- .../product/recurring/SettingsPanel.java | 750 ++-- .../widget/product/recurring/Terms.java | 76 +- .../widget/product/recurring/TermsPanel.java | 472 +-- .../widget/product/savings/Accounting.java | 76 +- .../product/savings/AccountingPanel.java | 1228 +++--- .../widget/product/savings/Charges.java | 76 +- .../widget/product/savings/ChargesPanel.java | 474 +-- .../widget/product/savings/Currency.java | 76 +- .../widget/product/savings/CurrencyPanel.java | 294 +- .../widget/product/savings/Details.java | 76 +- .../widget/product/savings/DetailsPanel.java | 242 +- .../widget/product/savings/Preview.java | 74 +- .../widget/product/savings/PreviewPanel.java | 1388 +++---- .../widget/product/savings/Settings.java | 76 +- .../widget/product/savings/SettingsPanel.java | 878 ++-- .../fintech/widget/product/savings/Terms.java | 76 +- .../widget/product/savings/TermsPanel.java | 376 +- .../widget/product/share/Accounting.java | 76 +- .../widget/product/share/AccountingPanel.java | 474 +-- .../fintech/widget/product/share/Charges.java | 76 +- .../widget/product/share/ChargesPanel.java | 474 +-- .../widget/product/share/Currency.java | 76 +- .../widget/product/share/CurrencyPanel.java | 296 +- .../fintech/widget/product/share/Details.java | 76 +- .../widget/product/share/DetailsPanel.java | 244 +- .../widget/product/share/MarketPrice.java | 76 +- .../product/share/MarketPricePanel.java | 392 +- .../fintech/widget/product/share/Preview.java | 74 +- .../widget/product/share/PreviewPanel.java | 898 ++-- .../widget/product/share/Settings.java | 76 +- .../widget/product/share/SettingsPanel.java | 520 +-- .../fintech/widget/product/share/Terms.java | 76 +- .../widget/product/share/TermsPanel.java | 332 +- src/main/java/org/json/CDL.java | 287 ++ src/main/java/org/json/Cookie.java | 169 + src/main/java/org/json/CookieList.java | 86 + src/main/java/org/json/HTTP.java | 162 + src/main/java/org/json/HTTPTokener.java | 77 + src/main/java/org/json/JSONArray.java | 1541 +++++++ src/main/java/org/json/JSONException.java | 45 + src/main/java/org/json/JSONML.java | 542 +++ src/main/java/org/json/JSONObject.java | 2378 +++++++++++ src/main/java/org/json/JSONPointer.java | 293 ++ .../java/org/json/JSONPointerException.java | 45 + .../java/org/json/JSONPropertyIgnore.java | 43 + src/main/java/org/json/JSONPropertyName.java | 47 + src/main/java/org/json/JSONString.java | 18 + src/main/java/org/json/JSONStringer.java | 79 + src/main/java/org/json/JSONTokener.java | 529 +++ src/main/java/org/json/JSONWriter.java | 418 ++ src/main/java/org/json/Property.java | 75 + src/main/java/org/json/XML.java | 683 +++ src/main/java/org/json/XMLTokener.java | 407 ++ src/main/resources/application.properties | 84 + .../fintech/pages/AccountingPage.html | 148 +- .../pages/CurrencyConfigurationPage.html | 52 - .../angkorteam/fintech/pages/LoginPage.html | 74 +- .../pages/OrganizationDashboardPage.html | 80 - .../fintech/pages/SimulatorPage.html | 163 +- .../angkorteam/fintech/pages/TodoPage.html | 21 + .../fintech/pages/admin/OrganizationPage.html | 190 + .../fintech/pages/admin/ProductsPage.html | 110 + .../fintech/pages/admin/SystemPage.html | 157 + .../fintech/pages/admin/UserBrowsePage.html | 87 + .../currency/CurrencyConfigurationPage.html | 55 + .../organization/funds/FundBrowsePage.html | 60 + .../organization/funds/FundCreatePage.html | 58 + .../organization/funds/FundModifyPage.html | 58 + .../holidays/HolidayBrowsePage.html | 69 + .../holidays/HolidayCreatePage.html | 109 + .../offices/OfficeCreatePage.html | 82 + .../offices/OfficeHierarchyPage.html | 40 + .../offices/OfficeModifyPage.html | 82 + .../organization/offices/OfficeTablePage.html | 64 + .../ConfigurationBrowsePage.html | 60 + .../fintech/pages/admin/system/test.html | 10 + .../fintech/pages/fund/FundBrowsePage.html | 36 - .../fintech/pages/fund/FundCreatePage.html | 46 - .../fintech/pages/fund/FundModifyPage.html | 46 - .../pages/office/OfficeBrowsePage.html | 38 - .../pages/office/OfficeCreatePage.html | 65 - .../pages/office/OfficeHierarchyPage.html | 36 - .../pages/office/OfficeModifyPage.html | 65 - src/main/resources/log4j2.xml | 30 - src/main/webapp/WEB-INF/api-context.xml | 127 - src/main/webapp/WEB-INF/api-servlet.xml | 7 - .../webapp/WEB-INF/fintech.properties.xml | 54 - src/main/webapp/WEB-INF/web.xml | 76 - .../angkorteam/adminlte/BoxABodyPanel.java | 10 - .../angkorteam/adminlte/BoxAFooterPanel.java | 13 - .../angkorteam/adminlte/BoxAHeaderPanel.java | 13 - .../adminlte/InfoBoxAExtraPanel.java | 10 - .../adminlte/UserBodyItemPanel.java | 19 - .../adminlte/UserFooterItemPanel.java | 19 - .../adminlte/UserProfileItemPanel.java | 19 - .../angkorteam/fintech/BankSavingPlan.java | 231 ++ .../com/angkorteam/fintech/Constants.java | 20 +- .../com/angkorteam/fintech/HelloSITest.java | 24 +- .../com/angkorteam/fintech/IQSavingPlan.java | 157 + .../java/com/angkorteam/fintech/LoanTest.java | 162 +- .../angkorteam/fintech/MetaModelProgram.java | 75 + .../java/com/angkorteam/fintech/Start.java | 156 +- .../java/com/angkorteam/fintech/TabA.java | 66 +- .../angkorteam/fintech/TriggerProgram.java | 86 +- .../fintech/installation/Database.java | 50 +- .../fintech/installation/ERDData.java | 1162 +++--- .../fintech/installation/Field.java | 166 +- .../fintech/installation/Function.java | 1056 ++--- .../fintech/installation/JUnitData.java | 584 +-- .../angkorteam/fintech/installation/Link.java | 76 +- .../fintech/installation/SampleData.java | 2166 +++++----- .../fintech/installation/Table.java | 92 +- .../fintech/installation/TriggerData.java | 94 +- .../fintech/junit/EmbededTomcat.java | 358 +- .../com/angkorteam/fintech/junit/JUnit.java | 182 +- .../fintech/junit/JUnitApplication.java | 112 +- .../fintech/junit/JUnitFormTester.java | 190 +- .../junit/JUnitMockServletContext.java | 106 +- .../fintech/junit/JUnitWicketTester.java | 466 +-- .../fintech/pages/AccountingPageUITest.java | 48 +- .../CurrencyConfigurationPageUITest.java | 50 +- .../pages/GlobalConfigurationPageUITest.java | 50 +- .../fintech/pages/LoginPageTest.java | 94 +- .../fintech/pages/MakerCheckerPageUITest.java | 50 +- .../OrganizationDashboardPageUITest.java | 54 +- .../pages/PasswordPreferencesPageUITest.java | 54 +- .../pages/ProductDashboardPageUITest.java | 54 +- .../pages/ServiceDashboardPageUITest.java | 54 +- .../pages/SystemDashboardPageUITest.java | 54 +- .../fintech/pages/TaxDashboardPageUITest.java | 54 +- .../fintech/pages/WorkingDayPageUITest.java | 54 +- .../account/AccountBrowsePageUITest.java | 52 +- .../account/AccountCreatePageUITest.java | 54 +- .../account/AccountHierarchyPageUITest.java | 52 +- .../account/AccrualAccountingPageUITest.java | 54 +- .../account/ClosureBrowsePageUITest.java | 54 +- .../account/ClosureCreatePageUITest.java | 56 +- .../FinancialActivityBrowsePageUITest.java | 54 +- .../FinancialActivityCreatePageUITest.java | 52 +- .../pages/account/JournalPostPageUITest.java | 54 +- .../pages/account/RuleBrowsePageUITest.java | 54 +- .../pages/account/RuleCreatePageTest.java | 54 +- .../pages/account/RuleSelectPageUITest.java | 54 +- .../account/SearchJournalPageUITest.java | 54 +- .../pages/charge/ChargeBrowsePageUITest.java | 54 +- .../charge/ClientChargeCreatePageUITest.java | 54 +- .../charge/LoanChargeCreatePageUITest.java | 56 +- .../SavingDepositChargeCreatePageUITest.java | 54 +- .../charge/ShareChargeCreatePageUITest.java | 54 +- .../client/client/ClientCreatePageUITest.java | 54 +- .../pages/code/CodeBrowsePageUITest.java | 54 +- .../pages/entity/CheckerBrowsePageUITest.java | 54 +- .../pages/entity/CheckerCreatePageUITest.java | 48 +- .../pages/fund/FundBrowsePageUITest.java | 48 +- .../pages/fund/FundCreatePageTest.java | 48 +- .../holiday/HolidayBrowsePageUITest.java | 48 +- .../holiday/HolidayCreatePageUITest.java | 48 +- .../pages/hook/HookBrowsePageUITest.java | 48 +- .../pages/hook/HookCreatePageUITest.java | 48 +- .../pages/office/OfficeBrowsePageUITest.java | 48 +- .../pages/office/OfficeCreatePageUITest.java | 48 +- .../office/OfficeHierarchyPageUITest.java | 48 +- .../payment/PaymentTypeBrowsePageUITest.java | 48 +- .../payment/PaymentTypeCreatePageUITest.java | 48 +- .../product/fixed/FixedBrowsePageUITest.java | 46 +- .../product/fixed/FixedCreatePageUITest.java | 196 +- .../product/loan/LoanBrowsePageUITest.java | 46 +- .../product/loan/LoanCreatePageUITest.java | 176 +- .../product/mixed/MixedBrowsePageUITest.java | 46 +- .../product/mixed/MixedCreatePageUITest.java | 46 +- .../recurring/RecurringBrowsePageUITest.java | 46 +- .../recurring/RecurringCreatePageUITest.java | 194 +- .../saving/SavingBrowsePageUITest.java | 46 +- .../saving/SavingCreatePageUITest.java | 176 +- .../product/share/ShareBrowsePageUITest.java | 46 +- .../product/share/ShareCreatePageUITest.java | 196 +- .../rate/FloatingRateBrowsePageUITest.java | 48 +- .../rate/FloatingRateCreatePageUITest.java | 48 +- .../pages/role/RoleBrowsePageUITest.java | 48 +- .../pages/role/RoleCreatePageUITest.java | 46 +- .../service/EMailConfigurationPageUITest.java | 48 +- .../service/S3ConfigurationPageUITest.java | 48 +- .../service/SMSConfigurationPageUITest.java | 48 +- .../pages/staff/StaffBrowsePageUITest.java | 48 +- .../pages/staff/StaffCreatePageUITest.java | 48 +- .../pages/staff/UserBrowsePageUITest.java | 48 +- .../pages/staff/UserCreatePageUITest.java | 46 +- .../table/DataTableBrowsePageUITest.java | 46 +- .../table/DataTableCreatePageUITest.java | 46 +- .../tax/TaxComponentBrowsePageUITest.java | 48 +- .../tax/TaxComponentCreatePageUITest.java | 48 +- .../pages/tax/TaxGroupBrowsePageUITest.java | 48 +- .../pages/tax/TaxGroupCreatePageUITest.java | 48 +- .../pages/teller/TellerBrowsePageUITest.java | 48 +- .../pages/teller/TellerCreatePageUITest.java | 48 +- 798 files changed, 101635 insertions(+), 85985 deletions(-) create mode 100644 src/main/java/com/angkorteam/fintech/BootApplication.java create mode 100644 src/main/java/com/angkorteam/fintech/HostnameVerifier.java create mode 100644 src/main/java/com/angkorteam/fintech/MasterPage.java create mode 100644 src/main/java/com/angkorteam/fintech/MifosDataContextManager.java delete mode 100644 src/main/java/com/angkorteam/fintech/MifosDataSourceFactoryBean.java create mode 100644 src/main/java/com/angkorteam/fintech/SSLContextUtils.java create mode 100644 src/main/java/com/angkorteam/fintech/ServletInitializer.java delete mode 100644 src/main/java/com/angkorteam/fintech/Session.java create mode 100644 src/main/java/com/angkorteam/fintech/boot/AppProperties.java create mode 100644 src/main/java/com/angkorteam/fintech/client/AppError.java create mode 100644 src/main/java/com/angkorteam/fintech/client/AppException.java create mode 100644 src/main/java/com/angkorteam/fintech/client/AuthenticateRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/EnumOptionData.java create mode 100644 src/main/java/com/angkorteam/fintech/client/ErrorItem.java create mode 100644 src/main/java/com/angkorteam/fintech/client/ErrorValue.java create mode 100644 src/main/java/com/angkorteam/fintech/client/FineractClient.java create mode 100644 src/main/java/com/angkorteam/fintech/client/FineractResponse.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PostAuthenticationResponse.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PostGlClosureRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PostHolidaysRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PostOfficeRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PostOfficeTransactionRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PostRunAccrualRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PutGlClosureRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/PutOfficeRequest.java create mode 100644 src/main/java/com/angkorteam/fintech/client/RoleData.java create mode 100644 src/main/java/com/angkorteam/fintech/client/SysError.java create mode 100644 src/main/java/com/angkorteam/fintech/client/SysException.java create mode 100644 src/main/java/com/angkorteam/fintech/data/MifosSingleChoiceProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/data/MultipleChoiceProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/data/MySQLDataProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/data/OfficeHierarchyProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/data/OptionMapper.java create mode 100644 src/main/java/com/angkorteam/fintech/data/SingleChoiceProvider.java delete mode 100644 src/main/java/com/angkorteam/fintech/ddl/MOffice.java create mode 100644 src/main/java/com/angkorteam/fintech/factory/GsonFactoryBean.java create mode 100644 src/main/java/com/angkorteam/fintech/factory/JavaMailSenderFactoryBean.java create mode 100644 src/main/java/com/angkorteam/fintech/factory/WebSession.java create mode 100644 src/main/java/com/angkorteam/fintech/factory/WicketFactory.java delete mode 100644 src/main/java/com/angkorteam/fintech/layout/SectionBlock.java delete mode 100644 src/main/java/com/angkorteam/fintech/layout/SectionContainer.java delete mode 100644 src/main/java/com/angkorteam/fintech/layout/Size.java delete mode 100644 src/main/java/com/angkorteam/fintech/layout/UIBlock.java delete mode 100644 src/main/java/com/angkorteam/fintech/layout/UIContainer.java delete mode 100644 src/main/java/com/angkorteam/fintech/layout/UIRow.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AbstractTable.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AccAccountingRule.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AccGlAccount.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AccGlClosure.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AccGlFinancialActivityAccount.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AccGlJournalEntry.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AccProductMapping.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/AccRuleTag.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/CAccountNumberFormat.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/CCache.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/CConfiguration.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/CExternalService.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/CExternalServiceProperty.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/ClientDeviceRegistration.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/GlimAccount.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/GsimAccount.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/InteropIdentifier.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/Job.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/JobParameter.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/JobRunHistory.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAccountTransferDetail.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstruction.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstructionHistory.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAccountTransferTransaction.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAddress.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAdhoc.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAppUser.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAppUserPreviousPassword.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MAppUserRole.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCalendar.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCalendarHistory.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCalendarInstance.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCashier.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCashierTransaction.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCharge.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClient.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientAddress.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientAttendance.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientCharge.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientChargePaidBy.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientIdentifier.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientNonPerson.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientTransaction.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MClientTransferDetail.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCode.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCodeValue.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCreditBureau.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCreditBureauConfiguration.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCreditBureauLoanProductMapping.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MCurrency.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MDepositAccountOnHoldTransaction.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MDepositAccountRecurringDetail.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MDepositAccountTermAndPreClosure.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MDepositProductInterestRateChart.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MDepositProductRecurringDetail.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MDepositProductTermAndPreClosure.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MDocument.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MEntityDatatableCheck.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MEntityRelation.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MEntityToEntityAccess.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MEntityToEntityMapping.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MFamilyMember.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MFieldConfiguration.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MFloatingRate.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MFloatingRatePeriod.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MFund.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MGroup.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MGroupClient.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MHoliday.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MHolidayOffice.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MOffice.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/MOrganisationCurrency.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/Tenant.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/TenantServerConnection.java create mode 100644 src/main/java/com/angkorteam/fintech/meta/TimeZone.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/CurrencyConfigurationPage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/OrganizationDashboardPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/TodoPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/OrganizationPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/ProductsPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/SystemPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/UserBrowsePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/currency/CurrencyConfigurationPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/funds/ExternalIdValidator.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/funds/FundBrowsePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/funds/FundCreatePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/funds/FundModifyPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/funds/NameValidator.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/holidays/HolidayBrowsePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/holidays/HolidayCreatePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/holidays/HolidayModifyPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/offices/ExternalIdValidator.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/offices/NameValidator.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/offices/OfficeCreatePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/offices/OfficeHierarchyPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/offices/OfficeModifyPage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/organization/offices/OfficeTablePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/system/Test.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/system/configuration/ConfigurationBrowsePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/system/configuration/ConfigurationCreatePage.java create mode 100644 src/main/java/com/angkorteam/fintech/pages/admin/system/configuration/ConfigurationModifyPage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/fund/FundBrowsePage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/fund/FundCreatePage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/fund/FundModifyPage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/office/OfficeBrowsePage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/office/OfficeCreatePage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/office/OfficeHierarchyPage.java delete mode 100644 src/main/java/com/angkorteam/fintech/pages/office/OfficeModifyPage.java delete mode 100644 src/main/java/com/angkorteam/fintech/provider/MifosSingleChoiceProvider.java delete mode 100644 src/main/java/com/angkorteam/fintech/provider/OfficeHierarchyProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/provider/ui/MemoryContentHeaderProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/provider/ui/MemoryFooterProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/provider/ui/MemoryMainSidebarProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/provider/ui/MemoryNavbarProvider.java create mode 100644 src/main/java/com/angkorteam/fintech/provider/ui/MemoryThemeProvider.java create mode 100644 src/main/java/org/json/CDL.java create mode 100644 src/main/java/org/json/Cookie.java create mode 100644 src/main/java/org/json/CookieList.java create mode 100644 src/main/java/org/json/HTTP.java create mode 100644 src/main/java/org/json/HTTPTokener.java create mode 100644 src/main/java/org/json/JSONArray.java create mode 100644 src/main/java/org/json/JSONException.java create mode 100644 src/main/java/org/json/JSONML.java create mode 100644 src/main/java/org/json/JSONObject.java create mode 100644 src/main/java/org/json/JSONPointer.java create mode 100644 src/main/java/org/json/JSONPointerException.java create mode 100644 src/main/java/org/json/JSONPropertyIgnore.java create mode 100644 src/main/java/org/json/JSONPropertyName.java create mode 100644 src/main/java/org/json/JSONString.java create mode 100644 src/main/java/org/json/JSONStringer.java create mode 100644 src/main/java/org/json/JSONTokener.java create mode 100644 src/main/java/org/json/JSONWriter.java create mode 100644 src/main/java/org/json/Property.java create mode 100644 src/main/java/org/json/XML.java create mode 100644 src/main/java/org/json/XMLTokener.java create mode 100644 src/main/resources/application.properties delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/CurrencyConfigurationPage.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/OrganizationDashboardPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/TodoPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/OrganizationPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/ProductsPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/SystemPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/UserBrowsePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/currency/CurrencyConfigurationPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/funds/FundBrowsePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/funds/FundCreatePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/funds/FundModifyPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/holidays/HolidayBrowsePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/holidays/HolidayCreatePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/offices/OfficeCreatePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/offices/OfficeHierarchyPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/offices/OfficeModifyPage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/organization/offices/OfficeTablePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/system/configuration/ConfigurationBrowsePage.html create mode 100644 src/main/resources/com/angkorteam/fintech/pages/admin/system/test.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/fund/FundBrowsePage.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/fund/FundCreatePage.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/fund/FundModifyPage.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/office/OfficeBrowsePage.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/office/OfficeCreatePage.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/office/OfficeHierarchyPage.html delete mode 100644 src/main/resources/com/angkorteam/fintech/pages/office/OfficeModifyPage.html delete mode 100644 src/main/resources/log4j2.xml delete mode 100644 src/main/webapp/WEB-INF/api-context.xml delete mode 100644 src/main/webapp/WEB-INF/api-servlet.xml delete mode 100644 src/main/webapp/WEB-INF/fintech.properties.xml delete mode 100644 src/main/webapp/WEB-INF/web.xml delete mode 100644 src/test/java/com/angkorteam/adminlte/BoxABodyPanel.java delete mode 100644 src/test/java/com/angkorteam/adminlte/BoxAFooterPanel.java delete mode 100644 src/test/java/com/angkorteam/adminlte/BoxAHeaderPanel.java delete mode 100644 src/test/java/com/angkorteam/adminlte/InfoBoxAExtraPanel.java delete mode 100644 src/test/java/com/angkorteam/adminlte/UserBodyItemPanel.java delete mode 100644 src/test/java/com/angkorteam/adminlte/UserFooterItemPanel.java delete mode 100644 src/test/java/com/angkorteam/adminlte/UserProfileItemPanel.java create mode 100644 src/test/java/com/angkorteam/fintech/BankSavingPlan.java create mode 100644 src/test/java/com/angkorteam/fintech/IQSavingPlan.java create mode 100644 src/test/java/com/angkorteam/fintech/MetaModelProgram.java diff --git a/pom.xml b/pom.xml index 7fed6730..547327b3 100644 --- a/pom.xml +++ b/pom.xml @@ -1,461 +1,277 @@ - - 4.0.0 - com.angkorteam.fintech - fintech - war - 1.0-SNAPSHOT - fintech - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - yyyy-MM-dd'T'HH:mm:ssZZ - UTF-8 - UTF-8 - 1.8 - 3.1.0 - 8.0.0 - 1.7.25 - - none - 3.0.0 - 25.0-jre - 5.0.6.RELEASE - 5.0.5.RELEASE - 5.1.46 - 2.3.0 - 1.10 - 1.9.2 - 3.12.0 - 2.8.5 - 2.2.03 - 3.7 - 1.3 - 2.9.9 - 3.0.0.RELEASE - 2.6 - 0.9.11 - 3.17 - 0.8.1 - 3.2.1 - 1.16.1 - 9.0.8 - 3.7.0 - 3.0.0 - 3.0.1 - 1.6 - 2.10 - 2.21.0 - 2.21.0 - 1.59 - 4.12 - - - - - - - org.bouncycastle - bctls-jdk15on - ${bouncycastle.version} - - - - org.conscrypt - conscrypt-openjdk - 1.1.2 - linux-x86_64 - - - - org.bouncycastle - bcpg-jdk15on - ${bouncycastle.version} - - - - org.bouncycastle - bcpkix-jdk15on - ${bouncycastle.version} - - - - org.bouncycastle - bcprov-jdk15on - ${bouncycastle.version} - - - - org.apache.commons - commons-compress - ${commons-compress.version} - - - - org.reflections - reflections - ${reflection.version} - - - - org.apache.poi - poi - ${poi.version} - - - - joda-time - joda-time - ${joda-time.version} - - - - io.github.openunirest - unirest-java - ${unirest-java.version} - - - - com.google.code.gson - gson - ${gson.version} - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - - org.apache.commons - commons-text - ${commons-text.version} - - - - commons-io - commons-io - ${commons-io.version} - - - - javax.servlet - javax.servlet-api - ${servlet.version} - - - - commons-configuration - commons-configuration - ${configuration.version} - - - - org.jasypt - jasypt - ${jasypt.version} - - - - org.apache.commons - commons-dbcp2 - ${commons-dbcp2.version} - - - - mysql - mysql-connector-java - ${mysql.version} - - - - com.angkorteam.framework.extension - framework-extension - ${frmk.version} - - - - com.google.guava - guava - ${guava.version} - - - - - org.apache.wicket - wicket-core - ${wicket.version} - - - org.apache.wicket - wicket-extensions - ${wicket.version} - - - - org.apache.wicket - wicket-auth-roles - ${wicket.version} - - - - org.springframework - spring-context - ${spring.version} - - - org.springframework - spring-web - ${spring.version} - - - org.springframework - spring-webmvc - ${spring.version} - - - org.springframework - spring-jdbc - ${spring.version} - - - - - org.slf4j - slf4j-simple - ${slf4j.version} - - - - - org.apache.tomcat.embed - tomcat-embed-core - ${org.apache.tomcat.embed.version} - test - - - - org.apache.tomcat.embed - tomcat-embed-jasper - ${org.apache.tomcat.embed.version} - test - - - - - junit - junit - ${junit.version} - test - - - - - fintech - - - false - src/main/resources - - - false - src/main/java - - ** - - - **/*.java - - - - - - false - src/test/resources - - - false - src/test/java - - ** - - - **/*.java - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - ${project.build.sourceEncoding} - true - true - - - - org.apache.maven.plugins - maven-eclipse-plugin - ${maven-eclipse-plugin.version} - - true - ${wtp.version} - - - .settings/org.eclipse.core.resources.prefs - =${project.build.sourceEncoding}${line.separator}]]> - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - false - false - - - listener - com.angkorteam.fintech.junit.JUnit - - - - **/*SITest.java - - - - - org.apache.maven.plugins - maven-failsafe-plugin - ${maven-failsafe-plugin.version} - - - integration-test - - integration-test - - - - verify - - verify - - - - - false - false - - - listener - com.angkorteam.fintech.junit.EmbededTomcat - - - - **/*SITest.java - - - - - - org.jacoco - jacoco-maven-plugin - ${jacoco-maven-plugin.version} - - - prepare-agent - - prepare-agent - - - - report - prepare-package - - report - - - - post-unit-test - test - - report - - - - - target/jacoco.exec - - target/jacoco-ut - - - - post-unit-verify - verify - - report - - - - - target/jacoco.exec - - target/jacoco-ut - - - - - - target/jacoco.exec - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - - - ${project.version} - ${maven.build.timestamp} - - - - - - - - - - - Apache Nexus - https://repository.apache.org/content/repositories/snapshots/ - - false - - - true - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.3.1.RELEASE + + + + com.angkorteam.fintech + fintech + 1.0 + war + + fintech + + + + 29.0-jre + UTF-8 + UTF-8 + 1.8 + 2.5.3 + 3.8.1 + 2.10 + 2.0 + 8.9.0 + 3.1.0 + 2.8.6 + 3.11 + 2.6 + 1.3 + 4.5.12 + 1.66 + 1.9.3 + 1.4.7 + 2.10.6 + 2.7.0 + 8.0.21 + 3.13.4 + 0.9.12 + 1.8 + 1.6 + + yyyy-MM-dd'T'HH:mm:ssZZ + 1.7.25 + + 5.0.5.RELEASE + 1.10 + 3.12.0 + 2.5.03 + 0.9.12 + 4.1.2 + 1.16.1 + 4.12 + + + + + + com.angkorteam.webui + common + 1.0.0 + + + + org.apache.poi + poi + 4.1.2 + + + + org.apache.metamodel + MetaModel-full + 5.3.2 + + + org.json + json + + + + + + com.oracle.database.jdbc + ojdbc8 + 12.2.0.1 + + + + org.apache.poi + poi-ooxml + 4.1.2 + + + + io.github.openunirest + unirest-java + ${unirest-java.version} + + + org.json + json + + + + + + commons-net + commons-net + 3.6 + + + + org.apache.commons + commons-exec + ${commons-exec.version} + + + + commons-validator + commons-validator + ${commons-validator.version} + + + + org.reflections + reflections + ${reflections.version} + + + + org.apache.commons + commons-text + ${commons-text.version} + + + + org.jooq + jooq + ${jooq.version} + + + + org.jasypt + jasypt + ${jasypt.version} + + + + javax.mail + mail + ${mail.version} + + + + joda-time + joda-time + ${joda-time.version} + + + + mysql + mysql-connector-java + ${mysql.version} + + + + org.apache.commons + commons-dbcp2 + ${commons-dbcp2.version} + + + + commons-io + commons-io + ${commons-io.version} + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + + com.google.guava + guava + ${guava.version} + + + + com.google.code.gson + gson + ${gson.version} + + + + org.springframework + spring-context-support + + + + org.springframework + spring-jdbc + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + ROOT + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + true + true + + + + + org.apache.maven.plugins + maven-eclipse-plugin + ${maven-eclipse-plugin.version} + + true + ${wtp.version} + + + .settings/org.eclipse.core.resources.prefs + + =${project.build.sourceEncoding}${line.separator}]]> + + + + + + + + diff --git a/src/main/java/com/angkorteam/fintech/Application.java b/src/main/java/com/angkorteam/fintech/Application.java index 978853d1..f54deb05 100644 --- a/src/main/java/com/angkorteam/fintech/Application.java +++ b/src/main/java/com/angkorteam/fintech/Application.java @@ -1,89 +1,89 @@ -package com.angkorteam.fintech; - -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.util.Map; - -import org.apache.commons.configuration.XMLPropertiesConfiguration; -import org.apache.wicket.Page; -import org.apache.wicket.RuntimeConfigurationType; -import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession; -import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication; -import org.apache.wicket.core.request.mapper.CryptoMapper; -import org.apache.wicket.markup.html.IPackageResourceGuard; -import org.apache.wicket.markup.html.SecurePackageResourceGuard; -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.request.IRequestMapper; -import org.apache.wicket.request.resource.PackageResourceReference; -import org.springframework.context.ApplicationContext; -import org.springframework.web.context.support.WebApplicationContextUtils; - -import com.angkorteam.fintech.pages.LoginPage; -import com.angkorteam.fintech.pages.SimulatorPage; -import com.angkorteam.fintech.pages.client.client.ClientBrowsePage; -import com.angkorteam.framework.ReferenceUtilities; -import com.angkorteam.framework.ResourceScope; -import com.angkorteam.framework.SpringBean; -import com.google.common.collect.Maps; - -/** - * Created by socheatkhauv on 6/11/17. - */ -public class Application extends AuthenticatedWebApplication { - - public static Map FORMATS; - - static { - FORMATS = Maps.newHashMap(); - FORMATS.put("#,###.00", new DecimalFormat("#,###.00")); - FORMATS.put("#.00", new DecimalFormat("#.00")); - FORMATS.put("#,###,##0.00", new DecimalFormat("#,###,##0.00")); - } - - @Override - protected void init() { - super.init(); - XMLPropertiesConfiguration configuration = SpringBean.getBean(XMLPropertiesConfiguration.class); - - IPackageResourceGuard packageResourceGuard = this.getResourceSettings().getPackageResourceGuard(); - if (packageResourceGuard instanceof SecurePackageResourceGuard) { - SecurePackageResourceGuard guard = (SecurePackageResourceGuard) packageResourceGuard; - guard.addPattern("+*.ogg"); - guard.addPattern("+*.mp3"); - } - getJavaScriptLibrarySettings().setJQueryReference(new PackageResourceReference(ResourceScope.class, ReferenceUtilities.J_QUERY_JS)); - mountPage("/simulator", SimulatorPage.class); - - RuntimeConfigurationType configurationType = RuntimeConfigurationType.valueOf(configuration.getString("wicket")); - - if (configurationType == RuntimeConfigurationType.DEPLOYMENT) { - IRequestMapper cryptoMapper = new CryptoMapper(getRootRequestMapper(), this); - setRootRequestMapper(cryptoMapper); - } - - getMarkupSettings().setStripWicketTags(true); - } - - @Override - public Class getHomePage() { - return ClientBrowsePage.class; - } - - @Override - public RuntimeConfigurationType getConfigurationType() { - ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); - XMLPropertiesConfiguration configuration = applicationContext.getBean(XMLPropertiesConfiguration.class); - return RuntimeConfigurationType.valueOf(configuration.getString("wicket")); - } - - @Override - protected Class getWebSessionClass() { - return Session.class; - } - - @Override - protected Class getSignInPageClass() { - return LoginPage.class; - } - -} +//package com.angkorteam.fintech; +// +//import java.text.DecimalFormat; +//import java.text.NumberFormat; +//import java.util.Map; +// +//import org.apache.commons.configuration.XMLPropertiesConfiguration; +//import org.apache.wicket.Page; +//import org.apache.wicket.RuntimeConfigurationType; +//import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession; +//import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication; +//import org.apache.wicket.core.request.mapper.CryptoMapper; +//import org.apache.wicket.markup.html.IPackageResourceGuard; +//import org.apache.wicket.markup.html.SecurePackageResourceGuard; +//import org.apache.wicket.markup.html.WebPage; +//import org.apache.wicket.request.IRequestMapper; +//import org.apache.wicket.request.resource.PackageResourceReference; +//import org.springframework.context.ApplicationContext; +//import org.springframework.web.context.support.WebApplicationContextUtils; +// +//import com.angkorteam.fintech.pages.LoginPage; +//import com.angkorteam.fintech.pages.SimulatorPage; +//import com.angkorteam.fintech.pages.client.client.ClientBrowsePage; +//import com.angkorteam.framework.ReferenceUtilities; +//import com.angkorteam.framework.ResourceScope; +//import com.angkorteam.framework.SpringBean; +//import com.google.common.collect.Maps; +// +///** +// * Created by socheatkhauv on 6/11/17. +// */ +//public class Application extends AuthenticatedWebApplication { +// +// public static Map FORMATS; +// +// static { +// FORMATS = Maps.newHashMap(); +// FORMATS.put("#,###.00", new DecimalFormat("#,###.00")); +// FORMATS.put("#.00", new DecimalFormat("#.00")); +// FORMATS.put("#,###,##0.00", new DecimalFormat("#,###,##0.00")); +// } +// +// @Override +// protected void init() { +// super.init(); +// XMLPropertiesConfiguration configuration = SpringBean.getBean(XMLPropertiesConfiguration.class); +// +// IPackageResourceGuard packageResourceGuard = this.getResourceSettings().getPackageResourceGuard(); +// if (packageResourceGuard instanceof SecurePackageResourceGuard) { +// SecurePackageResourceGuard guard = (SecurePackageResourceGuard) packageResourceGuard; +// guard.addPattern("+*.ogg"); +// guard.addPattern("+*.mp3"); +// } +// getJavaScriptLibrarySettings().setJQueryReference(new PackageResourceReference(ResourceScope.class, ReferenceUtilities.J_QUERY_JS)); +// mountPage("/simulator", SimulatorPage.class); +// +// RuntimeConfigurationType configurationType = RuntimeConfigurationType.valueOf(configuration.getString("wicket")); +// +// if (configurationType == RuntimeConfigurationType.DEPLOYMENT) { +// IRequestMapper cryptoMapper = new CryptoMapper(getRootRequestMapper(), this); +// setRootRequestMapper(cryptoMapper); +// } +// +// getMarkupSettings().setStripWicketTags(true); +// } +// +// @Override +// public Class getHomePage() { +// return ClientBrowsePage.class; +// } +// +// @Override +// public RuntimeConfigurationType getConfigurationType() { +// ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); +// XMLPropertiesConfiguration configuration = applicationContext.getBean(XMLPropertiesConfiguration.class); +// return RuntimeConfigurationType.valueOf(configuration.getString("wicket")); +// } +// +// @Override +// protected Class getWebSessionClass() { +// return Session.class; +// } +// +// @Override +// protected Class getSignInPageClass() { +// return LoginPage.class; +// } +// +//} diff --git a/src/main/java/com/angkorteam/fintech/BootApplication.java b/src/main/java/com/angkorteam/fintech/BootApplication.java new file mode 100644 index 00000000..60015e79 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/BootApplication.java @@ -0,0 +1,132 @@ +package com.angkorteam.fintech; + +import com.angkorteam.fintech.boot.AppProperties; +import com.angkorteam.fintech.client.FineractClient; +import com.angkorteam.fintech.spring.NumberGenerator; +import com.angkorteam.fintech.spring.NumberGeneratorImpl; +import com.angkorteam.fintech.spring.StringGenerator; +import com.angkorteam.fintech.spring.StringGeneratorImpl; +import org.apache.commons.dbcp2.BasicDataSource; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.metamodel.DataContext; +import org.apache.metamodel.factory.DataContextFactoryRegistryImpl; +import org.apache.metamodel.factory.DataContextPropertiesImpl; +import org.jasypt.util.password.PasswordEncryptor; +import org.jasypt.util.password.StrongPasswordEncryptor; +import org.jasypt.util.text.AES256TextEncryptor; +import org.jasypt.util.text.TextEncryptor; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +import javax.net.ssl.SSLContext; +import javax.sql.DataSource; +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; + +@SpringBootApplication +public class BootApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(BootApplication.class, args); + } + + @Bean("stringGenerator") + public StringGenerator createStringGenerator() { + return new StringGeneratorImpl(); + } + + @Bean("numberGenerator") + public NumberGenerator createNumberGenerator() { + return new NumberGeneratorImpl(); + } + + @Bean(name = "delegateDataSource", destroyMethod = "close") + public DataSource createDelegateDataSource(AppProperties properties, TextEncryptor textEncryptor) { + BasicDataSource dataSource = new BasicDataSource(); + dataSource.setDriverClassName(properties.getJdbcDriverClassName()); + dataSource.setUrl(properties.getJdbcUrl()); + dataSource.setUsername(properties.getJdbcUsername()); + try { + dataSource.setPassword(textEncryptor.decrypt(properties.getJdbcPassword())); + } catch (Throwable e) { + dataSource.setPassword(properties.getJdbcPassword()); + } + return dataSource; + } + + @Bean(name = "delegateDataContext") + public DataContext createDelegateDataContext(AppProperties properties, TextEncryptor textEncryptor) { + DataContextPropertiesImpl configuration = new DataContextPropertiesImpl(); + configuration.put("type", "jdbc"); + configuration.put("url", properties.getJdbcUrl()); + configuration.put("driver-class", properties.getJdbcDriverClassName()); + configuration.put("username", properties.getJdbcUsername()); + configuration.put("password", properties.getJdbcPassword()); + return DataContextFactoryRegistryImpl.getDefaultInstance().createDataContext(configuration); + } + + @Bean("mifosDataSource") + public MifosDataSourceManager createDataSource(@Qualifier("delegateDataContext") DataContext delegate, AppProperties properties) { + MifosDataSourceManager mifosDataSource = new MifosDataSourceManager(); + mifosDataSource.setMifosUrl(properties.getMifosUrl()); + mifosDataSource.setDelegate(delegate); + return mifosDataSource; + } + + @Bean("mifosDataContext") + public MifosDataContextManager createDataContext(@Qualifier("delegateDataContext") DataContext delegate, AppProperties properties) { + MifosDataContextManager mifosDataSource = new MifosDataContextManager(); + mifosDataSource.setMifosUrl(properties.getMifosUrl()); + mifosDataSource.setDelegate(delegate); + return mifosDataSource; + } + + @Bean + public ThreadPoolTaskExecutor createExecutor(AppProperties properties) { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(1); + executor.setMaxPoolSize(1); + executor.setQueueCapacity(500); + executor.setDaemon(true); + executor.setBeanName("executor"); + return executor; + } + + @Bean + public ThreadPoolTaskScheduler createScheduler() { + ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setBeanName("scheduler"); + scheduler.setDaemon(true); + scheduler.setPoolSize(1); + return scheduler; + } + + @Bean("passwordEncryptor") + public PasswordEncryptor createPasswordEncryptor() { + StrongPasswordEncryptor encryptor = new StrongPasswordEncryptor(); + return encryptor; + } + + @Bean("textEncryptor") + public TextEncryptor createTextEncryptor(AppProperties properties) { + AES256TextEncryptor textEncryptor = new AES256TextEncryptor(); + textEncryptor.setPassword(properties.getSecret()); + return textEncryptor; + } + + @Bean + public FineractClient createFineractClient(AppProperties properties) throws CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException { + SSLContextBuilder builder = new SSLContextBuilder(); + builder.loadTrustMaterial(properties.getCacert(), "changeit".toCharArray()); + SSLContext ssl = builder.build(); + return new FineractClient(ssl, properties.getMifosUrl()); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/HostnameVerifier.java b/src/main/java/com/angkorteam/fintech/HostnameVerifier.java new file mode 100644 index 00000000..dfb255d7 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/HostnameVerifier.java @@ -0,0 +1,12 @@ +package com.angkorteam.fintech; + +import javax.net.ssl.SSLSession; + +public class HostnameVerifier implements javax.net.ssl.HostnameVerifier { + + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/Localizer.java b/src/main/java/com/angkorteam/fintech/Localizer.java index add85e2f..a0384064 100644 --- a/src/main/java/com/angkorteam/fintech/Localizer.java +++ b/src/main/java/com/angkorteam/fintech/Localizer.java @@ -1,145 +1,145 @@ -package com.angkorteam.fintech; - -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.apache.wicket.Component; -import org.apache.wicket.Page; -import org.apache.wicket.Session; -import org.apache.wicket.model.IModel; - -import com.angkorteam.framework.SpringBean; -import com.angkorteam.framework.spring.JdbcNamed; -import com.angkorteam.framework.spring.JdbcTemplate; - -public class Localizer extends org.apache.wicket.Localizer { - - private static List SYSTEM = new ArrayList<>(); - - static { - SYSTEM.add("OddEvenItem.CSS.odd"); - SYSTEM.add("OddEvenItem.CSS.even"); - SYSTEM.add("OrderByLink.CSS.none"); - SYSTEM.add("OrderByLink.CSS.ascending"); - SYSTEM.add("OrderByLink.CSS.descending"); - SYSTEM.add("AutoLabel.CSS.required"); - SYSTEM.add("NavigatorLabel"); - SYSTEM.add("PagingNavigation.page"); - SYSTEM.add("PagingNavigator.first"); - SYSTEM.add("PagingNavigator.last"); - SYSTEM.add("PagingNavigator.next"); - SYSTEM.add("PagingNavigator.previous"); - SYSTEM.add("datatable.go"); - SYSTEM.add("datatable.clear"); - SYSTEM.add("datatable.no-records-found"); - } - - @Override - public String getStringIgnoreSettings(String key, Component component, IModel model, Locale locale, String style, String defaultValue) { - if (SYSTEM.contains(key)) { - return super.getStringIgnoreSettings(key, component, model, locale, style, defaultValue); - } - String pageClass = null; - if (component != null) { - if (component instanceof org.apache.wicket.Page) { - pageClass = component.getClass().getName(); - } else { - Page page = component.findParent(Page.class); - if (page != null) { - pageClass = page.getClass().getName(); - } - } - } - - // Make sure locale, style and variation have the right values - String variation = (component != null ? component.getVariation() : null); - - if ((locale == null) && (component != null)) { - locale = component.getLocale(); - } - if (locale == null) { - locale = org.apache.wicket.Session.exists() ? org.apache.wicket.Session.get().getLocale() : Locale.getDefault(); - } - - if ((style == null) && (component != null)) { - style = component.getStyle(); - } - if (style == null) { - style = org.apache.wicket.Session.exists() ? Session.get().getStyle() : null; - } - - JdbcTemplate jdbcTemplate = SpringBean.getBean(JdbcTemplate.class); - JdbcNamed named = SpringBean.getBean(JdbcNamed.class); - List wheres = new ArrayList<>(); - if (pageClass == null || "".equals(pageClass)) { - wheres.add("page_class is null"); - } else { - wheres.add("page_class = '" + pageClass + "'"); - } - if (variation == null || "".equals(variation)) { - wheres.add("variation is null"); - } else { - wheres.add("variation = '" + variation + "'"); - } - if (locale == null || locale.getLanguage() == null || "".equals(locale.getLanguage())) { - wheres.add("locale is null"); - } else { - wheres.add("locale = '" + locale.getLanguage() + "'"); - } - if (style == null || "".equals(style)) { - wheres.add("style is null"); - } else { - wheres.add("style = '" + style + "'"); - } - wheres.add("message_key = '" + key + "'"); - - if (key.contains("genderField")) { - System.out.println("break"); - } - - Map localization = jdbcTemplate.queryForMap("select id, message, silent from m_localization where " + StringUtils.join(wheres, " and ")); - if (localization == null) { - String wicketValue = super.getStringIgnoreSettings(key, component, model, locale, style, defaultValue); - Map rec = new HashMap<>(); - String id = jdbcTemplate.queryForObject("select uuid() from dual", String.class); - if (pageClass != null && !"".equals(pageClass)) { - rec.put("page_class", pageClass); - } - if (variation != null && !"".equals(variation)) { - rec.put("variation", variation); - } - if (locale != null && locale.getLanguage() != null && !"".equals(locale.getLanguage())) { - rec.put("locale", locale.getLanguage()); - } - if (style != null && !"".equals(style)) { - rec.put("style", style); - } - if (!"".equals(key)) { - rec.put("message_key", key); - } - rec.put("silent", false); - rec.put("version", 1); - rec.put("demand", new Date()); - // Repository.insert(jdbcTemplate, named, "m_localization", id, rec); - return wicketValue; - } else { - if (localization.get("message") == null || "".equals(localization.get("message"))) { - String wicketValue = super.getStringIgnoreSettings(key, component, model, locale, style, defaultValue); - if (localization.get("silent") != null && !((Boolean) localization.get("silent"))) { - jdbcTemplate.update("UPDATE m_localization SET demand = ? where id = ?", new Date(), localization.get("id")); - } - return wicketValue; - } else { - if (localization.get("silent") != null && !((Boolean) localization.get("silent"))) { - jdbcTemplate.update("UPDATE m_localization SET demand = ? where id = ?", new Date(), localization.get("id")); - } - return (String) localization.get("message"); - } - } - } -} +//package com.angkorteam.fintech; +// +//import java.util.ArrayList; +//import java.util.Date; +//import java.util.HashMap; +//import java.util.List; +//import java.util.Locale; +//import java.util.Map; +// +//import org.apache.commons.lang3.StringUtils; +//import org.apache.wicket.Component; +//import org.apache.wicket.Page; +//import org.apache.wicket.Session; +//import org.apache.wicket.model.IModel; +// +//import com.angkorteam.framework.SpringBean; +//import com.angkorteam.framework.spring.JdbcNamed; +//import com.angkorteam.framework.spring.JdbcTemplate; +// +//public class Localizer extends org.apache.wicket.Localizer { +// +// private static List SYSTEM = new ArrayList<>(); +// +// static { +// SYSTEM.add("OddEvenItem.CSS.odd"); +// SYSTEM.add("OddEvenItem.CSS.even"); +// SYSTEM.add("OrderByLink.CSS.none"); +// SYSTEM.add("OrderByLink.CSS.ascending"); +// SYSTEM.add("OrderByLink.CSS.descending"); +// SYSTEM.add("AutoLabel.CSS.required"); +// SYSTEM.add("NavigatorLabel"); +// SYSTEM.add("PagingNavigation.page"); +// SYSTEM.add("PagingNavigator.first"); +// SYSTEM.add("PagingNavigator.last"); +// SYSTEM.add("PagingNavigator.next"); +// SYSTEM.add("PagingNavigator.previous"); +// SYSTEM.add("datatable.go"); +// SYSTEM.add("datatable.clear"); +// SYSTEM.add("datatable.no-records-found"); +// } +// +// @Override +// public String getStringIgnoreSettings(String key, Component component, IModel model, Locale locale, String style, String defaultValue) { +// if (SYSTEM.contains(key)) { +// return super.getStringIgnoreSettings(key, component, model, locale, style, defaultValue); +// } +// String pageClass = null; +// if (component != null) { +// if (component instanceof org.apache.wicket.Page) { +// pageClass = component.getClass().getName(); +// } else { +// Page page = component.findParent(Page.class); +// if (page != null) { +// pageClass = page.getClass().getName(); +// } +// } +// } +// +// // Make sure locale, style and variation have the right values +// String variation = (component != null ? component.getVariation() : null); +// +// if ((locale == null) && (component != null)) { +// locale = component.getLocale(); +// } +// if (locale == null) { +// locale = org.apache.wicket.Session.exists() ? org.apache.wicket.Session.get().getLocale() : Locale.getDefault(); +// } +// +// if ((style == null) && (component != null)) { +// style = component.getStyle(); +// } +// if (style == null) { +// style = org.apache.wicket.Session.exists() ? Session.get().getStyle() : null; +// } +// +// JdbcTemplate jdbcTemplate = SpringBean.getBean(JdbcTemplate.class); +// JdbcNamed named = SpringBean.getBean(JdbcNamed.class); +// List wheres = new ArrayList<>(); +// if (pageClass == null || "".equals(pageClass)) { +// wheres.add("page_class is null"); +// } else { +// wheres.add("page_class = '" + pageClass + "'"); +// } +// if (variation == null || "".equals(variation)) { +// wheres.add("variation is null"); +// } else { +// wheres.add("variation = '" + variation + "'"); +// } +// if (locale == null || locale.getLanguage() == null || "".equals(locale.getLanguage())) { +// wheres.add("locale is null"); +// } else { +// wheres.add("locale = '" + locale.getLanguage() + "'"); +// } +// if (style == null || "".equals(style)) { +// wheres.add("style is null"); +// } else { +// wheres.add("style = '" + style + "'"); +// } +// wheres.add("message_key = '" + key + "'"); +// +// if (key.contains("genderField")) { +// System.out.println("break"); +// } +// +// Map localization = jdbcTemplate.queryForMap("select id, message, silent from m_localization where " + StringUtils.join(wheres, " and ")); +// if (localization == null) { +// String wicketValue = super.getStringIgnoreSettings(key, component, model, locale, style, defaultValue); +// Map rec = new HashMap<>(); +// String id = jdbcTemplate.queryForObject("select uuid() from dual", String.class); +// if (pageClass != null && !"".equals(pageClass)) { +// rec.put("page_class", pageClass); +// } +// if (variation != null && !"".equals(variation)) { +// rec.put("variation", variation); +// } +// if (locale != null && locale.getLanguage() != null && !"".equals(locale.getLanguage())) { +// rec.put("locale", locale.getLanguage()); +// } +// if (style != null && !"".equals(style)) { +// rec.put("style", style); +// } +// if (!"".equals(key)) { +// rec.put("message_key", key); +// } +// rec.put("silent", false); +// rec.put("version", 1); +// rec.put("demand", new Date()); +// // Repository.insert(jdbcTemplate, named, "m_localization", id, rec); +// return wicketValue; +// } else { +// if (localization.get("message") == null || "".equals(localization.get("message"))) { +// String wicketValue = super.getStringIgnoreSettings(key, component, model, locale, style, defaultValue); +// if (localization.get("silent") != null && !((Boolean) localization.get("silent"))) { +// jdbcTemplate.update("UPDATE m_localization SET demand = ? where id = ?", new Date(), localization.get("id")); +// } +// return wicketValue; +// } else { +// if (localization.get("silent") != null && !((Boolean) localization.get("silent"))) { +// jdbcTemplate.update("UPDATE m_localization SET demand = ? where id = ?", new Date(), localization.get("id")); +// } +// return (String) localization.get("message"); +// } +// } +// } +//} diff --git a/src/main/java/com/angkorteam/fintech/MasterPage.java b/src/main/java/com/angkorteam/fintech/MasterPage.java new file mode 100644 index 00000000..0fcbdad7 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/MasterPage.java @@ -0,0 +1,170 @@ +package com.angkorteam.fintech; + +import com.angkorteam.fintech.factory.WebSession; +import com.angkorteam.fintech.provider.ui.MemoryFooterProvider; +import com.angkorteam.fintech.provider.ui.MemoryMainSidebarProvider; +import com.angkorteam.fintech.provider.ui.MemoryNavbarProvider; +import com.angkorteam.fintech.provider.ui.MemoryThemeProvider; +import io.github.openunirest.http.JsonNode; +import org.apache.commons.lang3.StringUtils; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.form.FormComponent; +import org.apache.wicket.model.IModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.json.JSONArray; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.MissingResourceException; + +public abstract class MasterPage extends com.angkorteam.webui.frmk.wicket.layout.MasterPage { + + private static final Logger LOGGER = LoggerFactory.getLogger(MasterPage.class); + + public MasterPage() { + } + + public MasterPage(IModel model) { + super(model); + } + + public MasterPage(PageParameters parameters) { + super(parameters); + } + + @Override + protected void onInitData() { + this.themeProvider = new MemoryThemeProvider(); + this.mainSidebarProvider = new MemoryMainSidebarProvider(getSession()); + this.navbarProvider = new MemoryNavbarProvider(getSession()); + this.footerProvider = new MemoryFooterProvider(getSession()); + } + + @Override + public WebSession getSession() { + return (WebSession) super.getSession(); + } + + public boolean reportError(JsonNode node) { + if (node.getObject().has("errors")) { + JSONArray array = node.getObject().getJSONArray("errors"); + for (Object object : array) { + JSONObject o = (JSONObject) object; + String defaultUserMessage = o.getString("defaultUserMessage"); + String userMessageGlobalisationCode = o.getString("userMessageGlobalisationCode"); + if (userMessageGlobalisationCode != null && !"".equals(userMessageGlobalisationCode)) { + String fieldNames = null; + try { + fieldNames = getString(userMessageGlobalisationCode); + } catch (MissingResourceException e) { + error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); + continue; + } + + if (fieldNames != null && !"".equals(fieldNames)) { + for (String fieldName : StringUtils.split(fieldNames, ',')) { + java.lang.reflect.Field temp = null; + try { + temp = getClass().getDeclaredField(StringUtils.trimToEmpty(fieldName)); + } catch (NoSuchFieldException | SecurityException e) { + error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); + continue; + } + temp.setAccessible(true); + + FormComponent field = null; + try { + field = (FormComponent) temp.get(this); + } catch (IllegalArgumentException | IllegalAccessException e) { + error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); + continue; + } + + if (o.has("parameterName")) { + String parameterName = o.getString("parameterName"); + String parameterNameField = null; + String translated = null; + try { + parameterNameField = getString(parameterName); + } catch (MissingResourceException e) { + } + if (parameterNameField != null && !"".equals(parameterNameField)) { + java.lang.reflect.Field t = null; + try { + t = getClass().getDeclaredField(parameterNameField); + } catch (NoSuchFieldException | SecurityException e) { + } + if (t != null) { + t.setAccessible(true); + FormComponent f = null; + try { + f = (FormComponent) temp.get(this); + } catch (IllegalArgumentException | IllegalAccessException e) { + } + if (f != null && f.getLabel() != null) { + translated = f.getLabel().getObject(); + } + } + if (translated != null && !"".equals(translated)) { + defaultUserMessage = StringUtils.replaceAll(defaultUserMessage, parameterName, "'" + translated + "'"); + } + } + } + + field.info(defaultUserMessage); + LOGGER.info("{} => {} => {}", userMessageGlobalisationCode, fieldName, defaultUserMessage); + } + } else { + error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); + } + } else { + error(defaultUserMessage); + } + } + + return true; + } else { + if (node.getObject().has("exception") || node.getObject().has("error")) { + if (node.getObject().has("exception") && !node.getObject().isNull("exception")) { + error((String) node.getObject().get("exception")); + } + if (node.getObject().has("error") && !node.getObject().isNull("error")) { + error((String) node.getObject().get("error")); + } + if (node.getObject().has("message") && !node.getObject().isNull("message")) { + error((String) node.getObject().get("message").getClass().getName()); + } + return true; + } + } + return false; + } + + protected void reportError(JsonNode node, AjaxRequestTarget target) { + if (node == null) { + return; + } + if (node.getObject().has("errors")) { + JSONArray array = (JSONArray) node.getObject().get("errors"); + for (Object object : array) { + JSONObject o = (JSONObject) object; + error((String) o.get("defaultUserMessage")); + } + } else { + if (node.getObject().has("exception") || node.getObject().has("error")) { + if (node.getObject().has("exception")) { + error((String) node.getObject().get("exception")); + } + if (node.getObject().has("error")) { + error((String) node.getObject().get("error")); + } + if (node.getObject().has("message")) { + error((String) node.getObject().get("message")); + } + } + } + target.add(getMessageContainer()); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/MifosDataContextManager.java b/src/main/java/com/angkorteam/fintech/MifosDataContextManager.java new file mode 100644 index 00000000..a5269317 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/MifosDataContextManager.java @@ -0,0 +1,75 @@ +package com.angkorteam.fintech; + +import com.angkorteam.fintech.meta.TenantServerConnection; +import com.angkorteam.fintech.meta.Tenant; +import com.google.common.collect.Maps; +import com.mysql.cj.jdbc.Driver; +import org.apache.metamodel.DataContext; +import org.apache.metamodel.data.DataSet; +import org.apache.metamodel.data.Row; +import org.apache.metamodel.factory.DataContextFactoryRegistryImpl; +import org.apache.metamodel.factory.DataContextPropertiesImpl; +import org.springframework.beans.factory.InitializingBean; + +import java.util.Map; + +public class MifosDataContextManager implements InitializingBean { + + private String mifosUrl; + + private Map dataSources = Maps.newHashMap(); + + private DataContext delegate; + + @Override + public void afterPropertiesSet() throws Exception { + if (this.delegate == null) { + throw new NullPointerException("delegate is null"); + } + if (this.mifosUrl == null || "".equals(this.mifosUrl)) { + throw new NullPointerException("mifos url is null or empty"); + } + } + + public String getMifosUrl() { + return mifosUrl; + } + + public void setMifosUrl(String mifosUrl) { + this.mifosUrl = mifosUrl; + } + + public void setDelegate(DataContext delegate) { + this.delegate = delegate; + } + + public DataContext getDataContext(String identifier) { + if (!this.dataSources.containsKey(identifier)) { + Tenant tenants = Tenant.staticInitialize(this.delegate); + TenantServerConnection tenantServerConnections = TenantServerConnection.staticInitialize(this.delegate); + Row tenantObject = null; + try (DataSet tenantDataSet = this.delegate.query().from(tenants).selectAll().where(tenants.IDENTIFIER).eq(identifier).execute()) { + tenantDataSet.next(); + tenantObject = tenantDataSet.getRow(); + } + + try (DataSet connectionDataSet = this.delegate.query().from(tenantServerConnections).selectAll().where(tenantServerConnections.ID).eq(tenantObject.getValue(tenants.ID)).execute()) { + connectionDataSet.next(); + Row connectionObject = connectionDataSet.getRow(); + String jdbcUrl = "jdbc:mysql://" + connectionObject.getValue(tenantServerConnections.SCHEMA_SERVER) + ":" + connectionObject.getValue(tenantServerConnections.SCHEMA_SERVER_PORT) + "/" + connectionObject.getValue(tenantServerConnections.SCHEMA_NAME) + "?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=true&serverTimezone=UTC"; + + DataContextPropertiesImpl configuration = new DataContextPropertiesImpl(); + configuration.put("type", "jdbc"); + configuration.put("url", jdbcUrl); + configuration.put("driver-class", Driver.class.getName()); + configuration.put("username", (String) connectionObject.getValue(tenantServerConnections.SCHEMA_USERNAME)); + configuration.put("password", (String) connectionObject.getValue(tenantServerConnections.SCHEMA_PASSWORD)); + DataContext dataContext = DataContextFactoryRegistryImpl.getDefaultInstance().createDataContext(configuration); + + this.dataSources.put(identifier, dataContext); + } + } + return this.dataSources.get(identifier); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/MifosDataSourceFactoryBean.java b/src/main/java/com/angkorteam/fintech/MifosDataSourceFactoryBean.java deleted file mode 100644 index ee9e54df..00000000 --- a/src/main/java/com/angkorteam/fintech/MifosDataSourceFactoryBean.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.angkorteam.fintech; - -import java.sql.Connection; -import java.sql.SQLException; - -import javax.servlet.http.HttpSession; -import javax.sql.DataSource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; - -import com.angkorteam.framework.HttpServletRequestDataSource; - -public class MifosDataSourceFactoryBean implements FactoryBean, InitializingBean, DisposableBean { - - private static final Logger LOGGER = LoggerFactory.getLogger(MifosDataSourceFactoryBean.class); - - private MifosDataSourceManager manager; - - private DataSource dataSource; - - @Autowired - private HttpSession session; - - @Override - public DataSource getObject() throws Exception { - return this.dataSource; - } - - @Override - public Class getObjectType() { - return DataSource.class; - } - - @Override - public boolean isSingleton() { - return true; - } - - public void setManager(MifosDataSourceManager manager) { - this.manager = manager; - } - - @Override - public void afterPropertiesSet() throws Exception { - if (this.manager == null) { - throw new Exception("manager is required"); - } - String identifier = (String) this.session.getAttribute(Session.IDENTIFIER); - if (identifier != null && !"".equals(identifier)) { - this.dataSource = new HttpServletRequestDataSource(this.manager.getDataSource(identifier)); - } else { - throw new RuntimeException("could not find datasource for " + identifier); - } - } - - @Override - public void destroy() throws Exception { - if (this.dataSource != null && this.dataSource instanceof HttpServletRequestDataSource) { - try (Connection connection = this.dataSource.getConnection()) { - if (connection != null) { - try { - connection.commit(); - } catch (SQLException e) { - LOGGER.info("could not commit transaction due to this reason {}", e.getMessage()); - connection.rollback(); - } - } - } - } - } -} diff --git a/src/main/java/com/angkorteam/fintech/MifosDataSourceManager.java b/src/main/java/com/angkorteam/fintech/MifosDataSourceManager.java index b8680b35..e8acdcf5 100644 --- a/src/main/java/com/angkorteam/fintech/MifosDataSourceManager.java +++ b/src/main/java/com/angkorteam/fintech/MifosDataSourceManager.java @@ -1,16 +1,19 @@ package com.angkorteam.fintech; -import java.sql.Connection; -import java.util.Map; - -import javax.sql.DataSource; - +import com.angkorteam.fintech.meta.TenantServerConnection; +import com.angkorteam.fintech.meta.Tenant; +import com.google.common.collect.Maps; +import com.mysql.cj.jdbc.Driver; import org.apache.commons.dbcp2.BasicDataSource; +import org.apache.metamodel.DataContext; +import org.apache.metamodel.data.DataSet; +import org.apache.metamodel.data.Row; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; -import com.angkorteam.framework.spring.JdbcTemplate; -import com.google.common.collect.Maps; +import javax.sql.DataSource; +import java.sql.Connection; +import java.util.Map; public class MifosDataSourceManager implements DisposableBean, InitializingBean { @@ -18,7 +21,7 @@ public class MifosDataSourceManager implements DisposableBean, InitializingBean private Map dataSources = Maps.newHashMap(); - private DataSource delegate; + private DataContext delegate; @Override public void afterPropertiesSet() throws Exception { @@ -38,30 +41,36 @@ public void setMifosUrl(String mifosUrl) { this.mifosUrl = mifosUrl; } - public void setDelegate(DataSource delegate) { + public void setDelegate(DataContext delegate) { this.delegate = delegate; } public DataSource getDataSource(String identifier) { if (!this.dataSources.containsKey(identifier)) { - JdbcTemplate jdbcTemplate = new JdbcTemplate(this.delegate); - Map tenantObject = jdbcTemplate.queryForMap("select * from tenants where identifier = ?", identifier); - Map connectionObject = jdbcTemplate.queryForMap("select * from tenant_server_connections where id = ?", tenantObject.get("id")); - BasicDataSource dataSource = new BasicDataSource(); - dataSource.setDriverClassName("com.mysql.jdbc.Driver"); - dataSource.setUsername((String) connectionObject.get("schema_username")); - dataSource.setPassword((String) connectionObject.get("schema_password")); - dataSource.setMaxIdle(((Number) connectionObject.get("pool_max_idle")).intValue()); - dataSource.setMinIdle(((Number) connectionObject.get("pool_min_idle")).intValue()); - dataSource.setMaxWaitMillis(5000); - dataSource.setMaxTotal(200); - dataSource.setInitialSize(30); - dataSource.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); - dataSource.setDefaultAutoCommit(false); - dataSource.setEnableAutoCommitOnReturn(true); - String jdbcUrl = "jdbc:mysql://" + connectionObject.get("schema_server") + ":" + String.valueOf(connectionObject.get("schema_server_port")) + "/" + connectionObject.get("schema_name") + "?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false&serverTimezone=UTC"; - dataSource.setUrl(jdbcUrl); - this.dataSources.put(identifier, dataSource); + Tenant tenants = Tenant.staticInitialize(this.delegate); + TenantServerConnection tenantServerConnections = TenantServerConnection.staticInitialize(this.delegate); + Row tenantObject = null; + try (DataSet tenantDataSet = this.delegate.query().from(tenants).selectAll().where(tenants.IDENTIFIER).eq(identifier).execute()) { + tenantDataSet.next(); + tenantObject = tenantDataSet.getRow(); + } + + try (DataSet connectionDataSet = this.delegate.query().from(tenantServerConnections).selectAll().where(tenantServerConnections.ID).eq(tenantObject.getValue(tenants.ID)).execute()) { + connectionDataSet.next(); + Row connectionObject = connectionDataSet.getRow(); + BasicDataSource dataSource = new BasicDataSource(); + dataSource.setDriverClassName(Driver.class.getName()); + dataSource.setUsername((String) connectionObject.getValue(tenantServerConnections.SCHEMA_USERNAME)); + dataSource.setPassword((String) connectionObject.getValue(tenantServerConnections.SCHEMA_PASSWORD)); + dataSource.setMaxIdle(((Number) connectionObject.getValue(tenantServerConnections.POOL_MAX_IDLE)).intValue()); + dataSource.setMinIdle(((Number) connectionObject.getValue(tenantServerConnections.POOL_MIN_IDLE)).intValue()); + dataSource.setInitialSize(((Number) connectionObject.getValue(tenantServerConnections.POOL_INITIAL_SIZE)).intValue()); + dataSource.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); + dataSource.setDefaultAutoCommit(false); + String jdbcUrl = "jdbc:mysql://" + connectionObject.getValue(tenantServerConnections.SCHEMA_SERVER) + ":" + connectionObject.getValue(tenantServerConnections.SCHEMA_SERVER_PORT) + "/" + connectionObject.getValue(tenantServerConnections.SCHEMA_NAME) + "?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=true&serverTimezone=UTC"; + dataSource.setUrl(jdbcUrl); + this.dataSources.put(identifier, dataSource); + } } return this.dataSources.get(identifier); } diff --git a/src/main/java/com/angkorteam/fintech/Page.java b/src/main/java/com/angkorteam/fintech/Page.java index 91184708..e54f44e9 100644 --- a/src/main/java/com/angkorteam/fintech/Page.java +++ b/src/main/java/com/angkorteam/fintech/Page.java @@ -1,277 +1,277 @@ -package com.angkorteam.fintech; - -import java.util.List; -import java.util.MissingResourceException; - -import org.apache.commons.lang3.StringUtils; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.head.CssHeaderItem; -import org.apache.wicket.markup.head.IHeaderResponse; -import org.apache.wicket.markup.html.form.FormComponent; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; -import org.json.JSONArray; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.angkorteam.fintech.pages.AccountingPage; -import com.angkorteam.fintech.pages.LoginPage; -import com.angkorteam.fintech.pages.LogoutPage; -import com.angkorteam.fintech.pages.OrganizationDashboardPage; -import com.angkorteam.fintech.pages.ProductDashboardPage; -import com.angkorteam.fintech.pages.SimulatorPage; -import com.angkorteam.fintech.pages.SystemDashboardPage; -import com.angkorteam.fintech.pages.client.center.CenterBrowsePage; -import com.angkorteam.fintech.pages.client.client.ClientBrowsePage; -import com.angkorteam.fintech.pages.client.group.GroupBrowsePage; -import com.angkorteam.fintech.pages.staff.UserBrowsePage; -import com.angkorteam.framework.Emoji; -import com.angkorteam.framework.models.NavBarMenu; -import com.angkorteam.framework.models.NavBarMenuItem; -import com.angkorteam.framework.models.PageBreadcrumb; -import com.angkorteam.framework.models.PageFooter; -import com.angkorteam.framework.models.PageHeader; -import com.angkorteam.framework.models.PageLogo; -import com.angkorteam.framework.models.SideMenu; -import com.angkorteam.framework.models.UserInfo; -import com.angkorteam.framework.wicket.DashboardPage; -import com.google.common.collect.Lists; -import io.github.openunirest.http.JsonNode; - -/** - * Created by socheatkhauv on 6/17/17. - */ -public abstract class Page extends DashboardPage { - - private static final Logger LOGGER = LoggerFactory.getLogger(Page.class); - - public Page() { - } - - public Page(IModel model) { - super(model); - } - - public Page(PageParameters parameters) { - super(parameters); - } - - @Override - public void renderHead(IHeaderResponse response) { - super.renderHead(response); - response.render(CssHeaderItem.forCSS(".dropdown-menu { z-index: 100060 !important; }", "menu")); - } - - @Override - protected final void onInitialize() { - initData(); - super.onInitialize(); - initComponent(); - configureMetaData(); - } - - protected abstract void initData(); - - protected abstract void initComponent(); - - protected abstract void configureMetaData(); - - public boolean reportError(JsonNode node) { - if (node.getObject().has("errors")) { - JSONArray array = node.getObject().getJSONArray("errors"); - for (Object object : array) { - JSONObject o = (JSONObject) object; - String defaultUserMessage = o.getString("defaultUserMessage"); - String userMessageGlobalisationCode = o.getString("userMessageGlobalisationCode"); - if (userMessageGlobalisationCode != null && !"".equals(userMessageGlobalisationCode)) { - String fieldNames = null; - try { - fieldNames = getString(userMessageGlobalisationCode); - } catch (MissingResourceException e) { - error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); - continue; - } - - if (fieldNames != null && !"".equals(fieldNames)) { - for (String fieldName : StringUtils.split(fieldNames, ',')) { - java.lang.reflect.Field temp = null; - try { - temp = getClass().getDeclaredField(StringUtils.trimToEmpty(fieldName)); - } catch (NoSuchFieldException | SecurityException e) { - error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); - continue; - } - temp.setAccessible(true); - - FormComponent field = null; - try { - field = (FormComponent) temp.get(this); - } catch (IllegalArgumentException | IllegalAccessException e) { - error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); - continue; - } - - if (o.has("parameterName")) { - String parameterName = o.getString("parameterName"); - String parameterNameField = null; - String translated = null; - try { - parameterNameField = getString(parameterName); - } catch (MissingResourceException e) { - } - if (parameterNameField != null && !"".equals(parameterNameField)) { - java.lang.reflect.Field t = null; - try { - t = getClass().getDeclaredField(parameterNameField); - } catch (NoSuchFieldException | SecurityException e) { - } - if (t != null) { - t.setAccessible(true); - FormComponent f = null; - try { - f = (FormComponent) temp.get(this); - } catch (IllegalArgumentException | IllegalAccessException e) { - } - if (f != null && f.getLabel() != null) { - translated = f.getLabel().getObject(); - } - } - if (translated != null && !"".equals(translated)) { - defaultUserMessage = StringUtils.replaceAll(defaultUserMessage, parameterName, "'" + translated + "'"); - } - } - } - - field.info(defaultUserMessage); - LOGGER.info("{} => {} => {}", userMessageGlobalisationCode, fieldName, defaultUserMessage); - } - } else { - error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); - } - } else { - error(defaultUserMessage); - } - } - - return true; - } else { - if (node.getObject().has("exception") || node.getObject().has("error")) { - if (node.getObject().has("exception") && !node.getObject().isNull("exception")) { - error((String) node.getObject().get("exception")); - } - if (node.getObject().has("error") && !node.getObject().isNull("error")) { - error((String) node.getObject().get("error")); - } - if (node.getObject().has("message") && !node.getObject().isNull("message")) { - error((String) node.getObject().get("message").getClass().getName()); - } - return true; - } - } - return false; - } - - protected void reportError(JsonNode node, AjaxRequestTarget target) { - if (node == null) { - return; - } - if (node.getObject().has("errors")) { - JSONArray array = (JSONArray) node.getObject().get("errors"); - for (Object object : array) { - JSONObject o = (JSONObject) object; - error((String) o.get("defaultUserMessage")); - } - } else { - if (node.getObject().has("exception") || node.getObject().has("error")) { - if (node.getObject().has("exception")) { - error((String) node.getObject().get("exception")); - } - if (node.getObject().has("error")) { - error((String) node.getObject().get("error")); - } - if (node.getObject().has("message")) { - error((String) node.getObject().get("message")); - } - } - } - target.add(this.feedbackPanel); - } - - @Override - public IModel> buildSideMenu() { - List sideMenus = Lists.newArrayList(); - sideMenus.add(new SideMenu().buildTypeHeader("MAIN NAVIGATION")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Navigation")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Checker Inbox & Tasks")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Collection Sheet")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Individual Collection Sheet")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Frequent Posting")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Add Journal Entries")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Closing Entries")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Chart of Accounts")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Client")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Group")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Center")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Help")); - return Model.ofList(sideMenus); - } - - @Override - public IModel buildPageHeader() { - return Model.of(new PageHeader().setTitle("FinTech").setDescription("FinTech")); - } - - @Override - public IModel> buildPageBreadcrumb() { - return null; - } - - @Override - public IModel> buildNavBarMenu() { - - NavBarMenu simulatorMenu = new NavBarMenu().buildTypeIcon(SimulatorPage.class, null, Emoji.fa_dashboard, "Simulator", null); - - NavBarMenu clientsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Clients", null, new NavBarMenuItem().buildTypeIcon(ClientBrowsePage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(GroupBrowsePage.class, null, Emoji.fa_dashboard, "Groups"), new NavBarMenuItem().buildTypeIcon(CenterBrowsePage.class, null, Emoji.fa_dashboard, "Centers")); - - NavBarMenu accountingMenu = new NavBarMenu().buildTypeIcon(AccountingPage.class, null, Emoji.fa_dashboard, "Accounting", null); - - NavBarMenu reportsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Reports", null, new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "All"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Loans"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Savings"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Funds"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Accounting"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "XBRL")); - - NavBarMenu adminMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Admin", null, new NavBarMenuItem().buildTypeIcon(UserBrowsePage.class, null, Emoji.fa_dashboard, "Users"), new NavBarMenuItem().buildTypeIcon(OrganizationDashboardPage.class, null, Emoji.fa_dashboard, "Organization"), new NavBarMenuItem().buildTypeIcon(SystemDashboardPage.class, null, Emoji.fa_dashboard, "System"), new NavBarMenuItem().buildTypeIcon(ProductDashboardPage.class, null, Emoji.fa_dashboard, "Products"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Templates")); - - NavBarMenu profileMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Profile", null, new NavBarMenuItem().buildTypeIcon(LogoutPage.class, null, Emoji.fa_sign_out, "Logout")); - - List menus = Lists.newArrayList(simulatorMenu, clientsMenu, accountingMenu, reportsMenu, adminMenu, profileMenu); - return Model.ofList(menus); - } - - @Override - public IModel buildUserInfo() { - return null; - } - - @Override - protected IModel buildPageLogo() { - PageLogo pageLogo = new PageLogo("ANG", "Angkor FinTech"); - return Model.of(pageLogo); - } - - @Override - protected IModel buildPageFooter() { - PageFooter pageFooter = new PageFooter(); - pageFooter.setCompany("AngkorTeam"); - return Model.of(pageFooter); - } - - @Override - public IModel hasSearchForm() { - return Model.of(false); - } - - @Override - public void onSearchClick(String searchValue) { - - } -} +//package com.angkorteam.fintech; +// +//import java.util.List; +//import java.util.MissingResourceException; +// +//import org.apache.commons.lang3.StringUtils; +//import org.apache.wicket.ajax.AjaxRequestTarget; +//import org.apache.wicket.markup.head.CssHeaderItem; +//import org.apache.wicket.markup.head.IHeaderResponse; +//import org.apache.wicket.markup.html.form.FormComponent; +//import org.apache.wicket.model.IModel; +//import org.apache.wicket.model.Model; +//import org.apache.wicket.request.mapper.parameter.PageParameters; +//import org.json.JSONArray; +//import org.json.JSONObject; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import com.angkorteam.fintech.pages.AccountingPage; +//import com.angkorteam.fintech.pages.LoginPage; +//import com.angkorteam.fintech.pages.LogoutPage; +//import com.angkorteam.fintech.pages.OrganizationDashboardPage; +//import com.angkorteam.fintech.pages.ProductDashboardPage; +//import com.angkorteam.fintech.pages.SimulatorPage; +//import com.angkorteam.fintech.pages.SystemDashboardPage; +//import com.angkorteam.fintech.pages.client.center.CenterBrowsePage; +//import com.angkorteam.fintech.pages.client.client.ClientBrowsePage; +//import com.angkorteam.fintech.pages.client.group.GroupBrowsePage; +//import com.angkorteam.fintech.pages.staff.UserBrowsePage; +//import com.angkorteam.framework.Emoji; +//import com.angkorteam.framework.models.NavBarMenu; +//import com.angkorteam.framework.models.NavBarMenuItem; +//import com.angkorteam.framework.models.PageBreadcrumb; +//import com.angkorteam.framework.models.PageFooter; +//import com.angkorteam.framework.models.PageHeader; +//import com.angkorteam.framework.models.PageLogo; +//import com.angkorteam.framework.models.SideMenu; +//import com.angkorteam.framework.models.UserInfo; +//import com.angkorteam.framework.wicket.DashboardPage; +//import com.google.common.collect.Lists; +//import io.github.openunirest.http.JsonNode; +// +///** +// * Created by socheatkhauv on 6/17/17. +// */ +//public abstract class Page extends DashboardPage { +// +// private static final Logger LOGGER = LoggerFactory.getLogger(Page.class); +// +// public Page() { +// } +// +// public Page(IModel model) { +// super(model); +// } +// +// public Page(PageParameters parameters) { +// super(parameters); +// } +// +// @Override +// public void renderHead(IHeaderResponse response) { +// super.renderHead(response); +// response.render(CssHeaderItem.forCSS(".dropdown-menu { z-index: 100060 !important; }", "menu")); +// } +// +// @Override +// protected final void onInitialize() { +// initData(); +// super.onInitialize(); +// initComponent(); +// configureMetaData(); +// } +// +// protected abstract void initData(); +// +// protected abstract void initComponent(); +// +// protected abstract void configureMetaData(); +// +// public boolean reportError(JsonNode node) { +// if (node.getObject().has("errors")) { +// JSONArray array = node.getObject().getJSONArray("errors"); +// for (Object object : array) { +// JSONObject o = (JSONObject) object; +// String defaultUserMessage = o.getString("defaultUserMessage"); +// String userMessageGlobalisationCode = o.getString("userMessageGlobalisationCode"); +// if (userMessageGlobalisationCode != null && !"".equals(userMessageGlobalisationCode)) { +// String fieldNames = null; +// try { +// fieldNames = getString(userMessageGlobalisationCode); +// } catch (MissingResourceException e) { +// error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); +// continue; +// } +// +// if (fieldNames != null && !"".equals(fieldNames)) { +// for (String fieldName : StringUtils.split(fieldNames, ',')) { +// java.lang.reflect.Field temp = null; +// try { +// temp = getClass().getDeclaredField(StringUtils.trimToEmpty(fieldName)); +// } catch (NoSuchFieldException | SecurityException e) { +// error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); +// continue; +// } +// temp.setAccessible(true); +// +// FormComponent field = null; +// try { +// field = (FormComponent) temp.get(this); +// } catch (IllegalArgumentException | IllegalAccessException e) { +// error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); +// continue; +// } +// +// if (o.has("parameterName")) { +// String parameterName = o.getString("parameterName"); +// String parameterNameField = null; +// String translated = null; +// try { +// parameterNameField = getString(parameterName); +// } catch (MissingResourceException e) { +// } +// if (parameterNameField != null && !"".equals(parameterNameField)) { +// java.lang.reflect.Field t = null; +// try { +// t = getClass().getDeclaredField(parameterNameField); +// } catch (NoSuchFieldException | SecurityException e) { +// } +// if (t != null) { +// t.setAccessible(true); +// FormComponent f = null; +// try { +// f = (FormComponent) temp.get(this); +// } catch (IllegalArgumentException | IllegalAccessException e) { +// } +// if (f != null && f.getLabel() != null) { +// translated = f.getLabel().getObject(); +// } +// } +// if (translated != null && !"".equals(translated)) { +// defaultUserMessage = StringUtils.replaceAll(defaultUserMessage, parameterName, "'" + translated + "'"); +// } +// } +// } +// +// field.info(defaultUserMessage); +// LOGGER.info("{} => {} => {}", userMessageGlobalisationCode, fieldName, defaultUserMessage); +// } +// } else { +// error(userMessageGlobalisationCode + " due to this reason " + defaultUserMessage); +// } +// } else { +// error(defaultUserMessage); +// } +// } +// +// return true; +// } else { +// if (node.getObject().has("exception") || node.getObject().has("error")) { +// if (node.getObject().has("exception") && !node.getObject().isNull("exception")) { +// error((String) node.getObject().get("exception")); +// } +// if (node.getObject().has("error") && !node.getObject().isNull("error")) { +// error((String) node.getObject().get("error")); +// } +// if (node.getObject().has("message") && !node.getObject().isNull("message")) { +// error((String) node.getObject().get("message").getClass().getName()); +// } +// return true; +// } +// } +// return false; +// } +// +// protected void reportError(JsonNode node, AjaxRequestTarget target) { +// if (node == null) { +// return; +// } +// if (node.getObject().has("errors")) { +// JSONArray array = (JSONArray) node.getObject().get("errors"); +// for (Object object : array) { +// JSONObject o = (JSONObject) object; +// error((String) o.get("defaultUserMessage")); +// } +// } else { +// if (node.getObject().has("exception") || node.getObject().has("error")) { +// if (node.getObject().has("exception")) { +// error((String) node.getObject().get("exception")); +// } +// if (node.getObject().has("error")) { +// error((String) node.getObject().get("error")); +// } +// if (node.getObject().has("message")) { +// error((String) node.getObject().get("message")); +// } +// } +// } +// target.add(this.feedbackPanel); +// } +// +// @Override +// public IModel> buildSideMenu() { +// List sideMenus = Lists.newArrayList(); +// sideMenus.add(new SideMenu().buildTypeHeader("MAIN NAVIGATION")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Navigation")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Checker Inbox & Tasks")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Collection Sheet")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Individual Collection Sheet")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Frequent Posting")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Add Journal Entries")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Closing Entries")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Chart of Accounts")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Client")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Group")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Center")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Help")); +// return Model.ofList(sideMenus); +// } +// +// @Override +// public IModel buildPageHeader() { +// return Model.of(new PageHeader().setTitle("FinTech").setDescription("FinTech")); +// } +// +// @Override +// public IModel> buildPageBreadcrumb() { +// return null; +// } +// +// @Override +// public IModel> buildNavBarMenu() { +// +// NavBarMenu simulatorMenu = new NavBarMenu().buildTypeIcon(SimulatorPage.class, null, Emoji.fa_dashboard, "Simulator", null); +// +// NavBarMenu clientsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Clients", null, new NavBarMenuItem().buildTypeIcon(ClientBrowsePage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(GroupBrowsePage.class, null, Emoji.fa_dashboard, "Groups"), new NavBarMenuItem().buildTypeIcon(CenterBrowsePage.class, null, Emoji.fa_dashboard, "Centers")); +// +// NavBarMenu accountingMenu = new NavBarMenu().buildTypeIcon(AccountingPage.class, null, Emoji.fa_dashboard, "Accounting", null); +// +// NavBarMenu reportsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Reports", null, new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "All"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Loans"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Savings"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Funds"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Accounting"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "XBRL")); +// +// NavBarMenu adminMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Admin", null, new NavBarMenuItem().buildTypeIcon(UserBrowsePage.class, null, Emoji.fa_dashboard, "Users"), new NavBarMenuItem().buildTypeIcon(OrganizationDashboardPage.class, null, Emoji.fa_dashboard, "Organization"), new NavBarMenuItem().buildTypeIcon(SystemDashboardPage.class, null, Emoji.fa_dashboard, "System"), new NavBarMenuItem().buildTypeIcon(ProductDashboardPage.class, null, Emoji.fa_dashboard, "Products"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Templates")); +// +// NavBarMenu profileMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Profile", null, new NavBarMenuItem().buildTypeIcon(LogoutPage.class, null, Emoji.fa_sign_out, "Logout")); +// +// List menus = Lists.newArrayList(simulatorMenu, clientsMenu, accountingMenu, reportsMenu, adminMenu, profileMenu); +// return Model.ofList(menus); +// } +// +// @Override +// public IModel buildUserInfo() { +// return null; +// } +// +// @Override +// protected IModel buildPageLogo() { +// PageLogo pageLogo = new PageLogo("ANG", "Angkor FinTech"); +// return Model.of(pageLogo); +// } +// +// @Override +// protected IModel buildPageFooter() { +// PageFooter pageFooter = new PageFooter(); +// pageFooter.setCompany("AngkorTeam"); +// return Model.of(pageFooter); +// } +// +// @Override +// public IModel hasSearchForm() { +// return Model.of(false); +// } +// +// @Override +// public void onSearchClick(String searchValue) { +// +// } +//} diff --git a/src/main/java/com/angkorteam/fintech/ProxyAPI.java b/src/main/java/com/angkorteam/fintech/ProxyAPI.java index a54fc28c..ddb6b01c 100644 --- a/src/main/java/com/angkorteam/fintech/ProxyAPI.java +++ b/src/main/java/com/angkorteam/fintech/ProxyAPI.java @@ -1,395 +1,395 @@ -package com.angkorteam.fintech; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Date; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.DateFormatUtils; -import org.apache.wicket.WicketRuntimeException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationContext; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.context.support.WebApplicationContextUtils; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -import com.angkorteam.framework.jdbc.InsertQuery; -import com.angkorteam.framework.spring.JdbcNamed; -import com.google.gson.Gson; - -import io.github.openunirest.http.HttpResponse; -import io.github.openunirest.http.Unirest; -import io.github.openunirest.http.exceptions.UnirestException; - -@Controller -public class ProxyAPI implements Filter { - - private static final Logger LOGGER = LoggerFactory.getLogger(ProxyAPI.class); - - @RequestMapping(path = "/**") - public void doProxy(HttpServletRequest request, HttpServletResponse response) throws IOException, UnirestException { - HttpSession session = request.getSession(true); - ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); - String infoPath = request.getPathInfo(); - if ("/v1/authentication".equals(infoPath)) { - String username = request.getParameter("username"); - String password = request.getParameter("password"); - String identifier = request.getHeader("Fineract-Platform-TenantId"); - if (identifier == null || "".equals(identifier)) { - identifier = request.getParameter("tenantIdentifier"); - } - if (username == null || "".equals(username) || password == null || "".equals(password) || identifier == null || "".equals(identifier)) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST); - } else { - MifosDataSourceManager mifos = applicationContext.getBean(MifosDataSourceManager.class); - String mifosUrl = mifos.getMifosUrl() + "/api/v1/authentication?username=" + username + "&password=" + password; - HttpResponse resp = Unirest.post(mifosUrl).header("Fineract-Platform-TenantId", identifier).header("Content-Type", "application/json").asBinary(); - IOUtils.copy(resp.getBody(), response.getOutputStream()); - response.setContentType(resp.getHeaders().getFirst("Content-Type")); - response.setStatus(resp.getStatus()); - } - return; - } else { - ServletContext servletContext = request.getServletContext(); - String identifier = request.getHeader("Fineract-Platform-TenantId"); - String authorization = request.getHeader("Authorization"); - if (identifier == null || "".equals(identifier) || authorization == null || "".equals(authorization)) { - response.sendError(HttpServletResponse.SC_FORBIDDEN); - return; - } - session.setAttribute(Session.IDENTIFIER, identifier); - MifosDataSourceManager mifos = applicationContext.getBean(MifosDataSourceManager.class); - Gson gson = applicationContext.getBean(Gson.class); - if (infoPath == null || "".equals(infoPath) || "/".equals(infoPath)) { - response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); - Map json = new HashMap<>(); - json.put("server-time", DateFormatUtils.ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.format(new Date())); - String manifest = "/META-INF/MANIFEST.MF"; - String absoluteDiskPath = servletContext.getRealPath(manifest); - File file = new File(absoluteDiskPath); - if (file.exists()) { - try { - List lines = FileUtils.readLines(file, "UTF-8"); - for (String line : lines) { - if (line != null && !"".equals(line)) { - if (line.startsWith("Version")) { - json.put("version", StringUtils.trimToEmpty(StringUtils.substring(line, "Version:".length()))); - } else if (line.startsWith("Build-Time")) { - json.put("build-time", StringUtils.trimToEmpty(StringUtils.substring(line, "Build-Time:".length()))); - } - } - } - } catch (IOException e) { - throw new WicketRuntimeException(e); - } - } else { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = null; - try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new WicketRuntimeException(e); - } - File popFile = new File("pom.xml"); - Document document = null; - try { - document = builder.parse(popFile); - } catch (SAXException | IOException e) { - throw new WicketRuntimeException(e); - } - json.put("version", document.getDocumentElement().getElementsByTagName("version").item(0).getTextContent()); - json.put("build-time", DateFormatUtils.ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.format(new Date())); - } - gson.toJson(json, response.getWriter()); - return; - } - String mifosUrl = null; - if (request.getQueryString() != null && !"".equals(request.getQueryString())) { - mifosUrl = mifos.getMifosUrl() + "/api" + infoPath + "?" + request.getQueryString(); - } else { - mifosUrl = mifos.getMifosUrl() + "/api" + infoPath; - } - String requestContentType = StringUtils.lowerCase(request.getContentType()); - String method = StringUtils.upperCase(request.getMethod()); - String accept = StringUtils.lowerCase(request.getHeader("Accept")); - - LOGGER.info("{} => {}", String.format("%0$-6s", method), mifosUrl); - HttpResponse resp = null; - String responseContentType = null; - String requestBody = null; - - boolean handled = true; - - UnirestException unirestException = null; - - if (method.equals("POST")) { - if (requestContentType != null && !"".equals(requestContentType)) { - if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { - requestBody = IOUtils.toString(request.getInputStream(), "UTF-8"); - try { - resp = Unirest.post(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(requestBody).asString(); - responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); - response.getWriter().write(resp.getBody()); - response.setContentType(responseContentType); - response.setStatus(resp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } else { - byte[] bytes = IOUtils.toByteArray(request.getInputStream()); - try { - HttpResponse temp = Unirest.post(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(bytes).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } else { - byte[] bytes = IOUtils.toByteArray(request.getInputStream()); - try { - HttpResponse temp = Unirest.post(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).body(bytes).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } else if (method.equals("PUT")) { - if (requestContentType != null && !"".equals(requestContentType)) { - if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { - requestBody = IOUtils.toString(request.getInputStream(), "UTF-8"); - try { - resp = Unirest.put(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(requestBody).asString(); - responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); - response.getWriter().write(resp.getBody()); - response.setContentType(responseContentType); - response.setStatus(resp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } else { - byte[] bytes = IOUtils.toByteArray(request.getInputStream()); - try { - HttpResponse temp = Unirest.put(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(bytes).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } else { - byte[] bytes = IOUtils.toByteArray(request.getInputStream()); - try { - HttpResponse temp = Unirest.put(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).body(bytes).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } else if (method.equals("DELETE")) { - if (requestContentType != null && !"".equals(requestContentType)) { - if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { - try { - resp = Unirest.delete(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asString(); - responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); - response.getWriter().write(resp.getBody()); - response.setContentType(responseContentType); - response.setStatus(resp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } else { - try { - HttpResponse temp = Unirest.delete(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } else { - try { - HttpResponse temp = Unirest.delete(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } else if (method.equals("GET")) { - if (requestContentType != null && !"".equals(requestContentType)) { - if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { - try { - resp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asString(); - responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); - response.getWriter().write(resp.getBody()); - response.setContentType(responseContentType); - response.setStatus(resp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } else { - try { - HttpResponse temp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } else { - if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { - try { - resp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).asString(); - responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); - response.getWriter().write(resp.getBody()); - response.setContentType(responseContentType); - response.setStatus(resp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } else { - try { - HttpResponse temp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).asBinary(); - IOUtils.copy(temp.getBody(), response.getOutputStream()); - response.setContentType(temp.getHeaders().getFirst("Content-Type")); - response.setStatus(temp.getStatus()); - } catch (UnirestException e) { - unirestException = e; - } - } - } - } else { - handled = false; - } - - if (!handled) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST); - } else { - - JdbcNamed named = applicationContext.getBean(JdbcNamed.class); - String uuid = named.queryForObject("select uuid() from dual", new HashMap<>(), String.class); - InsertQuery insertQuery = null; - insertQuery = new InsertQuery("tbl_proxy"); - insertQuery.addValue("id = :id", uuid); - insertQuery.addValue("path = :path", mifosUrl); - insertQuery.addValue("method = :method", method); - insertQuery.addValue("accept = :accept", accept); - insertQuery.addValue("request_content_type = :request_content_type", requestContentType); - if (requestBody != null) { - insertQuery.addValue("request_body = :request_body", requestBody); - } - insertQuery.addValue("created_datetime = :created_datetime", new Date()); - if (unirestException != null) { - insertQuery.addValue("response_status = :response_status", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - insertQuery.addValue("response_status_text = :response_status_text", unirestException.getMessage()); - } else { - if (resp != null) { - insertQuery.addValue("response_body = :response_body", resp.getBody()); - insertQuery.addValue("response_status = :response_status", resp.getStatus()); - insertQuery.addValue("response_status_text = :response_status_text", resp.getStatusText()); - insertQuery.addValue("response_content_type = :response_content_type", responseContentType); - } - } - named.update(insertQuery.toSQL(), insertQuery.getParam()); - - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - insertQuery = new InsertQuery("tbl_proxy_request_header"); - String header = headers.nextElement(); - insertQuery.addValue("id = uuid()"); - insertQuery.addValue("proxy_id = :proxy_id", uuid); - insertQuery.addValue("h_name = :h_name", header); - insertQuery.addValue("h_value = :h_value", request.getHeader(header)); - named.update(insertQuery.toSQL(), insertQuery.getParam()); - } - if (resp != null) { - for (Map.Entry> header : resp.getHeaders().entrySet()) { - if (header.getValue() != null && !header.getValue().isEmpty()) { - insertQuery = new InsertQuery("tbl_proxy_response_header"); - insertQuery.addValue("id = uuid()"); - insertQuery.addValue("proxy_id = :proxy_id", uuid); - insertQuery.addValue("h_name = :h_name", header.getKey()); - insertQuery.addValue("h_value = :h_value", StringUtils.join(header.getValue(), ", ")); - named.update(insertQuery.toSQL(), insertQuery.getParam()); - } - } - } - } - } - } - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - - } - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - HttpServletRequest req = (HttpServletRequest) request; - HttpServletResponse resp = (HttpServletResponse) response; - if ("OPTIONS".equalsIgnoreCase(req.getMethod())) { - String header = req.getHeader("Access-Control-Request-Headers"); - resp.addHeader("Allow", "OPTIONS"); - resp.addHeader("Allow", "GET"); - resp.addHeader("Allow", "POST"); - resp.addHeader("Allow", "PUT"); - resp.addHeader("Allow", "DELETE"); - resp.addHeader("Access-Control-Allow-Origin", "*"); - resp.addHeader("Access-Control-Allow-Methods", "GET"); - resp.addHeader("Access-Control-Allow-Methods", "POST"); - resp.addHeader("Access-Control-Allow-Methods", "PUT"); - resp.addHeader("Access-Control-Allow-Methods", "DELETE"); - resp.addHeader("Access-Control-Allow-Methods", "OPTIONS"); - resp.addHeader("Access-Control-Allow-Headers", header); - return; - } else { - resp.addHeader("Access-Control-Allow-Origin", "*"); - resp.addHeader("Access-Control-Allow-Methods", "GET"); - resp.addHeader("Access-Control-Allow-Methods", "POST"); - resp.addHeader("Access-Control-Allow-Methods", "PUT"); - resp.addHeader("Access-Control-Allow-Methods", "DELETE"); - resp.addHeader("Access-Control-Allow-Methods", "OPTIONS"); - chain.doFilter(request, response); - } - } - - @Override - public void destroy() { - - } -} +//package com.angkorteam.fintech; +// +//import java.io.File; +//import java.io.IOException; +//import java.io.InputStream; +//import java.util.Date; +//import java.util.Enumeration; +//import java.util.HashMap; +//import java.util.List; +//import java.util.Map; +// +//import javax.servlet.Filter; +//import javax.servlet.FilterChain; +//import javax.servlet.FilterConfig; +//import javax.servlet.ServletContext; +//import javax.servlet.ServletException; +//import javax.servlet.ServletRequest; +//import javax.servlet.ServletResponse; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import javax.xml.parsers.DocumentBuilder; +//import javax.xml.parsers.DocumentBuilderFactory; +//import javax.xml.parsers.ParserConfigurationException; +// +//import org.apache.commons.io.FileUtils; +//import org.apache.commons.io.IOUtils; +//import org.apache.commons.lang3.StringUtils; +//import org.apache.commons.lang3.time.DateFormatUtils; +//import org.apache.wicket.WicketRuntimeException; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.context.ApplicationContext; +//import org.springframework.http.MediaType; +//import org.springframework.stereotype.Controller; +//import org.springframework.web.bind.annotation.RequestMapping; +//import org.springframework.web.context.support.WebApplicationContextUtils; +//import org.w3c.dom.Document; +//import org.xml.sax.SAXException; +// +//import com.angkorteam.framework.jdbc.InsertQuery; +//import com.angkorteam.framework.spring.JdbcNamed; +//import com.google.gson.Gson; +// +//import io.github.openunirest.http.HttpResponse; +//import io.github.openunirest.http.Unirest; +//import io.github.openunirest.http.exceptions.UnirestException; +// +//@Controller +//public class ProxyAPI implements Filter { +// +// private static final Logger LOGGER = LoggerFactory.getLogger(ProxyAPI.class); +// +// @RequestMapping(path = "/**") +// public void doProxy(HttpServletRequest request, HttpServletResponse response) throws IOException, UnirestException { +// HttpSession session = request.getSession(true); +// ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); +// String infoPath = request.getPathInfo(); +// if ("/v1/authentication".equals(infoPath)) { +// String username = request.getParameter("username"); +// String password = request.getParameter("password"); +// String identifier = request.getHeader("Fineract-Platform-TenantId"); +// if (identifier == null || "".equals(identifier)) { +// identifier = request.getParameter("tenantIdentifier"); +// } +// if (username == null || "".equals(username) || password == null || "".equals(password) || identifier == null || "".equals(identifier)) { +// response.sendError(HttpServletResponse.SC_BAD_REQUEST); +// } else { +// MifosDataSourceManager mifos = applicationContext.getBean(MifosDataSourceManager.class); +// String mifosUrl = mifos.getMifosUrl() + "/api/v1/authentication?username=" + username + "&password=" + password; +// HttpResponse resp = Unirest.post(mifosUrl).header("Fineract-Platform-TenantId", identifier).header("Content-Type", "application/json").asBinary(); +// IOUtils.copy(resp.getBody(), response.getOutputStream()); +// response.setContentType(resp.getHeaders().getFirst("Content-Type")); +// response.setStatus(resp.getStatus()); +// } +// return; +// } else { +// ServletContext servletContext = request.getServletContext(); +// String identifier = request.getHeader("Fineract-Platform-TenantId"); +// String authorization = request.getHeader("Authorization"); +// if (identifier == null || "".equals(identifier) || authorization == null || "".equals(authorization)) { +// response.sendError(HttpServletResponse.SC_FORBIDDEN); +// return; +// } +// session.setAttribute(Session.IDENTIFIER, identifier); +// MifosDataSourceManager mifos = applicationContext.getBean(MifosDataSourceManager.class); +// Gson gson = applicationContext.getBean(Gson.class); +// if (infoPath == null || "".equals(infoPath) || "/".equals(infoPath)) { +// response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); +// Map json = new HashMap<>(); +// json.put("server-time", DateFormatUtils.ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.format(new Date())); +// String manifest = "/META-INF/MANIFEST.MF"; +// String absoluteDiskPath = servletContext.getRealPath(manifest); +// File file = new File(absoluteDiskPath); +// if (file.exists()) { +// try { +// List lines = FileUtils.readLines(file, "UTF-8"); +// for (String line : lines) { +// if (line != null && !"".equals(line)) { +// if (line.startsWith("Version")) { +// json.put("version", StringUtils.trimToEmpty(StringUtils.substring(line, "Version:".length()))); +// } else if (line.startsWith("Build-Time")) { +// json.put("build-time", StringUtils.trimToEmpty(StringUtils.substring(line, "Build-Time:".length()))); +// } +// } +// } +// } catch (IOException e) { +// throw new WicketRuntimeException(e); +// } +// } else { +// DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); +// DocumentBuilder builder = null; +// try { +// builder = factory.newDocumentBuilder(); +// } catch (ParserConfigurationException e) { +// throw new WicketRuntimeException(e); +// } +// File popFile = new File("pom.xml"); +// Document document = null; +// try { +// document = builder.parse(popFile); +// } catch (SAXException | IOException e) { +// throw new WicketRuntimeException(e); +// } +// json.put("version", document.getDocumentElement().getElementsByTagName("version").item(0).getTextContent()); +// json.put("build-time", DateFormatUtils.ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.format(new Date())); +// } +// gson.toJson(json, response.getWriter()); +// return; +// } +// String mifosUrl = null; +// if (request.getQueryString() != null && !"".equals(request.getQueryString())) { +// mifosUrl = mifos.getMifosUrl() + "/api" + infoPath + "?" + request.getQueryString(); +// } else { +// mifosUrl = mifos.getMifosUrl() + "/api" + infoPath; +// } +// String requestContentType = StringUtils.lowerCase(request.getContentType()); +// String method = StringUtils.upperCase(request.getMethod()); +// String accept = StringUtils.lowerCase(request.getHeader("Accept")); +// +// LOGGER.info("{} => {}", String.format("%0$-6s", method), mifosUrl); +// HttpResponse resp = null; +// String responseContentType = null; +// String requestBody = null; +// +// boolean handled = true; +// +// UnirestException unirestException = null; +// +// if (method.equals("POST")) { +// if (requestContentType != null && !"".equals(requestContentType)) { +// if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { +// requestBody = IOUtils.toString(request.getInputStream(), "UTF-8"); +// try { +// resp = Unirest.post(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(requestBody).asString(); +// responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); +// response.getWriter().write(resp.getBody()); +// response.setContentType(responseContentType); +// response.setStatus(resp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } else { +// byte[] bytes = IOUtils.toByteArray(request.getInputStream()); +// try { +// HttpResponse temp = Unirest.post(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(bytes).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } else { +// byte[] bytes = IOUtils.toByteArray(request.getInputStream()); +// try { +// HttpResponse temp = Unirest.post(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).body(bytes).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } else if (method.equals("PUT")) { +// if (requestContentType != null && !"".equals(requestContentType)) { +// if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { +// requestBody = IOUtils.toString(request.getInputStream(), "UTF-8"); +// try { +// resp = Unirest.put(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(requestBody).asString(); +// responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); +// response.getWriter().write(resp.getBody()); +// response.setContentType(responseContentType); +// response.setStatus(resp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } else { +// byte[] bytes = IOUtils.toByteArray(request.getInputStream()); +// try { +// HttpResponse temp = Unirest.put(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).body(bytes).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } else { +// byte[] bytes = IOUtils.toByteArray(request.getInputStream()); +// try { +// HttpResponse temp = Unirest.put(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).body(bytes).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } else if (method.equals("DELETE")) { +// if (requestContentType != null && !"".equals(requestContentType)) { +// if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { +// try { +// resp = Unirest.delete(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asString(); +// responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); +// response.getWriter().write(resp.getBody()); +// response.setContentType(responseContentType); +// response.setStatus(resp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } else { +// try { +// HttpResponse temp = Unirest.delete(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } else { +// try { +// HttpResponse temp = Unirest.delete(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } else if (method.equals("GET")) { +// if (requestContentType != null && !"".equals(requestContentType)) { +// if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { +// try { +// resp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asString(); +// responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); +// response.getWriter().write(resp.getBody()); +// response.setContentType(responseContentType); +// response.setStatus(resp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } else { +// try { +// HttpResponse temp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).header("Content-Type", requestContentType).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } else { +// if ("application/json".equals(requestContentType) || "application/json;charset=utf-8".equals(requestContentType)) { +// try { +// resp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).asString(); +// responseContentType = StringUtils.lowerCase(resp.getHeaders().getFirst("Content-Type")); +// response.getWriter().write(resp.getBody()); +// response.setContentType(responseContentType); +// response.setStatus(resp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } else { +// try { +// HttpResponse temp = Unirest.get(mifosUrl).header("Accept", accept).header("Authorization", authorization).header("Fineract-Platform-TenantId", identifier).asBinary(); +// IOUtils.copy(temp.getBody(), response.getOutputStream()); +// response.setContentType(temp.getHeaders().getFirst("Content-Type")); +// response.setStatus(temp.getStatus()); +// } catch (UnirestException e) { +// unirestException = e; +// } +// } +// } +// } else { +// handled = false; +// } +// +// if (!handled) { +// response.sendError(HttpServletResponse.SC_BAD_REQUEST); +// } else { +// +// JdbcNamed named = applicationContext.getBean(JdbcNamed.class); +// String uuid = named.queryForObject("select uuid() from dual", new HashMap<>(), String.class); +// InsertQuery insertQuery = null; +// insertQuery = new InsertQuery("tbl_proxy"); +// insertQuery.addValue("id = :id", uuid); +// insertQuery.addValue("path = :path", mifosUrl); +// insertQuery.addValue("method = :method", method); +// insertQuery.addValue("accept = :accept", accept); +// insertQuery.addValue("request_content_type = :request_content_type", requestContentType); +// if (requestBody != null) { +// insertQuery.addValue("request_body = :request_body", requestBody); +// } +// insertQuery.addValue("created_datetime = :created_datetime", new Date()); +// if (unirestException != null) { +// insertQuery.addValue("response_status = :response_status", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); +// insertQuery.addValue("response_status_text = :response_status_text", unirestException.getMessage()); +// } else { +// if (resp != null) { +// insertQuery.addValue("response_body = :response_body", resp.getBody()); +// insertQuery.addValue("response_status = :response_status", resp.getStatus()); +// insertQuery.addValue("response_status_text = :response_status_text", resp.getStatusText()); +// insertQuery.addValue("response_content_type = :response_content_type", responseContentType); +// } +// } +// named.update(insertQuery.toSQL(), insertQuery.getParam()); +// +// Enumeration headers = request.getHeaderNames(); +// while (headers.hasMoreElements()) { +// insertQuery = new InsertQuery("tbl_proxy_request_header"); +// String header = headers.nextElement(); +// insertQuery.addValue("id = uuid()"); +// insertQuery.addValue("proxy_id = :proxy_id", uuid); +// insertQuery.addValue("h_name = :h_name", header); +// insertQuery.addValue("h_value = :h_value", request.getHeader(header)); +// named.update(insertQuery.toSQL(), insertQuery.getParam()); +// } +// if (resp != null) { +// for (Map.Entry> header : resp.getHeaders().entrySet()) { +// if (header.getValue() != null && !header.getValue().isEmpty()) { +// insertQuery = new InsertQuery("tbl_proxy_response_header"); +// insertQuery.addValue("id = uuid()"); +// insertQuery.addValue("proxy_id = :proxy_id", uuid); +// insertQuery.addValue("h_name = :h_name", header.getKey()); +// insertQuery.addValue("h_value = :h_value", StringUtils.join(header.getValue(), ", ")); +// named.update(insertQuery.toSQL(), insertQuery.getParam()); +// } +// } +// } +// } +// } +// } +// +// @Override +// public void init(FilterConfig filterConfig) throws ServletException { +// +// } +// +// @Override +// public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { +// HttpServletRequest req = (HttpServletRequest) request; +// HttpServletResponse resp = (HttpServletResponse) response; +// if ("OPTIONS".equalsIgnoreCase(req.getMethod())) { +// String header = req.getHeader("Access-Control-Request-Headers"); +// resp.addHeader("Allow", "OPTIONS"); +// resp.addHeader("Allow", "GET"); +// resp.addHeader("Allow", "POST"); +// resp.addHeader("Allow", "PUT"); +// resp.addHeader("Allow", "DELETE"); +// resp.addHeader("Access-Control-Allow-Origin", "*"); +// resp.addHeader("Access-Control-Allow-Methods", "GET"); +// resp.addHeader("Access-Control-Allow-Methods", "POST"); +// resp.addHeader("Access-Control-Allow-Methods", "PUT"); +// resp.addHeader("Access-Control-Allow-Methods", "DELETE"); +// resp.addHeader("Access-Control-Allow-Methods", "OPTIONS"); +// resp.addHeader("Access-Control-Allow-Headers", header); +// return; +// } else { +// resp.addHeader("Access-Control-Allow-Origin", "*"); +// resp.addHeader("Access-Control-Allow-Methods", "GET"); +// resp.addHeader("Access-Control-Allow-Methods", "POST"); +// resp.addHeader("Access-Control-Allow-Methods", "PUT"); +// resp.addHeader("Access-Control-Allow-Methods", "DELETE"); +// resp.addHeader("Access-Control-Allow-Methods", "OPTIONS"); +// chain.doFilter(request, response); +// } +// } +// +// @Override +// public void destroy() { +// +// } +//} diff --git a/src/main/java/com/angkorteam/fintech/SSLContextUtils.java b/src/main/java/com/angkorteam/fintech/SSLContextUtils.java new file mode 100644 index 00000000..a99aa85d --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/SSLContextUtils.java @@ -0,0 +1,117 @@ +package com.angkorteam.fintech; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; + +import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLServerSocketFactory; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509KeyManager; +import javax.net.ssl.X509TrustManager; + +public class SSLContextUtils { + + public static SSLServerSocketFactory createSSLServerSocketFactory(X509TrustManager trustManager, X509KeyManager keyManager) { + try { + SSLContext context = SSLContext.getInstance("TLS"); + context.init(new KeyManager[] { keyManager }, new TrustManager[] { trustManager }, new SecureRandom()); + return context.getServerSocketFactory(); + } catch (NoSuchAlgorithmException | KeyManagementException ex) { + return null; + } + } + + public static SSLServerSocketFactory createSSLServerSocketFactory(X509KeyManager keyManager) { + try { + SSLContext context = SSLContext.getInstance("TLS"); + context.init(new KeyManager[] { keyManager }, null, new SecureRandom()); + return context.getServerSocketFactory(); + } catch (NoSuchAlgorithmException | KeyManagementException ex) { + return null; + } + } + + public static SSLSocketFactory createSSLSocketFactory(X509TrustManager trustManager, X509KeyManager keyManager) { + try { + SSLContext context = SSLContext.getInstance("TLS"); + context.init(new KeyManager[] { keyManager }, new TrustManager[] { trustManager }, new SecureRandom()); + return context.getSocketFactory(); + } catch (NoSuchAlgorithmException | KeyManagementException ex) { + return null; + } + } + + public static SSLSocketFactory createSSLSocketFactory(X509TrustManager trustManager) { + try { + SSLContext context = SSLContext.getInstance("TLS"); + context.init(null, new TrustManager[] { trustManager }, new SecureRandom()); + return context.getSocketFactory(); + } catch (NoSuchAlgorithmException | KeyManagementException ex) { + return null; + } + } + + public static X509KeyManager createKeyManager(KeyStore keyStore, String keyPassword) { + try { + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + KeyManager[] keystoreManagers = null; + kmf.init(keyStore, keyPassword == null ? new char[] {} : keyPassword.toCharArray()); + keystoreManagers = kmf.getKeyManagers(); + return (X509KeyManager) keystoreManagers[0]; + } catch (NoSuchAlgorithmException | KeyStoreException | UnrecoverableKeyException e) { + return null; + } + } + + public static X509TrustManager createTrustManager(KeyStore keyStore) { + try { + TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); + tmf.init(keyStore); + TrustManager[] trustManagers = tmf.getTrustManagers(); + if (trustManagers.length != 1) { + throw new IllegalArgumentException("More than 1 TrustManager created."); + } + if (!(trustManagers[0] instanceof X509TrustManager)) { + throw new IllegalArgumentException("TrustManager not of type X509: " + trustManagers[0].getClass()); + } + return (X509TrustManager) trustManagers[0]; + } catch (NoSuchAlgorithmException | KeyStoreException ex) { + return null; + } + } + + public static KeyStore loadKeyStore(String p12, String password) { + try (InputStream stream = new FileInputStream(new File(p12))) { + KeyStore keyStore = KeyStore.getInstance("PKCS12"); + keyStore.load(stream, password == null ? new char[] {} : password.toCharArray()); + return keyStore; + } catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e) { + return null; + } + } + + public static KeyStore loadKeyStore(byte[] p12, String password) { + try (InputStream stream = new ByteArrayInputStream(p12)) { + KeyStore keyStore = KeyStore.getInstance("PKCS12"); + keyStore.load(stream, password == null ? new char[] {} : password.toCharArray()); + return keyStore; + } catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e) { + return null; + } + } + +} diff --git a/src/main/java/com/angkorteam/fintech/ServletInitializer.java b/src/main/java/com/angkorteam/fintech/ServletInitializer.java new file mode 100644 index 00000000..6499282e --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/ServletInitializer.java @@ -0,0 +1,20 @@ +package com.angkorteam.fintech; + +import org.springframework.boot.builder.SpringApplicationBuilder; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +public class ServletInitializer extends com.angkorteam.webui.frmk.common.ServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(BootApplication.class); + } + + @Override + public void onStartup(ServletContext servletContext) throws ServletException { + super.onStartup(servletContext); + } + +} \ No newline at end of file diff --git a/src/main/java/com/angkorteam/fintech/Session.java b/src/main/java/com/angkorteam/fintech/Session.java deleted file mode 100644 index db8aec65..00000000 --- a/src/main/java/com/angkorteam/fintech/Session.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.angkorteam.fintech; - -import java.util.concurrent.atomic.AtomicBoolean; - -import javax.servlet.http.HttpSession; - -import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession; -import org.apache.wicket.authroles.authentication.AuthenticatedWebSession; -import org.apache.wicket.authroles.authorization.strategies.role.Roles; -import org.apache.wicket.request.Request; -import org.json.JSONArray; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.angkorteam.fintech.dto.Function; -import com.angkorteam.fintech.dto.Language; -import com.angkorteam.fintech.helper.LoginHelper; -import io.github.openunirest.http.JsonNode; - -public class Session extends AbstractAuthenticatedWebSession implements IMifos { - - private static final Logger LOGGER = LoggerFactory.getLogger(Session.class); - - private Roles roles; - - private String token; - - private String identifier; - - private Language language = Language.English; - - public static final String IDENTIFIER = "mifos_identifier"; - - public static final String TOKEN = "mifos_token"; - - public Session(Request request) { - super(request); - this.roles = new Roles(); - } - - public String getToken() { - return token; - } - - public Language getLanguage() { - return this.language; - } - - protected boolean authenticate(HttpSession session, String identifier, String username, String password) { - - JsonNode tokenObject = LoginHelper.authenticate(identifier, username, password); - if (tokenObject.getObject().has("base64EncodedAuthenticationKey")) { - this.token = tokenObject.getObject().getString("base64EncodedAuthenticationKey"); - if (tokenObject.getObject().has("roles")) { - JSONArray array = tokenObject.getObject().getJSONArray("roles"); - if (array != null) { - for (int i = 0; i < array.length(); i++) { - JSONObject object = (JSONObject) array.get(i); - String role = object.getString("name"); - if (role != null && !"".equals(role)) { - this.roles.add(role); - } - } - } - } - this.identifier = identifier; - session.setAttribute(IDENTIFIER, this.identifier); - session.setAttribute(TOKEN, this.token); - this.roles.add(Function.ALL_FUNCTION); - // LOGGER.info("identifier {} token {}", this.identifier, this.token); - return true; - } else { - return false; - } - - } - - public String getIdentifier() { - return identifier; - } - - @Override - public Roles getRoles() { - return this.roles; - } - - /** - * @return Current authenticated web session - */ - public static AuthenticatedWebSession get() { - return (AuthenticatedWebSession) Session.get(); - } - - /** - * True when the user is signed in - */ - private final AtomicBoolean signedIn = new AtomicBoolean(false); - - public final boolean signIn(HttpSession session, final String identifier, final String username, final String password) { - boolean authenticated = authenticate(session, identifier, username, password); - - if (authenticated && signedIn.compareAndSet(false, true)) { - bind(); - } - return signedIn.get(); - } - - protected final void signIn(boolean value) { - signedIn.set(value); - } - - /** - * @return true, if user is signed in - */ - @Override - public final boolean isSignedIn() { - return signedIn.get(); - } - - /** - * Sign the user out. - *

- * This method is an alias of {@link #invalidate()} - *

- */ - public void signOut() { - invalidate(); - } - - /** - * Call signOut() and remove the logon data from where ever they have been - * persisted (e.g. Cookies) - */ - @Override - public void invalidate() { - signedIn.set(false); - super.invalidate(); - } -} diff --git a/src/main/java/com/angkorteam/fintech/WorkingPage.java b/src/main/java/com/angkorteam/fintech/WorkingPage.java index af229da2..a148b029 100644 --- a/src/main/java/com/angkorteam/fintech/WorkingPage.java +++ b/src/main/java/com/angkorteam/fintech/WorkingPage.java @@ -1,230 +1,230 @@ -package com.angkorteam.fintech; - -import java.util.List; -import java.util.MissingResourceException; - -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.feedback.FeedbackMessage; -import org.apache.wicket.markup.head.CssHeaderItem; -import org.apache.wicket.markup.head.IHeaderResponse; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.angkorteam.fintech.pages.AccountingPage; -import com.angkorteam.fintech.pages.LoginPage; -import com.angkorteam.fintech.pages.LogoutPage; -import com.angkorteam.fintech.pages.OrganizationDashboardPage; -import com.angkorteam.fintech.pages.ProductDashboardPage; -import com.angkorteam.fintech.pages.SystemDashboardPage; -import com.angkorteam.fintech.pages.client.center.CenterBrowsePage; -import com.angkorteam.fintech.pages.client.client.ClientBrowsePage; -import com.angkorteam.fintech.pages.client.group.GroupBrowsePage; -import com.angkorteam.fintech.pages.staff.UserBrowsePage; -import com.angkorteam.framework.Emoji; -import com.angkorteam.framework.models.NavBarMenu; -import com.angkorteam.framework.models.NavBarMenuItem; -import com.angkorteam.framework.models.PageBreadcrumb; -import com.angkorteam.framework.models.PageFooter; -import com.angkorteam.framework.models.PageHeader; -import com.angkorteam.framework.models.PageLogo; -import com.angkorteam.framework.models.SideMenu; -import com.angkorteam.framework.models.UserInfo; -import com.angkorteam.framework.wicket.DashboardPage; -import com.angkorteam.framework.wicket.markup.html.panel.FeedbackPanel; -import com.google.common.collect.Lists; -import io.github.openunirest.http.JsonNode; - -/** - * Created by socheatkhauv on 6/17/17. - */ -public abstract class WorkingPage extends DashboardPage { - - private FeedbackPanel feedbackPanel; - - public WorkingPage() { - } - - public WorkingPage(IModel model) { - super(model); - } - - public WorkingPage(PageParameters parameters) { - super(parameters); - } - - @Override - public void renderHead(IHeaderResponse response) { - super.renderHead(response); - response.render(CssHeaderItem.forCSS(".dropdown-menu { z-index: 100060 !important; }", "menu")); - } - - @Override - protected final void onInitialize() { - super.onInitialize(); - this.feedbackPanel = new FeedbackPanel("feedbackPanel", this::report); - this.add(this.feedbackPanel); - this.setOutputMarkupId(true); - initData(); - initComponent(); - configureRequiredValidation(); - configureMetaData(); - } - - protected abstract void initData(); - - protected abstract void initComponent(); - - protected abstract void configureRequiredValidation(); - - protected abstract void configureMetaData(); - - private boolean report(FeedbackMessage feedbackMessage) { - if (feedbackMessage.getReporter() instanceof org.apache.wicket.Page) { - return true; - } - return false; - } - - public boolean reportError(JsonNode node) { - if (node.getObject().has("errors")) { - JSONArray array = (JSONArray) node.getObject().get("errors"); - for (Object object : array) { - JSONObject o = (JSONObject) object; - String defaultUserMessage = (String) o.get("defaultUserMessage"); - String userMessageGlobalisationCode = (String) o.get("userMessageGlobalisationCode"); - if (userMessageGlobalisationCode != null && !"".equals(userMessageGlobalisationCode)) { - String message = null; - try { - message = getString(userMessageGlobalisationCode); - } catch (MissingResourceException e) { - } - if (message == null || "".equals(message)) { - error(defaultUserMessage + " due to this reason " + userMessageGlobalisationCode); - } else { - error(defaultUserMessage + " due to this reason '" + message + "'"); - } - } else { - error(defaultUserMessage); - } - } - return true; - } else { - if (node.getObject().has("exception") || node.getObject().has("error")) { - if (node.getObject().has("exception") && !node.getObject().isNull("exception")) { - error((String) node.getObject().get("exception")); - } - if (node.getObject().has("error") && !node.getObject().isNull("error")) { - error((String) node.getObject().get("error")); - } - if (node.getObject().has("message") && !node.getObject().isNull("message")) { - error((String) node.getObject().get("message").getClass().getName()); - } - return true; - } - } - return false; - } - - protected void reportError(JsonNode node, AjaxRequestTarget target) { - if (node == null) { - return; - } - if (node.getObject().has("errors")) { - JSONArray array = (JSONArray) node.getObject().get("errors"); - for (Object object : array) { - JSONObject o = (JSONObject) object; - error((String) o.get("defaultUserMessage")); - } - } else { - if (node.getObject().has("exception") || node.getObject().has("error")) { - if (node.getObject().has("exception")) { - error((String) node.getObject().get("exception")); - } - if (node.getObject().has("error")) { - error((String) node.getObject().get("error")); - } - if (node.getObject().has("message")) { - error((String) node.getObject().get("message")); - } - } - } - target.add(this.feedbackPanel); - } - - @Override - public IModel> buildSideMenu() { - List sideMenus = Lists.newArrayList(); - sideMenus.add(new SideMenu().buildTypeHeader("MAIN NAVIGATION")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Navigation")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Checker Inbox & Tasks")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Collection Sheet")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Individual Collection Sheet")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Frequent Posting")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Add Journal Entries")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Closing Entries")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Chart of Accounts")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Client")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Group")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Center")); - sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Help")); - return Model.ofList(sideMenus); - } - - @Override - public IModel buildPageHeader() { - return Model.of(new PageHeader().setTitle("FinTech").setDescription("FinTech")); - } - - @Override - public IModel> buildPageBreadcrumb() { - return null; - } - - @Override - public IModel> buildNavBarMenu() { - - NavBarMenu clientsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Clients", null, new NavBarMenuItem().buildTypeIcon(ClientBrowsePage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(GroupBrowsePage.class, null, Emoji.fa_dashboard, "Groups"), new NavBarMenuItem().buildTypeIcon(CenterBrowsePage.class, null, Emoji.fa_dashboard, "Centers")); - - NavBarMenu accountingMenu = new NavBarMenu().buildTypeIcon(AccountingPage.class, null, Emoji.fa_dashboard, "Accounting", null); - - NavBarMenu reportsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Reports", null, new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "All"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Loans"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Savings"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Funds"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Accounting"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "XBRL")); - - NavBarMenu adminMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Admin", null, new NavBarMenuItem().buildTypeIcon(UserBrowsePage.class, null, Emoji.fa_dashboard, "Users"), new NavBarMenuItem().buildTypeIcon(OrganizationDashboardPage.class, null, Emoji.fa_dashboard, "Organization"), new NavBarMenuItem().buildTypeIcon(SystemDashboardPage.class, null, Emoji.fa_dashboard, "System"), new NavBarMenuItem().buildTypeIcon(ProductDashboardPage.class, null, Emoji.fa_dashboard, "Products"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Templates")); - - NavBarMenu profileMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Profile", null, new NavBarMenuItem().buildTypeIcon(LogoutPage.class, null, Emoji.fa_sign_out, "Logout")); - - List menus = Lists.newArrayList(clientsMenu, accountingMenu, reportsMenu, adminMenu, profileMenu); - return Model.ofList(menus); - } - - @Override - public IModel buildUserInfo() { - return null; - } - - @Override - protected IModel buildPageLogo() { - PageLogo pageLogo = new PageLogo("ANG", "Angkor FinTech"); - return Model.of(pageLogo); - } - - @Override - protected IModel buildPageFooter() { - PageFooter pageFooter = new PageFooter(); - pageFooter.setCompany("AngkorTeam"); - return Model.of(pageFooter); - } - - @Override - public IModel hasSearchForm() { - return Model.of(false); - } - - @Override - public void onSearchClick(String searchValue) { - - } -} +//package com.angkorteam.fintech; +// +//import java.util.List; +//import java.util.MissingResourceException; +// +//import org.apache.wicket.ajax.AjaxRequestTarget; +//import org.apache.wicket.feedback.FeedbackMessage; +//import org.apache.wicket.markup.head.CssHeaderItem; +//import org.apache.wicket.markup.head.IHeaderResponse; +//import org.apache.wicket.model.IModel; +//import org.apache.wicket.model.Model; +//import org.apache.wicket.request.mapper.parameter.PageParameters; +//import org.json.JSONArray; +//import org.json.JSONObject; +// +//import com.angkorteam.fintech.pages.AccountingPage; +//import com.angkorteam.fintech.pages.LoginPage; +//import com.angkorteam.fintech.pages.LogoutPage; +//import com.angkorteam.fintech.pages.OrganizationDashboardPage; +//import com.angkorteam.fintech.pages.ProductDashboardPage; +//import com.angkorteam.fintech.pages.SystemDashboardPage; +//import com.angkorteam.fintech.pages.client.center.CenterBrowsePage; +//import com.angkorteam.fintech.pages.client.client.ClientBrowsePage; +//import com.angkorteam.fintech.pages.client.group.GroupBrowsePage; +//import com.angkorteam.fintech.pages.staff.UserBrowsePage; +//import com.angkorteam.framework.Emoji; +//import com.angkorteam.framework.models.NavBarMenu; +//import com.angkorteam.framework.models.NavBarMenuItem; +//import com.angkorteam.framework.models.PageBreadcrumb; +//import com.angkorteam.framework.models.PageFooter; +//import com.angkorteam.framework.models.PageHeader; +//import com.angkorteam.framework.models.PageLogo; +//import com.angkorteam.framework.models.SideMenu; +//import com.angkorteam.framework.models.UserInfo; +//import com.angkorteam.framework.wicket.DashboardPage; +//import com.angkorteam.framework.wicket.markup.html.panel.FeedbackPanel; +//import com.google.common.collect.Lists; +//import io.github.openunirest.http.JsonNode; +// +///** +// * Created by socheatkhauv on 6/17/17. +// */ +//public abstract class WorkingPage extends DashboardPage { +// +// private FeedbackPanel feedbackPanel; +// +// public WorkingPage() { +// } +// +// public WorkingPage(IModel model) { +// super(model); +// } +// +// public WorkingPage(PageParameters parameters) { +// super(parameters); +// } +// +// @Override +// public void renderHead(IHeaderResponse response) { +// super.renderHead(response); +// response.render(CssHeaderItem.forCSS(".dropdown-menu { z-index: 100060 !important; }", "menu")); +// } +// +// @Override +// protected final void onInitialize() { +// super.onInitialize(); +// this.feedbackPanel = new FeedbackPanel("feedbackPanel", this::report); +// this.add(this.feedbackPanel); +// this.setOutputMarkupId(true); +// initData(); +// initComponent(); +// configureRequiredValidation(); +// configureMetaData(); +// } +// +// protected abstract void initData(); +// +// protected abstract void initComponent(); +// +// protected abstract void configureRequiredValidation(); +// +// protected abstract void configureMetaData(); +// +// private boolean report(FeedbackMessage feedbackMessage) { +// if (feedbackMessage.getReporter() instanceof org.apache.wicket.Page) { +// return true; +// } +// return false; +// } +// +// public boolean reportError(JsonNode node) { +// if (node.getObject().has("errors")) { +// JSONArray array = (JSONArray) node.getObject().get("errors"); +// for (Object object : array) { +// JSONObject o = (JSONObject) object; +// String defaultUserMessage = (String) o.get("defaultUserMessage"); +// String userMessageGlobalisationCode = (String) o.get("userMessageGlobalisationCode"); +// if (userMessageGlobalisationCode != null && !"".equals(userMessageGlobalisationCode)) { +// String message = null; +// try { +// message = getString(userMessageGlobalisationCode); +// } catch (MissingResourceException e) { +// } +// if (message == null || "".equals(message)) { +// error(defaultUserMessage + " due to this reason " + userMessageGlobalisationCode); +// } else { +// error(defaultUserMessage + " due to this reason '" + message + "'"); +// } +// } else { +// error(defaultUserMessage); +// } +// } +// return true; +// } else { +// if (node.getObject().has("exception") || node.getObject().has("error")) { +// if (node.getObject().has("exception") && !node.getObject().isNull("exception")) { +// error((String) node.getObject().get("exception")); +// } +// if (node.getObject().has("error") && !node.getObject().isNull("error")) { +// error((String) node.getObject().get("error")); +// } +// if (node.getObject().has("message") && !node.getObject().isNull("message")) { +// error((String) node.getObject().get("message").getClass().getName()); +// } +// return true; +// } +// } +// return false; +// } +// +// protected void reportError(JsonNode node, AjaxRequestTarget target) { +// if (node == null) { +// return; +// } +// if (node.getObject().has("errors")) { +// JSONArray array = (JSONArray) node.getObject().get("errors"); +// for (Object object : array) { +// JSONObject o = (JSONObject) object; +// error((String) o.get("defaultUserMessage")); +// } +// } else { +// if (node.getObject().has("exception") || node.getObject().has("error")) { +// if (node.getObject().has("exception")) { +// error((String) node.getObject().get("exception")); +// } +// if (node.getObject().has("error")) { +// error((String) node.getObject().get("error")); +// } +// if (node.getObject().has("message")) { +// error((String) node.getObject().get("message")); +// } +// } +// } +// target.add(this.feedbackPanel); +// } +// +// @Override +// public IModel> buildSideMenu() { +// List sideMenus = Lists.newArrayList(); +// sideMenus.add(new SideMenu().buildTypeHeader("MAIN NAVIGATION")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Navigation")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Checker Inbox & Tasks")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Collection Sheet")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Individual Collection Sheet")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Frequent Posting")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Add Journal Entries")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Closing Entries")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Chart of Accounts")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Client")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Group")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Center")); +// sideMenus.add(new SideMenu().buildTypeMenu(LoginPage.class, null, Emoji.fa_dashboard, "Help")); +// return Model.ofList(sideMenus); +// } +// +// @Override +// public IModel buildPageHeader() { +// return Model.of(new PageHeader().setTitle("FinTech").setDescription("FinTech")); +// } +// +// @Override +// public IModel> buildPageBreadcrumb() { +// return null; +// } +// +// @Override +// public IModel> buildNavBarMenu() { +// +// NavBarMenu clientsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Clients", null, new NavBarMenuItem().buildTypeIcon(ClientBrowsePage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(GroupBrowsePage.class, null, Emoji.fa_dashboard, "Groups"), new NavBarMenuItem().buildTypeIcon(CenterBrowsePage.class, null, Emoji.fa_dashboard, "Centers")); +// +// NavBarMenu accountingMenu = new NavBarMenu().buildTypeIcon(AccountingPage.class, null, Emoji.fa_dashboard, "Accounting", null); +// +// NavBarMenu reportsMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Reports", null, new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "All"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Clients"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Loans"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Savings"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Funds"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Accounting"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "XBRL")); +// +// NavBarMenu adminMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Admin", null, new NavBarMenuItem().buildTypeIcon(UserBrowsePage.class, null, Emoji.fa_dashboard, "Users"), new NavBarMenuItem().buildTypeIcon(OrganizationDashboardPage.class, null, Emoji.fa_dashboard, "Organization"), new NavBarMenuItem().buildTypeIcon(SystemDashboardPage.class, null, Emoji.fa_dashboard, "System"), new NavBarMenuItem().buildTypeIcon(ProductDashboardPage.class, null, Emoji.fa_dashboard, "Products"), new NavBarMenuItem().buildTypeIcon(LoginPage.class, null, Emoji.fa_dashboard, "Templates")); +// +// NavBarMenu profileMenu = new NavBarMenu().buildTypeIcon(Emoji.fa_dashboard, "Profile", null, new NavBarMenuItem().buildTypeIcon(LogoutPage.class, null, Emoji.fa_sign_out, "Logout")); +// +// List menus = Lists.newArrayList(clientsMenu, accountingMenu, reportsMenu, adminMenu, profileMenu); +// return Model.ofList(menus); +// } +// +// @Override +// public IModel buildUserInfo() { +// return null; +// } +// +// @Override +// protected IModel buildPageLogo() { +// PageLogo pageLogo = new PageLogo("ANG", "Angkor FinTech"); +// return Model.of(pageLogo); +// } +// +// @Override +// protected IModel buildPageFooter() { +// PageFooter pageFooter = new PageFooter(); +// pageFooter.setCompany("AngkorTeam"); +// return Model.of(pageFooter); +// } +// +// @Override +// public IModel hasSearchForm() { +// return Model.of(false); +// } +// +// @Override +// public void onSearchClick(String searchValue) { +// +// } +//} diff --git a/src/main/java/com/angkorteam/fintech/boot/AppProperties.java b/src/main/java/com/angkorteam/fintech/boot/AppProperties.java new file mode 100644 index 00000000..adbc5927 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/boot/AppProperties.java @@ -0,0 +1,251 @@ +package com.angkorteam.fintech.boot; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.io.File; + +@Configuration +@ConfigurationProperties(prefix = "app", ignoreUnknownFields = true) +public class AppProperties { + + private String name; + + private int retryLimit; + + private String mailSenderHost; + private int mailSenderPort; + private String mailSenderProtocol; + private boolean mailSenderSsl; + private String mailSenderUsername; + private String mailSenderPassword; + private String mailSenderFrom; + private String mailSenderName; + + private String jdbcDriverClassName; + private String jdbcUrl; + private String jdbcUsername; + private String jdbcPassword; + + private String gsonDateFormat; + + private String secret; + + private String mifosUrl; + + private File cacert; + + private int validityPeriod; + + private boolean debug; + + private String timezoneId; + + private File workspace; + + private File certificate; + + private File openssl; + + private File keytool; + + public File getOpenssl() { + return openssl; + } + + public void setOpenssl(File openssl) { + this.openssl = openssl; + } + + public File getKeytool() { + return keytool; + } + + public void setKeytool(File keytool) { + this.keytool = keytool; + } + + public File getCertificate() { + return certificate; + } + + public void setCertificate(File certificate) { + this.certificate = certificate; + } + + public File getWorkspace() { + return workspace; + } + + public void setWorkspace(File workspace) { + this.workspace = workspace; + } + + public String getTimezoneId() { + return timezoneId; + } + + public void setTimezoneId(String timezoneId) { + this.timezoneId = timezoneId; + } + + public String getMailSenderHost() { + return mailSenderHost; + } + + public void setMailSenderHost(String mailSenderHost) { + this.mailSenderHost = mailSenderHost; + } + + public int getMailSenderPort() { + return mailSenderPort; + } + + public void setMailSenderPort(int mailSenderPort) { + this.mailSenderPort = mailSenderPort; + } + + public String getMailSenderProtocol() { + return mailSenderProtocol; + } + + public void setMailSenderProtocol(String mailSenderProtocol) { + this.mailSenderProtocol = mailSenderProtocol; + } + + public boolean isMailSenderSsl() { + return mailSenderSsl; + } + + public void setMailSenderSsl(boolean mailSenderSsl) { + this.mailSenderSsl = mailSenderSsl; + } + + public String getMailSenderUsername() { + return mailSenderUsername; + } + + public void setMailSenderUsername(String mailSenderUsername) { + this.mailSenderUsername = mailSenderUsername; + } + + public String getMailSenderPassword() { + return mailSenderPassword; + } + + public void setMailSenderPassword(String mailSenderPassword) { + this.mailSenderPassword = mailSenderPassword; + } + + public String getMailSenderFrom() { + return mailSenderFrom; + } + + public void setMailSenderFrom(String mailSenderFrom) { + this.mailSenderFrom = mailSenderFrom; + } + + public String getMailSenderName() { + return mailSenderName; + } + + public void setMailSenderName(String mailSenderName) { + this.mailSenderName = mailSenderName; + } + + public boolean isDebug() { + return debug; + } + + public void setDebug(boolean debug) { + this.debug = debug; + } + + public int getValidityPeriod() { + return validityPeriod; + } + + public void setValidityPeriod(int validityPeriod) { + this.validityPeriod = validityPeriod; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getGsonDateFormat() { + return gsonDateFormat; + } + + public void setGsonDateFormat(String gsonDateFormat) { + this.gsonDateFormat = gsonDateFormat; + } + + public String getJdbcDriverClassName() { + return jdbcDriverClassName; + } + + public void setJdbcDriverClassName(String jdbcDriverClassName) { + this.jdbcDriverClassName = jdbcDriverClassName; + } + + public String getJdbcUrl() { + return jdbcUrl; + } + + public void setJdbcUrl(String jdbcUrl) { + this.jdbcUrl = jdbcUrl; + } + + public String getJdbcUsername() { + return jdbcUsername; + } + + public void setJdbcUsername(String jdbcUsername) { + this.jdbcUsername = jdbcUsername; + } + + public String getJdbcPassword() { + return jdbcPassword; + } + + public void setJdbcPassword(String jdbcPassword) { + this.jdbcPassword = jdbcPassword; + } + + public int getRetryLimit() { + return retryLimit; + } + + public void setRetryLimit(int retryLimit) { + this.retryLimit = retryLimit; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMifosUrl() { + return mifosUrl; + } + + public void setMifosUrl(String mifosUrl) { + this.mifosUrl = mifosUrl; + } + + public File getCacert() { + return cacert; + } + + public void setCacert(File cacert) { + this.cacert = cacert; + } +} diff --git a/src/main/java/com/angkorteam/fintech/client/AppError.java b/src/main/java/com/angkorteam/fintech/client/AppError.java new file mode 100644 index 00000000..affa2ce3 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/AppError.java @@ -0,0 +1,57 @@ +package com.angkorteam.fintech.client; + +import java.util.List; + +public class AppError { + + private String developerMessage; + + private int httpStatusCode; + + private String defaultUserMessage; + + private String userMessageGlobalisationCode; + + private List errors; + + public List getErrors() { + return errors; + } + + public void setErrors(List errors) { + this.errors = errors; + } + + public String getDeveloperMessage() { + return developerMessage; + } + + public void setDeveloperMessage(String developerMessage) { + this.developerMessage = developerMessage; + } + + public int getHttpStatusCode() { + return httpStatusCode; + } + + public void setHttpStatusCode(int httpStatusCode) { + this.httpStatusCode = httpStatusCode; + } + + public String getDefaultUserMessage() { + return defaultUserMessage; + } + + public void setDefaultUserMessage(String defaultUserMessage) { + this.defaultUserMessage = defaultUserMessage; + } + + public String getUserMessageGlobalisationCode() { + return userMessageGlobalisationCode; + } + + public void setUserMessageGlobalisationCode(String userMessageGlobalisationCode) { + this.userMessageGlobalisationCode = userMessageGlobalisationCode; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/AppException.java b/src/main/java/com/angkorteam/fintech/client/AppException.java new file mode 100644 index 00000000..03a36801 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/AppException.java @@ -0,0 +1,23 @@ +package com.angkorteam.fintech.client; + + +public class AppException extends RuntimeException { + + private final String text; + + private final AppError object; + + public AppException(String text, AppError object) { + this.text = text; + this.object = object; + } + + public AppError getObject() { + return this.object; + } + + public String getText() { + return this.text; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/AuthenticateRequest.java b/src/main/java/com/angkorteam/fintech/client/AuthenticateRequest.java new file mode 100644 index 00000000..ab60e388 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/AuthenticateRequest.java @@ -0,0 +1,32 @@ +package com.angkorteam.fintech.client; + +public class AuthenticateRequest { + + private String username; + private String password; + + public AuthenticateRequest() { + } + + public AuthenticateRequest(String username, String password) { + this.username = username; + this.password = password; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/EnumOptionData.java b/src/main/java/com/angkorteam/fintech/client/EnumOptionData.java new file mode 100644 index 00000000..5cdb278f --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/EnumOptionData.java @@ -0,0 +1,54 @@ +/** + * 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. + */ +package com.angkorteam.fintech.client; + +import java.io.Serializable; +import java.util.Objects; + +public class EnumOptionData implements Serializable { + + private Long id; + private String code; + private String value; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/ErrorItem.java b/src/main/java/com/angkorteam/fintech/client/ErrorItem.java new file mode 100644 index 00000000..5cb3b8d8 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/ErrorItem.java @@ -0,0 +1,67 @@ +package com.angkorteam.fintech.client; + +import java.util.List; + +public class ErrorItem { + + private String developerMessage; + + private String defaultUserMessage; + + private String userMessageGlobalisationCode; + + private String parameterName; + + private String value; + + private List args; + + public String getDeveloperMessage() { + return developerMessage; + } + + public void setDeveloperMessage(String developerMessage) { + this.developerMessage = developerMessage; + } + + public String getDefaultUserMessage() { + return defaultUserMessage; + } + + public void setDefaultUserMessage(String defaultUserMessage) { + this.defaultUserMessage = defaultUserMessage; + } + + public String getUserMessageGlobalisationCode() { + return userMessageGlobalisationCode; + } + + public void setUserMessageGlobalisationCode(String userMessageGlobalisationCode) { + this.userMessageGlobalisationCode = userMessageGlobalisationCode; + } + + public String getParameterName() { + return parameterName; + } + + public void setParameterName(String parameterName) { + this.parameterName = parameterName; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public List getArgs() { + return args; + } + + public void setArgs(List args) { + this.args = args; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/ErrorValue.java b/src/main/java/com/angkorteam/fintech/client/ErrorValue.java new file mode 100644 index 00000000..0b5e957e --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/ErrorValue.java @@ -0,0 +1,14 @@ +package com.angkorteam.fintech.client; + +public class ErrorValue { + + private String value; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/angkorteam/fintech/client/FineractClient.java b/src/main/java/com/angkorteam/fintech/client/FineractClient.java new file mode 100644 index 00000000..1a87449c --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/FineractClient.java @@ -0,0 +1,351 @@ +package com.angkorteam.fintech.client; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.apache.http.HttpEntity; +import org.apache.http.client.entity.EntityBuilder; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.methods.RequestBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.apache.wicket.WicketRuntimeException; + +import javax.net.ssl.SSLContext; +import java.io.Closeable; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +public class FineractClient implements Closeable { + + private static final String DATE_FORMAT_KEY = "dateFormat"; + private static final String DATE_FORMAT_VALUE = "yyyy-MM-dd"; + private static final String LOCALE_KEY = "locale"; + private static final String LOCALE_VALUE = "en"; + + private final String baseUrl; + + private final Gson gson; + + private final CloseableHttpClient client; + + public FineractClient(SSLContext ssl, String baseUrl) { + this.baseUrl = baseUrl; + this.client = HttpClientBuilder.create().setSSLContext(ssl).build(); + this.gson = new GsonBuilder().setPrettyPrinting().create(); + } + + public PostAuthenticationResponse authentication(String tenant, AuthenticateRequest requestBody) { + EntityBuilder entityBuilder = EntityBuilder.create(); + entityBuilder.setContentType(ContentType.APPLICATION_JSON); + entityBuilder.setContentEncoding(StandardCharsets.UTF_8.name()); + entityBuilder.setText(this.gson.toJson(requestBody)); + HttpEntity entity = entityBuilder.build(); + + RequestBuilder requestBuilder = RequestBuilder.create("POST"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.setEntity(entity); + requestBuilder.setUri(this.baseUrl + "/authentication"); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, PostAuthenticationResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse officeCreate(String tenant, String token, PostOfficeRequest requestBody) throws AppException, SysException { + Map internalRequestBody = new HashMap<>(); + internalRequestBody.put(LOCALE_KEY, LOCALE_VALUE); + internalRequestBody.put(DATE_FORMAT_KEY, DATE_FORMAT_VALUE); + internalRequestBody.put("externalId", requestBody.getExternalId()); + internalRequestBody.put("name", requestBody.getName()); + internalRequestBody.put("parentId", requestBody.getParentId()); + if (requestBody.getOpeningDate() != null) { + internalRequestBody.put("openingDate", DateFormatUtils.format(requestBody.getOpeningDate(), DATE_FORMAT_VALUE)); + } else { + internalRequestBody.put("openingDate", null); + } + EntityBuilder entityBuilder = EntityBuilder.create(); + entityBuilder.setContentType(ContentType.APPLICATION_JSON); + entityBuilder.setContentEncoding(StandardCharsets.UTF_8.name()); + entityBuilder.setText(this.gson.toJson(internalRequestBody)); + HttpEntity entity = entityBuilder.build(); + + RequestBuilder requestBuilder = RequestBuilder.create("POST"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setEntity(entity); + requestBuilder.setUri(this.baseUrl + "/offices"); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse officeUpdate(String tenant, String token, long officeId, PutOfficeRequest requestBody) throws AppException, SysException { + Map internalRequestBody = new HashMap<>(); + internalRequestBody.put(LOCALE_KEY, LOCALE_VALUE); + internalRequestBody.put(DATE_FORMAT_KEY, DATE_FORMAT_VALUE); + internalRequestBody.put("externalId", requestBody.getExternalId()); + internalRequestBody.put("name", requestBody.getName()); + internalRequestBody.put("parentId", requestBody.getParentId()); + if (requestBody.getOpeningDate() != null) { + internalRequestBody.put("openingDate", DateFormatUtils.format(requestBody.getOpeningDate(), DATE_FORMAT_VALUE)); + } else { + internalRequestBody.put("openingDate", null); + } + EntityBuilder entityBuilder = EntityBuilder.create(); + entityBuilder.setContentType(ContentType.APPLICATION_JSON); + entityBuilder.setContentEncoding(StandardCharsets.UTF_8.name()); + entityBuilder.setText(this.gson.toJson(internalRequestBody)); + HttpEntity entity = entityBuilder.build(); + + RequestBuilder requestBuilder = RequestBuilder.create("PUT"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setEntity(entity); + requestBuilder.setUri(this.baseUrl + "/offices/" + officeId); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse officeTransactionCreate(String tenant, String token, PostOfficeTransactionRequest requestBody) { + Map internalRequestBody = new HashMap<>(); + internalRequestBody.put(LOCALE_KEY, LOCALE_VALUE); + internalRequestBody.put(DATE_FORMAT_KEY, DATE_FORMAT_VALUE); + internalRequestBody.put("fromOfficeId", requestBody.getFromOfficeId()); + internalRequestBody.put("toOfficeId", requestBody.getToOfficeId()); + internalRequestBody.put("currencyCode", requestBody.getCurrencyCode()); + internalRequestBody.put("transactionAmount", requestBody.getTransactionAmount()); + internalRequestBody.put("description", requestBody.getDescription()); + if (requestBody.getTransactionDate() != null) { + internalRequestBody.put("transactionDate", DateFormatUtils.format(requestBody.getTransactionDate(), DATE_FORMAT_VALUE)); + } else { + internalRequestBody.put("transactionDate", null); + } + + EntityBuilder entityBuilder = EntityBuilder.create(); + entityBuilder.setContentType(ContentType.APPLICATION_JSON); + entityBuilder.setContentEncoding(StandardCharsets.UTF_8.name()); + entityBuilder.setText(this.gson.toJson(internalRequestBody)); + HttpEntity entity = entityBuilder.build(); + + RequestBuilder requestBuilder = RequestBuilder.create("POST"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setEntity(entity); + requestBuilder.setUri(this.baseUrl + "/officetransactions"); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse officeTransactionDelete(String tenant, String token, long transactionId) { + RequestBuilder requestBuilder = RequestBuilder.create("DELETE"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setUri(this.baseUrl + "/officetransactions/" + transactionId); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse runAccrualCreate(String tenant, String token, PostRunAccrualRequest requestBody) { + Map internalRequestBody = new HashMap<>(); + internalRequestBody.put(LOCALE_KEY, LOCALE_VALUE); + internalRequestBody.put(DATE_FORMAT_KEY, DATE_FORMAT_VALUE); + if (requestBody.getTillDate() != null) { + internalRequestBody.put("tillDate", DateFormatUtils.format(requestBody.getTillDate(), DATE_FORMAT_VALUE)); + } else { + internalRequestBody.put("tillDate", null); + } + + EntityBuilder entityBuilder = EntityBuilder.create(); + entityBuilder.setContentType(ContentType.APPLICATION_JSON); + entityBuilder.setContentEncoding(StandardCharsets.UTF_8.name()); + entityBuilder.setText(this.gson.toJson(internalRequestBody)); + HttpEntity entity = entityBuilder.build(); + + RequestBuilder requestBuilder = RequestBuilder.create("POST"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setEntity(entity); + requestBuilder.setUri(this.baseUrl + "/runaccruals"); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse glClosureCreate(String tenant, String token, PostGlClosureRequest requestBody) { + Map internalRequestBody = new HashMap<>(); + internalRequestBody.put(LOCALE_KEY, LOCALE_VALUE); + internalRequestBody.put(DATE_FORMAT_KEY, DATE_FORMAT_VALUE); + internalRequestBody.put("officeId", requestBody.getOfficeId()); + internalRequestBody.put("comments", requestBody.getComments()); + if (requestBody.getClosingDate() != null) { + internalRequestBody.put("closingDate", DateFormatUtils.format(requestBody.getClosingDate(), DATE_FORMAT_VALUE)); + } else { + internalRequestBody.put("closingDate", null); + } + + EntityBuilder entityBuilder = EntityBuilder.create(); + entityBuilder.setContentType(ContentType.APPLICATION_JSON); + entityBuilder.setContentEncoding(StandardCharsets.UTF_8.name()); + entityBuilder.setText(this.gson.toJson(internalRequestBody)); + HttpEntity entity = entityBuilder.build(); + + RequestBuilder requestBuilder = RequestBuilder.create("POST"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setEntity(entity); + requestBuilder.setUri(this.baseUrl + "/glclosures"); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse glClosureUpdate(String tenant, String token, long glClosureId, PutGlClosureRequest requestBody) throws AppException, SysException { + EntityBuilder entityBuilder = EntityBuilder.create(); + entityBuilder.setContentType(ContentType.APPLICATION_JSON); + entityBuilder.setContentEncoding(StandardCharsets.UTF_8.name()); + entityBuilder.setText(this.gson.toJson(requestBody)); + HttpEntity entity = entityBuilder.build(); + + RequestBuilder requestBuilder = RequestBuilder.create("PUT"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setEntity(entity); + requestBuilder.setUri(this.baseUrl + "/glclosures/" + glClosureId); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + public FineractResponse glClosureDelete(String tenant, String token, long glClosureId) { + RequestBuilder requestBuilder = RequestBuilder.create("DELETE"); + requestBuilder.addHeader("Fineract-Platform-TenantId", tenant); + requestBuilder.addHeader("Authorization", "Basic " + token); + requestBuilder.setUri(this.baseUrl + "/glclosures/" + glClosureId); + HttpUriRequest request = requestBuilder.build(); + try (CloseableHttpResponse response = this.client.execute(request)) { + String responseText = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() <= 299) { + return this.gson.fromJson(responseText, FineractResponse.class); + } else { + if (responseText.contains("developerMessage")) { + throw new AppException(responseText, this.gson.fromJson(responseText, AppError.class)); + } else { + throw new SysException(responseText, this.gson.fromJson(responseText, SysError.class)); + } + } + } catch (IOException e) { + throw new WicketRuntimeException(e); + } + } + + @Override + public void close() throws IOException { + if (this.client != null) { + this.client.close(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/angkorteam/fintech/client/FineractResponse.java b/src/main/java/com/angkorteam/fintech/client/FineractResponse.java new file mode 100644 index 00000000..8a0c2598 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/FineractResponse.java @@ -0,0 +1,143 @@ +package com.angkorteam.fintech.client; + +import java.util.Map; + +public class FineractResponse { + + private Long commandId; + private Long officeId; + private Long groupId; + private Long clientId; + private Long loanId; + private Long savingsId; + private Long resourceId; + private Long subResourceId; + private String transactionId; + private Map changes; + private String resourceIdentifier; + private Long productId; + private Long gsimId; + private Long glimId; + private Boolean rollbackTransaction; + + public Long getCommandId() { + return commandId; + } + + public void setCommandId(Long commandId) { + this.commandId = commandId; + } + + public Long getOfficeId() { + return officeId; + } + + public void setOfficeId(Long officeId) { + this.officeId = officeId; + } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public Long getClientId() { + return clientId; + } + + public void setClientId(Long clientId) { + this.clientId = clientId; + } + + public Long getLoanId() { + return loanId; + } + + public void setLoanId(Long loanId) { + this.loanId = loanId; + } + + public Long getSavingsId() { + return savingsId; + } + + public void setSavingsId(Long savingsId) { + this.savingsId = savingsId; + } + + public Long getResourceId() { + return resourceId; + } + + public void setResourceId(Long resourceId) { + this.resourceId = resourceId; + } + + public Long getSubResourceId() { + return subResourceId; + } + + public void setSubResourceId(Long subResourceId) { + this.subResourceId = subResourceId; + } + + public String getTransactionId() { + return transactionId; + } + + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + + public Map getChanges() { + return changes; + } + + public void setChanges(Map changes) { + this.changes = changes; + } + + public String getResourceIdentifier() { + return resourceIdentifier; + } + + public void setResourceIdentifier(String resourceIdentifier) { + this.resourceIdentifier = resourceIdentifier; + } + + public Long getProductId() { + return productId; + } + + public void setProductId(Long productId) { + this.productId = productId; + } + + public Long getGsimId() { + return gsimId; + } + + public void setGsimId(Long gsimId) { + this.gsimId = gsimId; + } + + public Long getGlimId() { + return glimId; + } + + public void setGlimId(Long glimId) { + this.glimId = glimId; + } + + public Boolean getRollbackTransaction() { + return rollbackTransaction; + } + + public void setRollbackTransaction(Boolean rollbackTransaction) { + this.rollbackTransaction = rollbackTransaction; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/PostAuthenticationResponse.java b/src/main/java/com/angkorteam/fintech/client/PostAuthenticationResponse.java new file mode 100644 index 00000000..cef66b63 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PostAuthenticationResponse.java @@ -0,0 +1,117 @@ +package com.angkorteam.fintech.client; + +import java.util.List; + +public class PostAuthenticationResponse { + + private String username; + + private Long userId; + + private String base64EncodedAuthenticationKey; + + private boolean authenticated; + + private Long officeId; + + private String officeName; + + private Long staffId; + + private String staffDisplayName; + + private EnumOptionData organisationalRole; + + private List roles; + + private List permissions; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getBase64EncodedAuthenticationKey() { + return base64EncodedAuthenticationKey; + } + + public void setBase64EncodedAuthenticationKey(String base64EncodedAuthenticationKey) { + this.base64EncodedAuthenticationKey = base64EncodedAuthenticationKey; + } + + public boolean isAuthenticated() { + return authenticated; + } + + public void setAuthenticated(boolean authenticated) { + this.authenticated = authenticated; + } + + public Long getOfficeId() { + return officeId; + } + + public void setOfficeId(Long officeId) { + this.officeId = officeId; + } + + public String getOfficeName() { + return officeName; + } + + public void setOfficeName(String officeName) { + this.officeName = officeName; + } + + public Long getStaffId() { + return staffId; + } + + public void setStaffId(Long staffId) { + this.staffId = staffId; + } + + public String getStaffDisplayName() { + return staffDisplayName; + } + + public void setStaffDisplayName(String staffDisplayName) { + this.staffDisplayName = staffDisplayName; + } + + public EnumOptionData getOrganisationalRole() { + return organisationalRole; + } + + public void setOrganisationalRole(EnumOptionData organisationalRole) { + this.organisationalRole = organisationalRole; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public List getPermissions() { + return permissions; + } + + public void setPermissions(List permissions) { + this.permissions = permissions; + } + +} \ No newline at end of file diff --git a/src/main/java/com/angkorteam/fintech/client/PostGlClosureRequest.java b/src/main/java/com/angkorteam/fintech/client/PostGlClosureRequest.java new file mode 100644 index 00000000..5dd3ea17 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PostGlClosureRequest.java @@ -0,0 +1,40 @@ +package com.angkorteam.fintech.client; + +import java.util.Date; + +public class PostGlClosureRequest { + + private long officeId; + + private Date closingDate; + + /** + * limit to 500 + */ + private String comments; + + public long getOfficeId() { + return officeId; + } + + public void setOfficeId(long officeId) { + this.officeId = officeId; + } + + public Date getClosingDate() { + return closingDate; + } + + public void setClosingDate(Date closingDate) { + this.closingDate = closingDate; + } + + public String getComments() { + return comments; + } + + public void setComments(String comments) { + this.comments = comments; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/PostHolidaysRequest.java b/src/main/java/com/angkorteam/fintech/client/PostHolidaysRequest.java new file mode 100644 index 00000000..5f94391a --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PostHolidaysRequest.java @@ -0,0 +1,4 @@ +package com.angkorteam.fintech.client; + +public class PostHolidaysRequest { +} diff --git a/src/main/java/com/angkorteam/fintech/client/PostOfficeRequest.java b/src/main/java/com/angkorteam/fintech/client/PostOfficeRequest.java new file mode 100644 index 00000000..6623435d --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PostOfficeRequest.java @@ -0,0 +1,53 @@ +package com.angkorteam.fintech.client; + +import java.util.Date; + +public class PostOfficeRequest { + + /** + * limit to 100 + */ + private String name; + + private Date openingDate; + + private long parentId; + + /** + * limit to 100 + */ + private String externalId; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getOpeningDate() { + return openingDate; + } + + public void setOpeningDate(Date openingDate) { + this.openingDate = openingDate; + } + + public long getParentId() { + return parentId; + } + + public void setParentId(long parentId) { + this.parentId = parentId; + } + + public String getExternalId() { + return externalId; + } + + public void setExternalId(String externalId) { + this.externalId = externalId; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/PostOfficeTransactionRequest.java b/src/main/java/com/angkorteam/fintech/client/PostOfficeTransactionRequest.java new file mode 100644 index 00000000..a431432b --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PostOfficeTransactionRequest.java @@ -0,0 +1,76 @@ +package com.angkorteam.fintech.client; + +import java.util.Date; + +public class PostOfficeTransactionRequest { + + private Long fromOfficeId; + + private Long toOfficeId; + + private Date transactionDate; + + /** + * limit to 3 + */ + private String currencyCode; + + /** + * greater than 0 + */ + private double transactionAmount; + + /** + * limit to 100 + */ + private String description; + + public Long getFromOfficeId() { + return fromOfficeId; + } + + public void setFromOfficeId(Long fromOfficeId) { + this.fromOfficeId = fromOfficeId; + } + + public Long getToOfficeId() { + return toOfficeId; + } + + public void setToOfficeId(Long toOfficeId) { + this.toOfficeId = toOfficeId; + } + + public Date getTransactionDate() { + return transactionDate; + } + + public void setTransactionDate(Date transactionDate) { + this.transactionDate = transactionDate; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + + public double getTransactionAmount() { + return transactionAmount; + } + + public void setTransactionAmount(double transactionAmount) { + this.transactionAmount = transactionAmount; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/PostRunAccrualRequest.java b/src/main/java/com/angkorteam/fintech/client/PostRunAccrualRequest.java new file mode 100644 index 00000000..a7aff953 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PostRunAccrualRequest.java @@ -0,0 +1,20 @@ +package com.angkorteam.fintech.client; + +import java.util.Date; + +public class PostRunAccrualRequest { + + /** + * required + */ + private Date tillDate; + + public Date getTillDate() { + return tillDate; + } + + public void setTillDate(Date tillDate) { + this.tillDate = tillDate; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/PutGlClosureRequest.java b/src/main/java/com/angkorteam/fintech/client/PutGlClosureRequest.java new file mode 100644 index 00000000..c0272ae8 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PutGlClosureRequest.java @@ -0,0 +1,18 @@ +package com.angkorteam.fintech.client; + +public class PutGlClosureRequest { + + /** + * limit to 500 + */ + private String comments; + + public String getComments() { + return comments; + } + + public void setComments(String comments) { + this.comments = comments; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/PutOfficeRequest.java b/src/main/java/com/angkorteam/fintech/client/PutOfficeRequest.java new file mode 100644 index 00000000..c3c1cbff --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/PutOfficeRequest.java @@ -0,0 +1,53 @@ +package com.angkorteam.fintech.client; + +import java.util.Date; + +public class PutOfficeRequest { + + /** + * limit to 100 + */ + private String name; + + private Date openingDate; + + private long parentId; + + /** + * limit to 100 + */ + private String externalId; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getOpeningDate() { + return openingDate; + } + + public void setOpeningDate(Date openingDate) { + this.openingDate = openingDate; + } + + public long getParentId() { + return parentId; + } + + public void setParentId(long parentId) { + this.parentId = parentId; + } + + public String getExternalId() { + return externalId; + } + + public void setExternalId(String externalId) { + this.externalId = externalId; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/RoleData.java b/src/main/java/com/angkorteam/fintech/client/RoleData.java new file mode 100644 index 00000000..0b367816 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/RoleData.java @@ -0,0 +1,62 @@ +/** + * 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. + */ +package com.angkorteam.fintech.client; + +import java.io.Serializable; + +public class RoleData implements Serializable { + + private Long id; + private String name; + private String description; + private Boolean disabled; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Boolean getDisabled() { + return disabled; + } + + public void setDisabled(Boolean disabled) { + this.disabled = disabled; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/SysError.java b/src/main/java/com/angkorteam/fintech/client/SysError.java new file mode 100644 index 00000000..50a3ca2b --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/SysError.java @@ -0,0 +1,55 @@ +package com.angkorteam.fintech.client; + +public class SysError { + + private long timestamp; + + private int status; + + private String error; + + private String message; + + private String path; + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/client/SysException.java b/src/main/java/com/angkorteam/fintech/client/SysException.java new file mode 100644 index 00000000..5c0a5364 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/client/SysException.java @@ -0,0 +1,22 @@ +package com.angkorteam.fintech.client; + +public class SysException extends RuntimeException { + + private final String text; + + private final SysError object; + + public SysException(String text, SysError object) { + this.text = text; + this.object = object; + } + + public SysError getObject() { + return this.object; + } + + public String getText() { + return this.text; + } + +} diff --git a/src/main/java/com/angkorteam/fintech/data/MifosSingleChoiceProvider.java b/src/main/java/com/angkorteam/fintech/data/MifosSingleChoiceProvider.java new file mode 100644 index 00000000..5bc16eeb --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/data/MifosSingleChoiceProvider.java @@ -0,0 +1,64 @@ +package com.angkorteam.fintech.data; + +import com.angkorteam.webui.frmk.common.WicketFactory; +import com.angkorteam.webui.frmk.wicket.markup.html.form.select2.Option; +import com.angkorteam.webui.frmk.wicket.markup.html.form.select2.SingleChoiceProvider; +import org.springframework.context.ApplicationContext; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +import javax.sql.DataSource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class MifosSingleChoiceProvider extends SingleChoiceProvider { + + public MifosSingleChoiceProvider(String table, String idField) { + super(table, idField); + } + + public MifosSingleChoiceProvider(String table, String idField, String queryField) { + super(table, idField, queryField); + } + + public MifosSingleChoiceProvider(String table, String idField, String queryField, String orderBy) { + super(table, idField, queryField, orderBy); + } + + public MifosSingleChoiceProvider(String table, String idField, String queryField, String orderBy, String labelField) { + super(table, idField, queryField, orderBy, labelField); + } + + @Override + protected Option queryOption(String query, Map params) { + ApplicationContext context = WicketFactory.getApplicationContext(); + DataSource dataSource = (DataSource) context.getBean("delegateDataSource"); + NamedParameterJdbcOperations named = new NamedParameterJdbcTemplate(dataSource); + Map record = null; + try { + record = named.queryForMap(query, params); + } catch (DataAccessException e) { + } + if (record == null) { + return null; + } else { + return new Option(String.valueOf(record.get("id")), (String) record.get("text")); + } + } + + @Override + protected List

"); - } - -} diff --git a/src/main/java/com/angkorteam/fintech/meta/AbstractTable.java b/src/main/java/com/angkorteam/fintech/meta/AbstractTable.java new file mode 100644 index 00000000..3309b5b6 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AbstractTable.java @@ -0,0 +1,152 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.*; + +import java.util.Collection; +import java.util.List; + +public abstract class AbstractTable implements Table { + + protected final Table delegate; + + protected AbstractTable(DataContext dataContext, String name) { + this.delegate = dataContext.getDefaultSchema().getTableByName(name); + } + + @Override + public final String getName() { + return delegate.getName(); + } + + @Override + public final int getColumnCount() { + return delegate.getColumnCount(); + } + + @Override + public final List getColumns() { + return delegate.getColumns(); + } + + @Override + public final Column getColumnByName(String columnName) { + return delegate.getColumnByName(columnName); + } + + @Override + public final Column getColumn(int index) throws IndexOutOfBoundsException { + return delegate.getColumn(index); + } + + @Override + public final Schema getSchema() { + return delegate.getSchema(); + } + + @Override + public final TableType getType() { + return delegate.getType(); + } + + @Override + public final Collection getRelationships() { + return delegate.getRelationships(); + } + + @Override + public final Collection getRelationships(Table otherTable) { + return delegate.getRelationships(otherTable); + } + + @Override + public final int getRelationshipCount() { + return delegate.getRelationshipCount(); + } + + @Override + public final String getRemarks() { + return delegate.getRemarks(); + } + + @Override + public final List getNumberColumns() { + return delegate.getNumberColumns(); + } + + @Override + public final List getLiteralColumns() { + return delegate.getLiteralColumns(); + } + + @Override + public final List getTimeBasedColumns() { + return delegate.getTimeBasedColumns(); + } + + @Override + public final List getBooleanColumns() { + return delegate.getBooleanColumns(); + } + + @Override + public final List getIndexedColumns() { + return delegate.getIndexedColumns(); + } + + @Override + public final Collection getForeignKeyRelationships() { + return delegate.getForeignKeyRelationships(); + } + + @Override + public final Collection getPrimaryKeyRelationships() { + return delegate.getPrimaryKeyRelationships(); + } + + @Override + public final List getForeignKeys() { + return delegate.getForeignKeys(); + } + + @Override + public final List getPrimaryKeys() { + return delegate.getPrimaryKeys(); + } + + @Override + public final List getColumnNames() { + return delegate.getColumnNames(); + } + + @Override + public final List getColumnsOfType(ColumnType columnType) { + return delegate.getColumnsOfType(columnType); + } + + @Override + public final List getColumnsOfSuperType(SuperColumnType superColumnType) { + return delegate.getColumnsOfSuperType(superColumnType); + } + + @Override + public final int compareTo(Table o) { + return delegate.compareTo(o); + } + + @Override + public final String getQuote() { + return delegate.getQuote(); + } + + @Override + public final String getQuotedName() { + return delegate.getQuotedName(); + } + + @Override + public final String getQualifiedLabel() { + return delegate.getQualifiedLabel(); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/AccAccountingRule.java b/src/main/java/com/angkorteam/fintech/meta/AccAccountingRule.java new file mode 100644 index 00000000..3e62788e --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AccAccountingRule.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class AccAccountingRule extends AbstractTable { + + public final Column ID; + + public final Column OFFICE_ID; + + public final Column NAME; + + public final Column DEBIT_ACCOUNT_ID; + + public final Column ALLOW_MULTIPLE_DEBIT; + + public final Column CREDIT_ACCOUNT_ID; + + public final Column ALLOW_MULTIPLE_CREDIT; + + public final Column DESCRIPTION; + + public final Column SYSTEM_DEFINED; + + public static AccAccountingRule staticInitialize(DataContext dataContext) { + return new AccAccountingRule(dataContext); + } + + private AccAccountingRule(DataContext dataContext) { + super(dataContext, "acc_accounting_rule"); + this.ID = this.delegate.getColumnByName("id"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + this.NAME = this.delegate.getColumnByName("name"); + this.DEBIT_ACCOUNT_ID = this.delegate.getColumnByName("debit_account_id"); + this.ALLOW_MULTIPLE_DEBIT = this.delegate.getColumnByName("allow_multiple_debits"); + this.CREDIT_ACCOUNT_ID = this.delegate.getColumnByName("credit_account_id"); + this.ALLOW_MULTIPLE_CREDIT = this.delegate.getColumnByName("allow_multiple_credits"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.SYSTEM_DEFINED = this.delegate.getColumnByName("system_defined"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/AccGlAccount.java b/src/main/java/com/angkorteam/fintech/meta/AccGlAccount.java new file mode 100644 index 00000000..bf382532 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AccGlAccount.java @@ -0,0 +1,49 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class AccGlAccount extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column PARENT_ID; + + public final Column HIERARCHY; + + public final Column GL_CODE; + + public final Column DISABLED; + + public final Column MANUAL_JOURNAL_ENTRIES_ALLOWED; + + public final Column ACCOUNT_USAGE; + + public final Column CLASSIFICATION_ENUM; + + public final Column TAG_ID; + + public final Column DESCRIPTION; + + public static AccGlAccount staticInitialize(DataContext dataContext) { + return new AccGlAccount(dataContext); + } + + private AccGlAccount(DataContext dataContext) { + super(dataContext, "acc_gl_account"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.PARENT_ID = this.delegate.getColumnByName("parent_id"); + this.HIERARCHY = this.delegate.getColumnByName("hierarchy"); + this.GL_CODE = this.delegate.getColumnByName("gl_code"); + this.DISABLED = this.delegate.getColumnByName("disabled"); + this.MANUAL_JOURNAL_ENTRIES_ALLOWED = this.delegate.getColumnByName("manual_journal_entries_allowed"); + this.ACCOUNT_USAGE = this.delegate.getColumnByName("account_usage"); + this.CLASSIFICATION_ENUM = this.delegate.getColumnByName("classification_enum"); + this.TAG_ID = this.delegate.getColumnByName("tag_id"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/AccGlClosure.java b/src/main/java/com/angkorteam/fintech/meta/AccGlClosure.java new file mode 100644 index 00000000..3607e879 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AccGlClosure.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class AccGlClosure extends AbstractTable { + + public final Column ID; + + public final Column OFFICE_ID; + + public final Column CLOSING_DATE; + + public final Column DELETED; + + public final Column CREATED_BY_ID; + + public final Column LAST_MODIFIED_BY_ID; + + public final Column CREATED_DATE; + + public final Column LAST_MODIFIED_DATE; + + public final Column COMMENT; + + public static AccGlClosure staticInitialize(DataContext dataContext) { + return new AccGlClosure(dataContext); + } + + private AccGlClosure(DataContext dataContext) { + super(dataContext, "acc_gl_closure"); + this.ID = this.delegate.getColumnByName("id"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + this.CLOSING_DATE = this.delegate.getColumnByName("closing_date"); + this.DELETED = this.delegate.getColumnByName("is_deleted"); + this.CREATED_BY_ID = this.delegate.getColumnByName("createdby_id"); + this.LAST_MODIFIED_BY_ID = this.delegate.getColumnByName("lastmodifiedby_id"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + this.COMMENT = this.delegate.getColumnByName("comments"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/AccGlFinancialActivityAccount.java b/src/main/java/com/angkorteam/fintech/meta/AccGlFinancialActivityAccount.java new file mode 100644 index 00000000..37e718af --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AccGlFinancialActivityAccount.java @@ -0,0 +1,25 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class AccGlFinancialActivityAccount extends AbstractTable { + + public final Column ID; + + public final Column GL_ACCOUNT_ID; + + public final Column FINANCIAL_ACTIVITY_TYPE; + + public static AccGlFinancialActivityAccount staticInitialize(DataContext dataContext) { + return new AccGlFinancialActivityAccount(dataContext); + } + + private AccGlFinancialActivityAccount(DataContext dataContext) { + super(dataContext, "acc_gl_financial_activity_account"); + this.ID = this.delegate.getColumnByName("id"); + this.GL_ACCOUNT_ID = this.delegate.getColumnByName("gl_account_id"); + this.FINANCIAL_ACTIVITY_TYPE = this.delegate.getColumnByName("financial_activity_type"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/AccGlJournalEntry.java b/src/main/java/com/angkorteam/fintech/meta/AccGlJournalEntry.java new file mode 100644 index 00000000..c87e309c --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AccGlJournalEntry.java @@ -0,0 +1,100 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class AccGlJournalEntry extends AbstractTable { + + public final Column ID; + + public final Column ACCOUNT_ID; + + public final Column OFFICE_ID; + + public final Column REVERSAL_ID; + + public final Column CURRENCY_CODE; + + public final Column TRANSACTION_ID; + + public final Column LOAN_TRANSACTION_ID; + + public final Column SAVING_TRANSACTION_ID; + + public final Column CLIENT_TRANSACTION_ID; + + public final Column REVERSED; + + public final Column REF_NUM; + + public final Column MANUAL_ENTRY; + + public final Column ENTRY_DATE; + + public final Column TYPE_ENUM; + + public final Column AMOUNT; + + public final Column DESCRIPTION; + + public final Column ENTITY_TYPE_ENUM; + + public final Column ENTITY_ID; + + public final Column CREATED_BY_ID; + + public final Column LAST_MODIFIED_BY_ID; + + public final Column CREATED_DATE; + + public final Column LAST_MODIFIED_DATE; + + public final Column RUNNING_BALANCE_CALCULATED; + + public final Column OFFICE_RUNNING_BALANCE; + + public final Column ORGANIZATION_RUNNING_BALANCE; + + public final Column PAYMENT_DETAIL_ID; + + public final Column SHARE_TRANSACTION_ID; + + public final Column TRANSACTION_DATE; + + public static AccGlJournalEntry staticInitialize(DataContext dataContext) { + return new AccGlJournalEntry(dataContext); + } + + private AccGlJournalEntry(DataContext dataContext) { + super(dataContext, "acc_gl_financial_activity_account"); + this.ID = this.delegate.getColumnByName("id"); + this.ACCOUNT_ID = this.delegate.getColumnByName("account_id"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + this.REVERSAL_ID = this.delegate.getColumnByName("reversal_id"); + this.CURRENCY_CODE = this.delegate.getColumnByName("currency_code"); + this.TRANSACTION_ID = this.delegate.getColumnByName("transaction_id"); + this.LOAN_TRANSACTION_ID = this.delegate.getColumnByName("loan_transaction_id"); + this.SAVING_TRANSACTION_ID = this.delegate.getColumnByName("savings_transaction_id"); + this.CLIENT_TRANSACTION_ID = this.delegate.getColumnByName("client_transaction_id"); + this.REVERSED = this.delegate.getColumnByName("reversed"); + this.REF_NUM = this.delegate.getColumnByName("ref_num"); + this.MANUAL_ENTRY = this.delegate.getColumnByName("manual_entry"); + this.ENTRY_DATE = this.delegate.getColumnByName("entry_date"); + this.TYPE_ENUM = this.delegate.getColumnByName("type_enum"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.ENTITY_TYPE_ENUM = this.delegate.getColumnByName("entity_type_enum"); + this.ENTITY_ID = this.delegate.getColumnByName("entity_id"); + this.CREATED_BY_ID = this.delegate.getColumnByName("createdby_id"); + this.LAST_MODIFIED_BY_ID = this.delegate.getColumnByName("lastmodifiedby_id"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + this.RUNNING_BALANCE_CALCULATED = this.delegate.getColumnByName("is_running_balance_calculated"); + this.OFFICE_RUNNING_BALANCE = this.delegate.getColumnByName("office_running_balance"); + this.ORGANIZATION_RUNNING_BALANCE = this.delegate.getColumnByName("organization_running_balance"); + this.PAYMENT_DETAIL_ID = this.delegate.getColumnByName("payment_details_id"); + this.SHARE_TRANSACTION_ID = this.delegate.getColumnByName("share_transaction_id"); + this.TRANSACTION_DATE = this.delegate.getColumnByName("transaction_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/AccProductMapping.java b/src/main/java/com/angkorteam/fintech/meta/AccProductMapping.java new file mode 100644 index 00000000..4e2f9e56 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AccProductMapping.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class AccProductMapping extends AbstractTable { + + public final Column ID; + + public final Column GL_ACCOUNT_ID; + + public final Column PRODUCT_ID; + + public final Column PRODUCT_TYPE; + + public final Column PAYMENT_TYPE; + + public final Column CHARGE_ID; + + public final Column FINANCIAL_ACCOUNT_TYPE; + + public static AccProductMapping staticInitialize(DataContext dataContext) { + return new AccProductMapping(dataContext); + } + + private AccProductMapping(DataContext dataContext) { + super(dataContext, "acc_product_mapping"); + this.ID = this.delegate.getColumnByName("id"); + this.GL_ACCOUNT_ID = this.delegate.getColumnByName("gl_account_id"); + this.PRODUCT_ID = this.delegate.getColumnByName("product_id"); + this.PRODUCT_TYPE = this.delegate.getColumnByName("product_type"); + this.PAYMENT_TYPE = this.delegate.getColumnByName("payment_type"); + this.CHARGE_ID = this.delegate.getColumnByName("charge_id"); + this.FINANCIAL_ACCOUNT_TYPE = this.delegate.getColumnByName("financial_account_type"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/AccRuleTag.java b/src/main/java/com/angkorteam/fintech/meta/AccRuleTag.java new file mode 100644 index 00000000..4ab6094a --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/AccRuleTag.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class AccRuleTag extends AbstractTable { + + public final Column ID; + + public final Column ACC_RULE_ID; + + public final Column TAG_ID; + + public final Column ACC_TYPE_ENUM; + + public static AccRuleTag staticInitialize(DataContext dataContext) { + return new AccRuleTag(dataContext); + } + + private AccRuleTag(DataContext dataContext) { + super(dataContext, "acc_rule_tags"); + this.ID = this.delegate.getColumnByName("id"); + this.ACC_RULE_ID = this.delegate.getColumnByName("acc_rule_id"); + this.TAG_ID = this.delegate.getColumnByName("tag_id"); + this.ACC_TYPE_ENUM = this.delegate.getColumnByName("acc_type_enum"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/CAccountNumberFormat.java b/src/main/java/com/angkorteam/fintech/meta/CAccountNumberFormat.java new file mode 100644 index 00000000..b9e1c2b6 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/CAccountNumberFormat.java @@ -0,0 +1,25 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class CAccountNumberFormat extends AbstractTable { + + public final Column ID; + + public final Column ACCOUNT_TYPE_ENUM; + + public final Column PREFIX_TYPE_ENUM; + + public static CAccountNumberFormat staticInitialize(DataContext dataContext) { + return new CAccountNumberFormat(dataContext); + } + + private CAccountNumberFormat(DataContext dataContext) { + super(dataContext, "c_account_number_format"); + this.ID = this.delegate.getColumnByName("id"); + this.ACCOUNT_TYPE_ENUM = this.delegate.getColumnByName("account_type_enum"); + this.PREFIX_TYPE_ENUM = this.delegate.getColumnByName("prefix_type_enum"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/CCache.java b/src/main/java/com/angkorteam/fintech/meta/CCache.java new file mode 100644 index 00000000..7fa83f59 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/CCache.java @@ -0,0 +1,22 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class CCache extends AbstractTable { + + public final Column ID; + + public final Column CACHE_TYPE_ENUM; + + public static CCache staticInitialize(DataContext dataContext) { + return new CCache(dataContext); + } + + private CCache(DataContext dataContext) { + super(dataContext, "c_cache"); + this.ID = this.delegate.getColumnByName("id"); + this.CACHE_TYPE_ENUM = this.delegate.getColumnByName("cache_type_enum"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/CConfiguration.java b/src/main/java/com/angkorteam/fintech/meta/CConfiguration.java new file mode 100644 index 00000000..fb246300 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/CConfiguration.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class CConfiguration extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column VALUE; + + public final Column DATE_VALUE; + + public final Column ENABLED; + + public final Column TRAP_DOOR; + + public final Column DESCRIPTION; + + public static CConfiguration staticInitialize(DataContext dataContext) { + return new CConfiguration(dataContext); + } + + private CConfiguration(DataContext dataContext) { + super(dataContext, "c_configuration"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.VALUE = this.delegate.getColumnByName("value"); + this.DATE_VALUE = this.delegate.getColumnByName("date_value"); + this.ENABLED = this.delegate.getColumnByName("enabled"); + this.TRAP_DOOR = this.delegate.getColumnByName("is_trap_door"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/CExternalService.java b/src/main/java/com/angkorteam/fintech/meta/CExternalService.java new file mode 100644 index 00000000..07e38ad7 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/CExternalService.java @@ -0,0 +1,22 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class CExternalService extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public static CExternalService staticInitialize(DataContext dataContext) { + return new CExternalService(dataContext); + } + + private CExternalService(DataContext dataContext) { + super(dataContext, "c_external_service"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/CExternalServiceProperty.java b/src/main/java/com/angkorteam/fintech/meta/CExternalServiceProperty.java new file mode 100644 index 00000000..0c8f0c61 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/CExternalServiceProperty.java @@ -0,0 +1,25 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class CExternalServiceProperty extends AbstractTable { + + public final Column NAME; + + public final Column VALUE; + + public final Column EXTERNAL_SERVICE_ID; + + public static CExternalServiceProperty staticInitialize(DataContext dataContext) { + return new CExternalServiceProperty(dataContext); + } + + private CExternalServiceProperty(DataContext dataContext) { + super(dataContext, "c_external_service_properties"); + this.NAME = this.delegate.getColumnByName("name"); + this.VALUE = this.delegate.getColumnByName("value"); + this.EXTERNAL_SERVICE_ID = this.delegate.getColumnByName("external_service_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/ClientDeviceRegistration.java b/src/main/java/com/angkorteam/fintech/meta/ClientDeviceRegistration.java new file mode 100644 index 00000000..6d98b793 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/ClientDeviceRegistration.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class ClientDeviceRegistration extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column UPDATED_ON_DATE; + + public final Column REGISTRATION_ID; + + public static ClientDeviceRegistration staticInitialize(DataContext dataContext) { + return new ClientDeviceRegistration(dataContext); + } + + private ClientDeviceRegistration(DataContext dataContext) { + super(dataContext, "client_device_registration"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.UPDATED_ON_DATE = this.delegate.getColumnByName("updatedon_date"); + this.REGISTRATION_ID = this.delegate.getColumnByName("registration_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/GlimAccount.java b/src/main/java/com/angkorteam/fintech/meta/GlimAccount.java new file mode 100644 index 00000000..cacea969 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/GlimAccount.java @@ -0,0 +1,40 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class GlimAccount extends AbstractTable { + + public final Column ID; + + public final Column GROUP_ID; + + public final Column ACCOUNT_NUMBER; + + public final Column PRINCIPAL_AMOUNT; + + public final Column CHILD_ACCOUNT_COUNT; + + public final Column ACCEPTING_CHILD; + + public final Column LOAN_STATUS_ID; + + public final Column APPLICATION_ID; + + public static GlimAccount staticInitialize(DataContext dataContext) { + return new GlimAccount(dataContext); + } + + private GlimAccount(DataContext dataContext) { + super(dataContext, "glim_accounts"); + this.ID = this.delegate.getColumnByName("id"); + this.GROUP_ID = this.delegate.getColumnByName("group_id"); + this.ACCOUNT_NUMBER = this.delegate.getColumnByName("account_number"); + this.PRINCIPAL_AMOUNT = this.delegate.getColumnByName("principal_amount"); + this.CHILD_ACCOUNT_COUNT = this.delegate.getColumnByName("child_accounts_count"); + this.ACCEPTING_CHILD = this.delegate.getColumnByName("accepting_child"); + this.LOAN_STATUS_ID = this.delegate.getColumnByName("loan_status_id"); + this.APPLICATION_ID = this.delegate.getColumnByName("application_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/GsimAccount.java b/src/main/java/com/angkorteam/fintech/meta/GsimAccount.java new file mode 100644 index 00000000..389520bb --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/GsimAccount.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.*; + +import java.util.Collection; +import java.util.List; + +public class GsimAccount extends AbstractTable { + + public final Column ID; + + public final Column GROUP_ID; + + public final Column ACCOUNT_NUMBER; + + public final Column PARENT_DEPOSIT; + + public final Column CHILD_ACCOUNT_COUNT; + + public final Column ACCEPTING_CHILD; + + public final Column SAVING_STATUS_ID; + + public final Column APPLICATION_ID; + + public static GsimAccount staticInitialize(DataContext dataContext) { + return new GsimAccount(dataContext); + } + + private GsimAccount(DataContext dataContext) { + super(dataContext, "gsim_accounts"); + this.ID = this.delegate.getColumnByName("id"); + this.GROUP_ID = this.delegate.getColumnByName("group_id"); + this.ACCOUNT_NUMBER = this.delegate.getColumnByName("account_number"); + this.CHILD_ACCOUNT_COUNT = this.delegate.getColumnByName("child_accounts_count"); + this.ACCEPTING_CHILD = this.delegate.getColumnByName("accepting_child"); + this.APPLICATION_ID = this.delegate.getColumnByName("application_id"); + this.PARENT_DEPOSIT = this.delegate.getColumnByName("parent_deposit"); + this.SAVING_STATUS_ID = this.delegate.getColumnByName("savings_status_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/InteropIdentifier.java b/src/main/java/com/angkorteam/fintech/meta/InteropIdentifier.java new file mode 100644 index 00000000..867285a6 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/InteropIdentifier.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class InteropIdentifier extends AbstractTable { + + public final Column ID; + + public final Column ACCOUNT_ID; + + public final Column TYPE; + + public final Column A_VALUE; + + public final Column SUB_VALUE_OR_TYPE; + + public final Column CREATED_BY; + + public final Column CREATED_ON; + + public final Column MODIFIED_BY; + + public final Column MODIFIED_ON; + + public static InteropIdentifier staticInitialize(DataContext dataContext) { + return new InteropIdentifier(dataContext); + } + + private InteropIdentifier(DataContext dataContext) { + super(dataContext, "interop_identifier"); + this.ID = this.delegate.getColumnByName("id"); + this.ACCOUNT_ID = this.delegate.getColumnByName("account_id"); + this.TYPE = this.delegate.getColumnByName("type"); + this.A_VALUE = this.delegate.getColumnByName("a_value"); + this.SUB_VALUE_OR_TYPE = this.delegate.getColumnByName("sub_value_or_type"); + this.CREATED_BY = this.delegate.getColumnByName("created_by"); + this.CREATED_ON = this.delegate.getColumnByName("created_on"); + this.MODIFIED_BY = this.delegate.getColumnByName("modified_by"); + this.MODIFIED_ON = this.delegate.getColumnByName("modified_on"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/Job.java b/src/main/java/com/angkorteam/fintech/meta/Job.java new file mode 100644 index 00000000..13f85b98 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/Job.java @@ -0,0 +1,64 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class Job extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column DISPLAY_NAME; + + public final Column CRON_EXPRESSION; + + public final Column CREATE_TIME; + + public final Column TASK_PRIORITY; + + public final Column GROUP_NAME; + + public final Column PREVIOUS_RUN_START_TIME; + + public final Column NEXT_RUN_TIME; + + public final Column JOB_KEY; + + public final Column INITIALIZING_ERROR_LOG; + + public final Column ACTIVE; + + public final Column CURRENTLY_RUNNING; + + public final Column UPDATE_ALLOWED; + + public final Column SCHEDULER_GROUP; + + public final Column MISFIRED; + + public static Job staticInitialize(DataContext dataContext) { + return new Job(dataContext); + } + + private Job(DataContext dataContext) { + super(dataContext, "job"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.DISPLAY_NAME = this.delegate.getColumnByName("display_name"); + this.CRON_EXPRESSION = this.delegate.getColumnByName("cron_expression"); + this.CREATE_TIME = this.delegate.getColumnByName("create_time"); + this.TASK_PRIORITY = this.delegate.getColumnByName("task_priority"); + this.GROUP_NAME = this.delegate.getColumnByName("group_name"); + this.PREVIOUS_RUN_START_TIME = this.delegate.getColumnByName("previous_run_start_time"); + this.NEXT_RUN_TIME = this.delegate.getColumnByName("next_run_time"); + this.JOB_KEY = this.delegate.getColumnByName("job_key"); + this.INITIALIZING_ERROR_LOG = this.delegate.getColumnByName("initializing_errorlog"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + this.CURRENTLY_RUNNING = this.delegate.getColumnByName("currently_running"); + this.UPDATE_ALLOWED = this.delegate.getColumnByName("updates_allowed"); + this.SCHEDULER_GROUP = this.delegate.getColumnByName("scheduler_group"); + this.MISFIRED = this.delegate.getColumnByName("is_misfired"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/JobParameter.java b/src/main/java/com/angkorteam/fintech/meta/JobParameter.java new file mode 100644 index 00000000..089b6cc1 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/JobParameter.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class JobParameter extends AbstractTable { + + public final Column ID; + + public final Column JOB_ID; + + public final Column PARAMETER_NAME; + + public final Column PARAMETER_VALUE; + + public static JobParameter staticInitialize(DataContext dataContext) { + return new JobParameter(dataContext); + } + + private JobParameter(DataContext dataContext) { + super(dataContext, "job_parameters"); + this.ID = this.delegate.getColumnByName("id"); + this.JOB_ID = this.delegate.getColumnByName("job_id"); + this.PARAMETER_NAME = this.delegate.getColumnByName("parameter_name"); + this.PARAMETER_VALUE = this.delegate.getColumnByName("parameter_value"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/JobRunHistory.java b/src/main/java/com/angkorteam/fintech/meta/JobRunHistory.java new file mode 100644 index 00000000..b5cb010d --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/JobRunHistory.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class JobRunHistory extends AbstractTable { + + public final Column ID; + + public final Column JOB_ID; + + public final Column VERSION; + + public final Column START_TIME; + + public final Column END_TIME; + + public final Column STATUS; + + public final Column ERROR_MESSAGE; + + public final Column TRIGGER_TYPE; + + public final Column ERROR_LOG; + + public static JobRunHistory staticInitialize(DataContext dataContext) { + return new JobRunHistory(dataContext); + } + + private JobRunHistory(DataContext dataContext) { + super(dataContext, "job_run_history"); + this.ID = this.delegate.getColumnByName("id"); + this.JOB_ID = this.delegate.getColumnByName("job_id"); + this.VERSION = this.delegate.getColumnByName("version"); + this.START_TIME = this.delegate.getColumnByName("start_time"); + this.END_TIME = this.delegate.getColumnByName("end_time"); + this.STATUS = this.delegate.getColumnByName("status"); + this.ERROR_MESSAGE = this.delegate.getColumnByName("error_message"); + this.TRIGGER_TYPE = this.delegate.getColumnByName("trigger_type"); + this.ERROR_LOG = this.delegate.getColumnByName("error_log"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAccountTransferDetail.java b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferDetail.java new file mode 100644 index 00000000..8731a83e --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferDetail.java @@ -0,0 +1,46 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAccountTransferDetail extends AbstractTable { + + public final Column ID; + + public final Column FROM_OFFICE_ID; + + public final Column TO_OFFICE_ID; + + public final Column FROM_CLIENT_ID; + + public final Column TO_CLIENT_ID; + + public final Column FROM_SAVING_ACCOUNT_ID; + + public final Column TO_SAVING_ACCOUNT_ID; + + public final Column FROM_LOAN_ACCOUNT_ID; + + public final Column TO_LOAN_ACCOUNT_ID; + + public final Column TRANSFER_TYPE; + + public static MAccountTransferDetail staticInitialize(DataContext dataContext) { + return new MAccountTransferDetail(dataContext); + } + + private MAccountTransferDetail(DataContext dataContext) { + super(dataContext, "m_account_transfer_details"); + this.ID = this.delegate.getColumnByName("id"); + this.FROM_OFFICE_ID = this.delegate.getColumnByName("from_office_id"); + this.TO_OFFICE_ID = this.delegate.getColumnByName("to_office_id"); + this.FROM_CLIENT_ID = this.delegate.getColumnByName("from_client_id"); + this.TO_CLIENT_ID = this.delegate.getColumnByName("to_client_id"); + this.FROM_SAVING_ACCOUNT_ID = this.delegate.getColumnByName("from_savings_account_id"); + this.TO_SAVING_ACCOUNT_ID = this.delegate.getColumnByName("to_savings_account_id"); + this.FROM_LOAN_ACCOUNT_ID = this.delegate.getColumnByName("from_loan_account_id"); + this.TO_LOAN_ACCOUNT_ID = this.delegate.getColumnByName("to_loan_account_id"); + this.TRANSFER_TYPE = this.delegate.getColumnByName("transfer_type"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstruction.java b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstruction.java new file mode 100644 index 00000000..a259aeb2 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstruction.java @@ -0,0 +1,61 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAccountTransferStandingInstruction extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column ACCOUNT_TRANSFER_DETAIL_ID; + + public final Column PRIORITY; + + public final Column STATUS; + + public final Column INSTRUCTION_TYPE; + + public final Column AMOUNT; + + public final Column VALID_FROM; + + public final Column VALID_TILL; + + public final Column RECURRENCE_TYPE; + + public final Column RECURRENCE_FREQUENCY; + + public final Column RECURRENCE_INTERVAL; + + public final Column RECURRENCE_ON_DAY; + + public final Column RECURRENCE_ON_MONTH; + + public final Column LAST_RUN_DATE; + + public static MAccountTransferStandingInstruction staticInitialize(DataContext dataContext) { + return new MAccountTransferStandingInstruction(dataContext); + } + + private MAccountTransferStandingInstruction(DataContext dataContext) { + super(dataContext, "m_account_transfer_standing_instructions"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.ACCOUNT_TRANSFER_DETAIL_ID = this.delegate.getColumnByName("account_transfer_details_id"); + this.PRIORITY = this.delegate.getColumnByName("priority"); + this.STATUS = this.delegate.getColumnByName("status"); + this.INSTRUCTION_TYPE = this.delegate.getColumnByName("instruction_type"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.VALID_FROM = this.delegate.getColumnByName("valid_from"); + this.VALID_TILL = this.delegate.getColumnByName("valid_till"); + this.RECURRENCE_TYPE = this.delegate.getColumnByName("recurrence_type"); + this.RECURRENCE_FREQUENCY = this.delegate.getColumnByName("recurrence_frequency"); + this.RECURRENCE_INTERVAL = this.delegate.getColumnByName("recurrence_interval"); + this.RECURRENCE_ON_DAY = this.delegate.getColumnByName("recurrence_on_day"); + this.RECURRENCE_ON_MONTH = this.delegate.getColumnByName("recurrence_on_month"); + this.LAST_RUN_DATE = this.delegate.getColumnByName("last_run_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstructionHistory.java b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstructionHistory.java new file mode 100644 index 00000000..dcd9e54c --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferStandingInstructionHistory.java @@ -0,0 +1,34 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAccountTransferStandingInstructionHistory extends AbstractTable { + + public final Column ID; + + public final Column STATUS; + + public final Column AMOUNT; + + public final Column STANDING_INSTRUCTION_ID; + + public final Column EXECUTION_TIME; + + public final Column ERROR_LOG; + + public static MAccountTransferStandingInstructionHistory staticInitialize(DataContext dataContext) { + return new MAccountTransferStandingInstructionHistory(dataContext); + } + + private MAccountTransferStandingInstructionHistory(DataContext dataContext) { + super(dataContext, "m_account_transfer_standing_instructions_history"); + this.ID = this.delegate.getColumnByName("id"); + this.STATUS = this.delegate.getColumnByName("status"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.STANDING_INSTRUCTION_ID = this.delegate.getColumnByName("standing_instruction_id"); + this.EXECUTION_TIME = this.delegate.getColumnByName("execution_time"); + this.ERROR_LOG = this.delegate.getColumnByName("error_log"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAccountTransferTransaction.java b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferTransaction.java new file mode 100644 index 00000000..43af6666 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAccountTransferTransaction.java @@ -0,0 +1,55 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAccountTransferTransaction extends AbstractTable { + + public final Column ID; + + public final Column ACCOUNT_TRANSFER_DETAIL_ID; + + public final Column FROM_SAVING_TRANSACTION_ID; + + public final Column FROM_LOAN_TRANSACTION_ID; + + public final Column TO_SAVING_TRANSACTION_ID; + + public final Column TO_LOAN_TRANSACTION_ID; + + public final Column REVERSED; + + public final Column TRANSACTION_DATE; + + public final Column CURRENCY_CODE; + + public final Column CURRENCY_DIGIT; + + public final Column CURRENCY_MULTIPLE_OF; + + public final Column AMOUNT; + + public final Column DESCRIPTION; + + public static MAccountTransferTransaction staticInitialize(DataContext dataContext) { + return new MAccountTransferTransaction(dataContext); + } + + private MAccountTransferTransaction(DataContext dataContext) { + super(dataContext, "m_account_transfer_transaction"); + this.ID = this.delegate.getColumnByName("id"); + this.ACCOUNT_TRANSFER_DETAIL_ID = this.delegate.getColumnByName("account_transfer_details_id"); + this.FROM_SAVING_TRANSACTION_ID = this.delegate.getColumnByName("from_savings_transaction_id"); + this.FROM_LOAN_TRANSACTION_ID = this.delegate.getColumnByName("from_loan_transaction_id"); + this.TO_SAVING_TRANSACTION_ID = this.delegate.getColumnByName("to_savings_transaction_id"); + this.TO_LOAN_TRANSACTION_ID = this.delegate.getColumnByName("to_loan_transaction_id"); + this.REVERSED = this.delegate.getColumnByName("is_reversed"); + this.TRANSACTION_DATE = this.delegate.getColumnByName("transaction_date"); + this.CURRENCY_CODE = this.delegate.getColumnByName("currency_code"); + this.CURRENCY_DIGIT = this.delegate.getColumnByName("currency_digits"); + this.CURRENCY_MULTIPLE_OF = this.delegate.getColumnByName("currency_multiplesof"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAddress.java b/src/main/java/com/angkorteam/fintech/meta/MAddress.java new file mode 100644 index 00000000..f80ea1e6 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAddress.java @@ -0,0 +1,67 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAddress extends AbstractTable { + + public final Column ID; + + public final Column STREET; + + public final Column ADDRESS_LINE_1; + + public final Column ADDRESS_LINE_2; + + public final Column ADDRESS_LINE_3; + + public final Column TOWN_VILLAGE; + + public final Column CITY; + + public final Column COUNTY_DISTRICT; + + public final Column STATE_PROVINCE_ID; + + public final Column COUNTRY_ID; + + public final Column POSTAL_CODE; + + public final Column LATITUDE; + + public final Column LONGITUDE; + + public final Column CREATED_BY; + + public final Column CREATED_ON; + + public final Column UPDATED_BY; + + public final Column UPDATED_ON; + + public static MAddress staticInitialize(DataContext dataContext) { + return new MAddress(dataContext); + } + + private MAddress(DataContext dataContext) { + super(dataContext, "m_address"); + this.ID = this.delegate.getColumnByName("id"); + this.STREET = this.delegate.getColumnByName("street"); + this.ADDRESS_LINE_1 = this.delegate.getColumnByName("address_line_1"); + this.ADDRESS_LINE_2 = this.delegate.getColumnByName("address_line_2"); + this.ADDRESS_LINE_3 = this.delegate.getColumnByName("address_line_3"); + this.TOWN_VILLAGE = this.delegate.getColumnByName("town_village"); + this.CITY = this.delegate.getColumnByName("city"); + this.COUNTY_DISTRICT = this.delegate.getColumnByName("county_district"); + this.STATE_PROVINCE_ID = this.delegate.getColumnByName("state_province_id"); + this.COUNTRY_ID = this.delegate.getColumnByName("country_id"); + this.POSTAL_CODE = this.delegate.getColumnByName("postal_code"); + this.LATITUDE = this.delegate.getColumnByName("latitude"); + this.LONGITUDE = this.delegate.getColumnByName("longitude"); + this.CREATED_BY = this.delegate.getColumnByName("created_by"); + this.CREATED_ON = this.delegate.getColumnByName("created_on"); + this.UPDATED_BY = this.delegate.getColumnByName("updated_by"); + this.UPDATED_ON = this.delegate.getColumnByName("updated_on"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAdhoc.java b/src/main/java/com/angkorteam/fintech/meta/MAdhoc.java new file mode 100644 index 00000000..c773c03c --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAdhoc.java @@ -0,0 +1,58 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAdhoc extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column QUERY; + + public final Column TABLE_NAME; + + public final Column TABLE_FIELD; + + public final Column EMAIL; + + public final Column ACTIVE; + + public final Column CREATED_DATE; + + public final Column CREATED_BY_ID; + + public final Column LAST_MODIFIED_BY_ID; + + public final Column LAST_MODIFIED_DATE; + + public final Column REPORT_RUN_FREQUENCY_CODE; + + public final Column REPORT_RUN_EVERY; + + public final Column LAST_RUN; + + public static MAdhoc staticInitialize(DataContext dataContext) { + return new MAdhoc(dataContext); + } + + private MAdhoc(DataContext dataContext) { + super(dataContext, "m_adhoc"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.QUERY = this.delegate.getColumnByName("query"); + this.TABLE_NAME = this.delegate.getColumnByName("table_name"); + this.TABLE_FIELD = this.delegate.getColumnByName("table_fields"); + this.EMAIL = this.delegate.getColumnByName("email"); + this.ACTIVE = this.delegate.getColumnByName("IsActive"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.CREATED_BY_ID = this.delegate.getColumnByName("createdby_id"); + this.LAST_MODIFIED_BY_ID = this.delegate.getColumnByName("lastmodifiedby_id"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + this.REPORT_RUN_FREQUENCY_CODE = this.delegate.getColumnByName("report_run_frequency_code"); + this.REPORT_RUN_EVERY = this.delegate.getColumnByName("report_run_every"); + this.LAST_RUN = this.delegate.getColumnByName("last_run"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAppUser.java b/src/main/java/com/angkorteam/fintech/meta/MAppUser.java new file mode 100644 index 00000000..1808b9d0 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAppUser.java @@ -0,0 +1,67 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAppUser extends AbstractTable { + + public final Column ID; + + public final Column DELETED; + + public final Column OFFICE_ID; + + public final Column STAFF_ID; + + public final Column USERNAME; + + public final Column FIRST_NAME; + + public final Column LAST_NAME; + + public final Column PASSWORD; + + public final Column EMAIL; + + public final Column FIRST_TIME_LOGIN_REMAINING; + + public final Column NON_EXPIRED; + + public final Column NON_LOCKED; + + public final Column NON_EXPIRED_CREDENTIAL; + + public final Column ENABLED; + + public final Column LAST_TIME_PASSWORD_UPDATED; + + public final Column PASSWORD_NEVER_EXPIRED; + + public final Column SELF_SERVICE_USER; + + public static MAppUser staticInitialize(DataContext dataContext) { + return new MAppUser(dataContext); + } + + private MAppUser(DataContext dataContext) { + super(dataContext, "m_appuser"); + this.ID = this.delegate.getColumnByName("id"); + this.DELETED = this.delegate.getColumnByName("is_deleted"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + this.STAFF_ID = this.delegate.getColumnByName("staff_id"); + this.USERNAME = this.delegate.getColumnByName("username"); + this.FIRST_NAME = this.delegate.getColumnByName("firstname"); + this.LAST_NAME = this.delegate.getColumnByName("lastname"); + this.PASSWORD = this.delegate.getColumnByName("password"); + this.EMAIL = this.delegate.getColumnByName("email"); + this.FIRST_TIME_LOGIN_REMAINING = this.delegate.getColumnByName("firsttime_login_remaining"); + this.NON_EXPIRED = this.delegate.getColumnByName("nonexpired"); + this.NON_LOCKED = this.delegate.getColumnByName("nonlocked"); + this.NON_EXPIRED_CREDENTIAL = this.delegate.getColumnByName("nonexpired_credentials"); + this.ENABLED = this.delegate.getColumnByName("enabled"); + this.LAST_TIME_PASSWORD_UPDATED = this.delegate.getColumnByName("last_time_password_updated"); + this.PASSWORD_NEVER_EXPIRED = this.delegate.getColumnByName("password_never_expires"); + this.SELF_SERVICE_USER = this.delegate.getColumnByName("is_self_service_user"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAppUserPreviousPassword.java b/src/main/java/com/angkorteam/fintech/meta/MAppUserPreviousPassword.java new file mode 100644 index 00000000..67cce8f7 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAppUserPreviousPassword.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MAppUserPreviousPassword extends AbstractTable { + + public final Column ID; + + public final Column USER_ID; + + public final Column PASSWORD; + + public final Column REMOVAL_DATE; + + public static MAppUserPreviousPassword staticInitialize(DataContext dataContext) { + return new MAppUserPreviousPassword(dataContext); + } + + private MAppUserPreviousPassword(DataContext dataContext) { + super(dataContext, "m_appuser_previous_password"); + this.ID = this.delegate.getColumnByName("id"); + this.USER_ID = this.delegate.getColumnByName("user_id"); + this.PASSWORD = this.delegate.getColumnByName("password"); + this.REMOVAL_DATE = this.delegate.getColumnByName("removal_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MAppUserRole.java b/src/main/java/com/angkorteam/fintech/meta/MAppUserRole.java new file mode 100644 index 00000000..8b6aef6a --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MAppUserRole.java @@ -0,0 +1,25 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.*; + +import java.util.Collection; +import java.util.List; + +public class MAppUserRole extends AbstractTable { + + public final Column APP_USER_ID; + + public final Column ROLE_ID; + + public static MAppUserRole staticInitialize(DataContext dataContext) { + return new MAppUserRole(dataContext); + } + + private MAppUserRole(DataContext dataContext) { + super(dataContext, "m_appuser_role"); + this.APP_USER_ID = this.delegate.getColumnByName("appuser_id"); + this.ROLE_ID = this.delegate.getColumnByName("role_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCalendar.java b/src/main/java/com/angkorteam/fintech/meta/MCalendar.java new file mode 100644 index 00000000..c3df23d6 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCalendar.java @@ -0,0 +1,70 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCalendar extends AbstractTable { + + public final Column ID; + + public final Column TITLE; + + public final Column DESCRIPTION; + + public final Column LOCATION; + + public final Column START_DATE; + + public final Column END_DATE; + + public final Column DURATION; + + public final Column CALENDAR_TYPE_ENUM; + + public final Column REPEATING; + + public final Column RECURRENCE; + + public final Column REMIND_BY_ENUM; + + public final Column FIRST_REMINDER; + + public final Column SECOND_REMINDER; + + public final Column CREATED_BY_ID; + + public final Column LAST_MODIFIED_BY_ID; + + public final Column CREATED_DATE; + + public final Column LAST_MODIFIED_DATE; + + public final Column MEETING_TIME; + + public static MCalendar staticInitialize(DataContext dataContext) { + return new MCalendar(dataContext); + } + + private MCalendar(DataContext dataContext) { + super(dataContext, "m_calendar"); + this.ID = this.delegate.getColumnByName("id"); + this.TITLE = this.delegate.getColumnByName("title"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.LOCATION = this.delegate.getColumnByName("location"); + this.START_DATE = this.delegate.getColumnByName("start_date"); + this.END_DATE = this.delegate.getColumnByName("end_date"); + this.DURATION = this.delegate.getColumnByName("duration"); + this.CALENDAR_TYPE_ENUM = this.delegate.getColumnByName("calendar_type_enum"); + this.REPEATING = this.delegate.getColumnByName("repeating"); + this.RECURRENCE = this.delegate.getColumnByName("recurrence"); + this.REMIND_BY_ENUM = this.delegate.getColumnByName("remind_by_enum"); + this.FIRST_REMINDER = this.delegate.getColumnByName("first_reminder"); + this.SECOND_REMINDER = this.delegate.getColumnByName("second_reminder"); + this.CREATED_BY_ID = this.delegate.getColumnByName("createdby_id"); + this.LAST_MODIFIED_BY_ID = this.delegate.getColumnByName("lastmodifiedby_id"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + this.MEETING_TIME = this.delegate.getColumnByName("meeting_time"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCalendarHistory.java b/src/main/java/com/angkorteam/fintech/meta/MCalendarHistory.java new file mode 100644 index 00000000..a2a42049 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCalendarHistory.java @@ -0,0 +1,58 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCalendarHistory extends AbstractTable { + + public final Column ID; + + public final Column CALENDAR_ID; + + public final Column TITLE; + + public final Column DESCRIPTION; + + public final Column LOCATION; + + public final Column START_DATE; + + public final Column END_DATE; + + public final Column DURATION; + + public final Column CALENDAR_TYPE_ENUM; + + public final Column REPEATING; + + public final Column RECURRENCE; + + public final Column REMIND_BY_ENUM; + + public final Column FIRST_REMINDER; + + public final Column SECOND_REMINDER; + + public static MCalendarHistory staticInitialize(DataContext dataContext) { + return new MCalendarHistory(dataContext); + } + + private MCalendarHistory(DataContext dataContext) { + super(dataContext, "m_calendar_history"); + this.ID = this.delegate.getColumnByName("id"); + this.CALENDAR_ID = this.delegate.getColumnByName("calendar_id"); + this.TITLE = this.delegate.getColumnByName("title"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.LOCATION = this.delegate.getColumnByName("location"); + this.START_DATE = this.delegate.getColumnByName("start_date"); + this.END_DATE = this.delegate.getColumnByName("end_date"); + this.DURATION = this.delegate.getColumnByName("duration"); + this.CALENDAR_TYPE_ENUM = this.delegate.getColumnByName("calendar_type_enum"); + this.REPEATING = this.delegate.getColumnByName("repeating"); + this.RECURRENCE = this.delegate.getColumnByName("recurrence"); + this.REMIND_BY_ENUM = this.delegate.getColumnByName("remind_by_enum"); + this.FIRST_REMINDER = this.delegate.getColumnByName("first_reminder"); + this.SECOND_REMINDER = this.delegate.getColumnByName("second_reminder"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCalendarInstance.java b/src/main/java/com/angkorteam/fintech/meta/MCalendarInstance.java new file mode 100644 index 00000000..f7523b57 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCalendarInstance.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCalendarInstance extends AbstractTable { + + public final Column ID; + + public final Column CALENDAR_ID; + + public final Column ENTITY_ID; + + public final Column ENTITY_TYPE_ENUM; + + public static MCalendarInstance staticInitialize(DataContext dataContext) { + return new MCalendarInstance(dataContext); + } + + private MCalendarInstance(DataContext dataContext) { + super(dataContext, "m_calendar_instance"); + this.ID = this.delegate.getColumnByName("id"); + this.CALENDAR_ID = this.delegate.getColumnByName("calendar_id"); + this.ENTITY_ID = this.delegate.getColumnByName("entity_id"); + this.ENTITY_TYPE_ENUM = this.delegate.getColumnByName("entity_type_enum"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCashier.java b/src/main/java/com/angkorteam/fintech/meta/MCashier.java new file mode 100644 index 00000000..91c89900 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCashier.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCashier extends AbstractTable { + + public final Column ID; + + public final Column STAFF_ID; + + public final Column TELLER_ID; + + public final Column DESCRIPTION; + + public final Column START_DATE; + + public final Column END_DATE; + + public final Column START_TIME; + + public final Column END_TIME; + + public final Column FULL_DAY; + + public static MCashier staticInitialize(DataContext dataContext) { + return new MCashier(dataContext); + } + + private MCashier(DataContext dataContext) { + super(dataContext, "m_cashiers"); + this.ID = this.delegate.getColumnByName("id"); + this.STAFF_ID = this.delegate.getColumnByName("staff_id"); + this.TELLER_ID = this.delegate.getColumnByName("teller_id"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.START_DATE = this.delegate.getColumnByName("start_date"); + this.END_DATE = this.delegate.getColumnByName("end_date"); + this.START_TIME = this.delegate.getColumnByName("start_time"); + this.END_TIME = this.delegate.getColumnByName("end_time"); + this.FULL_DAY = this.delegate.getColumnByName("full_day"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCashierTransaction.java b/src/main/java/com/angkorteam/fintech/meta/MCashierTransaction.java new file mode 100644 index 00000000..2e55d346 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCashierTransaction.java @@ -0,0 +1,46 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCashierTransaction extends AbstractTable { + + public final Column ID; + + public final Column CASHIER_ID; + + public final Column TXN_TYPE; + + public final Column TXN_AMOUNT; + + public final Column TXN_DATE; + + public final Column CREATED_DATE; + + public final Column ENTITY_TYPE; + + public final Column TXN_NOTE; + + public final Column CURRENCY_CODE; + + public final Column ENTITY_ID; + + public static MCashierTransaction staticInitialize(DataContext dataContext) { + return new MCashierTransaction(dataContext); + } + + private MCashierTransaction(DataContext dataContext) { + super(dataContext, "m_cashier_transactions"); + this.ID = this.delegate.getColumnByName("id"); + this.ENTITY_ID = this.delegate.getColumnByName("entity_id"); + this.CASHIER_ID = this.delegate.getColumnByName("cashier_id"); + this.TXN_TYPE = this.delegate.getColumnByName("txn_type"); + this.TXN_AMOUNT = this.delegate.getColumnByName("txn_amount"); + this.TXN_DATE = this.delegate.getColumnByName("txn_date"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.ENTITY_TYPE = this.delegate.getColumnByName("entity_type"); + this.TXN_NOTE = this.delegate.getColumnByName("txn_note"); + this.CURRENCY_CODE = this.delegate.getColumnByName("currency_code"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCharge.java b/src/main/java/com/angkorteam/fintech/meta/MCharge.java new file mode 100644 index 00000000..18124425 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCharge.java @@ -0,0 +1,73 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCharge extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column CURRENCY_CODE; + + public final Column CHARGE_APPLY_TO_ENUM; + + public final Column CHARGE_TIME_ENUM; + + public final Column CHARGE_CALCULATION_ENUM; + + public final Column CHARGE_PAYMENT_MODE_ENUM; + + public final Column AMOUNT; + + public final Column FEE_ON_DAY; + + public final Column FEE_INTERVAL; + + public final Column FEE_ON_MONTH; + + public final Column PENALTY; + + public final Column ACTIVE; + + public final Column DELETED; + + public final Column MIN_CAP; + + public final Column MAX_CAP; + + public final Column FEE_FREQUENCY; + + public final Column INCOME_OR_LIABILITY_ACCOUNT_ID; + + public final Column TAX_GROUP_ID; + + public static MCharge staticInitialize(DataContext dataContext) { + return new MCharge(dataContext); + } + + private MCharge(DataContext dataContext) { + super(dataContext, "m_charge"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.CURRENCY_CODE = this.delegate.getColumnByName("currency_code"); + this.CHARGE_APPLY_TO_ENUM = this.delegate.getColumnByName("charge_applies_to_enum"); + this.CHARGE_TIME_ENUM = this.delegate.getColumnByName("charge_time_enum"); + this.CHARGE_CALCULATION_ENUM = this.delegate.getColumnByName("charge_calculation_enum"); + this.CHARGE_PAYMENT_MODE_ENUM = this.delegate.getColumnByName("charge_payment_mode_enum"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.FEE_ON_DAY = this.delegate.getColumnByName("fee_on_day"); + this.FEE_INTERVAL = this.delegate.getColumnByName("fee_interval"); + this.FEE_ON_MONTH = this.delegate.getColumnByName("fee_on_month"); + this.PENALTY = this.delegate.getColumnByName("is_penalty"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + this.DELETED = this.delegate.getColumnByName("is_deleted"); + this.MIN_CAP = this.delegate.getColumnByName("min_cap"); + this.MAX_CAP = this.delegate.getColumnByName("max_cap"); + this.FEE_FREQUENCY = this.delegate.getColumnByName("fee_frequency"); + this.INCOME_OR_LIABILITY_ACCOUNT_ID = this.delegate.getColumnByName("income_or_liability_account_id"); + this.TAX_GROUP_ID = this.delegate.getColumnByName("tax_group_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClient.java b/src/main/java/com/angkorteam/fintech/meta/MClient.java new file mode 100644 index 00000000..00168db3 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClient.java @@ -0,0 +1,154 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.*; + +import java.util.Collection; +import java.util.List; + +public class MClient extends AbstractTable { + + public final Column ID; + + public final Column ACCOUNT_NO; + + public final Column EXTERNAL_ID; + + public final Column STATUS_ENUM; + + public final Column SUB_STATUS; + + public final Column ACTIVATION_DATE; + + public final Column OFFICE_JOINING_DATE; + + public final Column OFFICE_ID; + + public final Column TRANSFER_TO_OFFICE_ID; + + public final Column STAFF_ID; + + public final Column FIRST_NAME; + + public final Column MIDDLE_NAME; + + public final Column LAST_NAME; + + public final Column FULL_NAME; + + public final Column DISPLAY_NAME; + + public final Column MOBILE_NO; + + public final Column STAFF; + + public final Column GENDER_CV_ID; + + public final Column DATE_OF_BIRTH; + + public final Column IMAGE_ID; + + public final Column CLOSURE_REASON_CV_ID; + + public final Column CLOSED_ON_DATE; + + public final Column UPDATED_BY; + + public final Column UPDATED_ON; + + public final Column SUBMITTED_ON_DATE; + + public final Column SUBMITTED_ON_USER_ID; + + public final Column ACTIVATED_ON_USER_ID; + + public final Column CLOSED_ON_USER_ID; + + public final Column DEFAULT_SAVING_PRODUCT; + + public final Column DEFAULT_SAVING_ACCOUNT; + + public final Column CLIENT_TYPE_CV_ID; + + public final Column CLIENT_CLASSIFICATION_CV_ID; + + public final Column REJECT_REASON_CV_ID; + + public final Column REJECTED_ON_DATE; + + public final Column REJECTED_ON_USER_ID; + + public final Column WITHDRAW_REASON_CV_ID; + + public final Column WITHDRAWN_ON_DATE; + + public final Column WITHDRAW_ON_USER_ID; + + public final Column RE_ACTIVATED_ON_DATE; + + public final Column RE_ACTIVATED_ON_USER_ID; + + public final Column legal_form_enum; + + public final Column RE_OPENED_ON_DATE; + + public final Column RE_OPENED_BY_USER_ID; + + public final Column EMAIL_ADDRESS; + + public final Column PROPOSED_TRANSFER_DATE; + + public static MClient staticInitialize(DataContext dataContext) { + return new MClient(dataContext); + } + + private MClient(DataContext dataContext) { + super(dataContext, "m_client"); + this.ID = this.delegate.getColumnByName("id"); + this.ACCOUNT_NO = this.delegate.getColumnByName("account_no"); + this.EXTERNAL_ID = this.delegate.getColumnByName("external_id"); + this.STATUS_ENUM = this.delegate.getColumnByName("status_enum"); + this.SUB_STATUS = this.delegate.getColumnByName("sub_status"); + this.ACTIVATION_DATE = this.delegate.getColumnByName("activation_date"); + this.OFFICE_JOINING_DATE = this.delegate.getColumnByName("office_joining_date"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + this.TRANSFER_TO_OFFICE_ID = this.delegate.getColumnByName("transfer_to_office_id"); + this.STAFF_ID = this.delegate.getColumnByName("staff_id"); + this.FIRST_NAME = this.delegate.getColumnByName("firstname"); + this.MIDDLE_NAME = this.delegate.getColumnByName("middlename"); + this.LAST_NAME = this.delegate.getColumnByName("lastname"); + this.FULL_NAME = this.delegate.getColumnByName("fullname"); + this.DISPLAY_NAME = this.delegate.getColumnByName("display_name"); + this.MOBILE_NO = this.delegate.getColumnByName("mobile_no"); + this.STAFF = this.delegate.getColumnByName("is_staff"); + this.GENDER_CV_ID = this.delegate.getColumnByName("gender_cv_id"); + this.DATE_OF_BIRTH = this.delegate.getColumnByName("date_of_birth"); + this.IMAGE_ID = this.delegate.getColumnByName("image_id"); + this.CLOSURE_REASON_CV_ID = this.delegate.getColumnByName("closure_reason_cv_id"); + this.CLOSED_ON_DATE = this.delegate.getColumnByName("closedon_date"); + this.UPDATED_BY = this.delegate.getColumnByName("updated_by"); + this.UPDATED_ON = this.delegate.getColumnByName("updated_on"); + this.SUBMITTED_ON_DATE = this.delegate.getColumnByName("submittedon_date"); + this.SUBMITTED_ON_USER_ID = this.delegate.getColumnByName("submittedon_userid"); + this.ACTIVATED_ON_USER_ID = this.delegate.getColumnByName("activatedon_userid"); + this.CLOSED_ON_USER_ID = this.delegate.getColumnByName("closedon_userid"); + this.DEFAULT_SAVING_PRODUCT = this.delegate.getColumnByName("default_savings_product"); + this.DEFAULT_SAVING_ACCOUNT = this.delegate.getColumnByName("default_savings_account"); + this.CLIENT_TYPE_CV_ID = this.delegate.getColumnByName("client_type_cv_id"); + this.CLIENT_CLASSIFICATION_CV_ID = this.delegate.getColumnByName("client_classification_cv_id"); + this.REJECT_REASON_CV_ID = this.delegate.getColumnByName("reject_reason_cv_id"); + this.REJECTED_ON_DATE = this.delegate.getColumnByName("rejectedon_date"); + this.REJECTED_ON_USER_ID = this.delegate.getColumnByName("rejectedon_userid"); + this.WITHDRAW_REASON_CV_ID = this.delegate.getColumnByName("withdraw_reason_cv_id"); + this.WITHDRAWN_ON_DATE = this.delegate.getColumnByName("withdrawn_on_date"); + this.WITHDRAW_ON_USER_ID = this.delegate.getColumnByName("withdraw_on_userid"); + this.RE_ACTIVATED_ON_DATE = this.delegate.getColumnByName("reactivated_on_date"); + this.RE_ACTIVATED_ON_USER_ID = this.delegate.getColumnByName("reactivated_on_userid"); + this.legal_form_enum = this.delegate.getColumnByName("legal_form_enum"); + this.RE_OPENED_ON_DATE = this.delegate.getColumnByName("reopened_on_date"); + this.RE_OPENED_BY_USER_ID = this.delegate.getColumnByName("reopened_by_userid"); + this.EMAIL_ADDRESS = this.delegate.getColumnByName("email_address"); + this.PROPOSED_TRANSFER_DATE = this.delegate.getColumnByName("proposed_transfer_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientAddress.java b/src/main/java/com/angkorteam/fintech/meta/MClientAddress.java new file mode 100644 index 00000000..63a72c16 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientAddress.java @@ -0,0 +1,34 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.*; + +import java.util.Collection; +import java.util.List; + +public class MClientAddress extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column ADDRESS_ID; + + public final Column ADDRESS_TYPE_ID; + + public final Column ACTIVE; + + public static MClientAddress staticInitialize(DataContext dataContext) { + return new MClientAddress(dataContext); + } + + private MClientAddress(DataContext dataContext) { + super(dataContext, "m_client_address"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.ADDRESS_ID = this.delegate.getColumnByName("address_id"); + this.ADDRESS_TYPE_ID = this.delegate.getColumnByName("address_type_id"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientAttendance.java b/src/main/java/com/angkorteam/fintech/meta/MClientAttendance.java new file mode 100644 index 00000000..0c5e1f46 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientAttendance.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MClientAttendance extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column MEETING_ID; + + public final Column ATTENDANCE_TYPE_ENUM; + + public static MClientAttendance staticInitialize(DataContext dataContext) { + return new MClientAttendance(dataContext); + } + + private MClientAttendance(DataContext dataContext) { + super(dataContext, "m_client_attendance"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.MEETING_ID = this.delegate.getColumnByName("meeting_id"); + this.ATTENDANCE_TYPE_ENUM = this.delegate.getColumnByName("attendance_type_enum"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientCharge.java b/src/main/java/com/angkorteam/fintech/meta/MClientCharge.java new file mode 100644 index 00000000..02a92971 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientCharge.java @@ -0,0 +1,64 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MClientCharge extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column CHARGE_ID; + + public final Column PENALTY; + + public final Column CHARGE_TIME_ENUM; + + public final Column CHARGE_DUE_DATE; + + public final Column CHARGE_CALCULATION_ENUM; + + public final Column AMOUNT; + + public final Column AMOUNT_PAID_DERIVED; + + public final Column AMOUNT_WAIVED_DERIVED; + + public final Column AMOUNT_WRITTEN_OFF_DERIVED; + + public final Column AMOUNT_OUTSTANDING_DERIVED; + + public final Column PAID_DERIVED; + + public final Column WAIVED; + + public final Column ACTIVE; + + public final Column IN_ACTIVATED_ON_DATE; + + public static MClientCharge staticInitialize(DataContext dataContext) { + return new MClientCharge(dataContext); + } + + private MClientCharge(DataContext dataContext) { + super(dataContext, "m_client_charge"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.CHARGE_ID = this.delegate.getColumnByName("charge_id"); + this.PENALTY = this.delegate.getColumnByName("is_penalty"); + this.CHARGE_TIME_ENUM = this.delegate.getColumnByName("charge_time_enum"); + this.CHARGE_DUE_DATE = this.delegate.getColumnByName("charge_due_date"); + this.CHARGE_CALCULATION_ENUM = this.delegate.getColumnByName("charge_calculation_enum"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.AMOUNT_PAID_DERIVED = this.delegate.getColumnByName("amount_paid_derived"); + this.AMOUNT_WAIVED_DERIVED = this.delegate.getColumnByName("amount_waived_derived"); + this.AMOUNT_WRITTEN_OFF_DERIVED = this.delegate.getColumnByName("amount_writtenoff_derived"); + this.AMOUNT_OUTSTANDING_DERIVED = this.delegate.getColumnByName("amount_outstanding_derived"); + this.PAID_DERIVED = this.delegate.getColumnByName("is_paid_derived"); + this.WAIVED = this.delegate.getColumnByName("waived"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + this.IN_ACTIVATED_ON_DATE = this.delegate.getColumnByName("inactivated_on_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientChargePaidBy.java b/src/main/java/com/angkorteam/fintech/meta/MClientChargePaidBy.java new file mode 100644 index 00000000..8d2ccd06 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientChargePaidBy.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MClientChargePaidBy extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_TRANSACTION_ID; + + public final Column CLIENT_CHARGE_ID; + + public final Column AMOUNT; + + public static MClientChargePaidBy staticInitialize(DataContext dataContext) { + return new MClientChargePaidBy(dataContext); + } + + private MClientChargePaidBy(DataContext dataContext) { + super(dataContext, "m_client_charge_paid_by"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_TRANSACTION_ID = this.delegate.getColumnByName("client_transaction_id"); + this.CLIENT_CHARGE_ID = this.delegate.getColumnByName("client_charge_id"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientIdentifier.java b/src/main/java/com/angkorteam/fintech/meta/MClientIdentifier.java new file mode 100644 index 00000000..e6c01249 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientIdentifier.java @@ -0,0 +1,49 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MClientIdentifier extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column DOCUMENT_TYPE_ID; + + public final Column DOCUMENT_KEY; + + public final Column STATUS; + + public final Column ACTIVE; + + public final Column DESCRIPTION; + + public final Column CREATED_BY_ID; + + public final Column LAST_MODIFIED_BY_ID; + + public final Column CREATED_DATE; + + public final Column LAST_MODIFIED_DATE; + + public static MClientIdentifier staticInitialize(DataContext dataContext) { + return new MClientIdentifier(dataContext); + } + + private MClientIdentifier(DataContext dataContext) { + super(dataContext, "m_client_identifier"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.DOCUMENT_TYPE_ID = this.delegate.getColumnByName("document_type_id"); + this.DOCUMENT_KEY = this.delegate.getColumnByName("document_key"); + this.STATUS = this.delegate.getColumnByName("status"); + this.ACTIVE = this.delegate.getColumnByName("active"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.CREATED_BY_ID = this.delegate.getColumnByName("createdby_id"); + this.LAST_MODIFIED_BY_ID = this.delegate.getColumnByName("lastmodifiedby_id"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientNonPerson.java b/src/main/java/com/angkorteam/fintech/meta/MClientNonPerson.java new file mode 100644 index 00000000..1ac58964 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientNonPerson.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MClientNonPerson extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column CONSTITUTION_CV_ID; + + public final Column IN_CORP_NO; + + public final Column IN_CORP_VALIDITY_TILL; + + public final Column MAIN_BUSINESS_LINE_CV_ID; + + public final Column REMARK; + + public static MClientNonPerson staticInitialize(DataContext dataContext) { + return new MClientNonPerson(dataContext); + } + + private MClientNonPerson(DataContext dataContext) { + super(dataContext, "m_client_non_person"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.CONSTITUTION_CV_ID = this.delegate.getColumnByName("constitution_cv_id"); + this.IN_CORP_NO = this.delegate.getColumnByName("incorp_no"); + this.IN_CORP_VALIDITY_TILL = this.delegate.getColumnByName("incorp_validity_till"); + this.MAIN_BUSINESS_LINE_CV_ID = this.delegate.getColumnByName("main_business_line_cv_id"); + this.REMARK = this.delegate.getColumnByName("remarks"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientTransaction.java b/src/main/java/com/angkorteam/fintech/meta/MClientTransaction.java new file mode 100644 index 00000000..2bdd0de2 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientTransaction.java @@ -0,0 +1,52 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MClientTransaction extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column OFFICE_ID; + + public final Column CURRENCY_CODE; + + public final Column PAYMENT_DETAIL_ID; + + public final Column REVERSED; + + public final Column EXTERNAL_ID; + + public final Column TRANSACTION_DATE; + + public final Column TRANSACTION_TYPE_ENUM; + + public final Column AMOUNT; + + public final Column CREATED_DATE; + + public final Column APP_USER_ID; + + public static MClientTransaction staticInitialize(DataContext dataContext) { + return new MClientTransaction(dataContext); + } + + private MClientTransaction(DataContext dataContext) { + super(dataContext, "m_client_transaction"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + this.CURRENCY_CODE = this.delegate.getColumnByName("currency_code"); + this.PAYMENT_DETAIL_ID = this.delegate.getColumnByName("payment_detail_id"); + this.REVERSED = this.delegate.getColumnByName("is_reversed"); + this.EXTERNAL_ID = this.delegate.getColumnByName("external_id"); + this.TRANSACTION_DATE = this.delegate.getColumnByName("transaction_date"); + this.TRANSACTION_TYPE_ENUM = this.delegate.getColumnByName("transaction_type_enum"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.APP_USER_ID = this.delegate.getColumnByName("appuser_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MClientTransferDetail.java b/src/main/java/com/angkorteam/fintech/meta/MClientTransferDetail.java new file mode 100644 index 00000000..02bb0ff7 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MClientTransferDetail.java @@ -0,0 +1,40 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MClientTransferDetail extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column FROM_OFFICE_ID; + + public final Column TO_OFFICE_ID; + + public final Column PROPOSED_TRANSFER_DATE; + + public final Column TRANSFER_TYPE; + + public final Column SUBMITTED_ON; + + public final Column SUBMITTED_BY; + + public static MClientTransferDetail staticInitialize(DataContext dataContext) { + return new MClientTransferDetail(dataContext); + } + + private MClientTransferDetail(DataContext dataContext) { + super(dataContext, "m_client_transfer_details"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.FROM_OFFICE_ID = this.delegate.getColumnByName("from_office_id"); + this.TO_OFFICE_ID = this.delegate.getColumnByName("to_office_id"); + this.PROPOSED_TRANSFER_DATE = this.delegate.getColumnByName("proposed_transfer_date"); + this.TRANSFER_TYPE = this.delegate.getColumnByName("transfer_type"); + this.SUBMITTED_ON = this.delegate.getColumnByName("submitted_on"); + this.SUBMITTED_BY = this.delegate.getColumnByName("submitted_by"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCode.java b/src/main/java/com/angkorteam/fintech/meta/MCode.java new file mode 100644 index 00000000..f9b79f0c --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCode.java @@ -0,0 +1,25 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCode extends AbstractTable { + + public final Column ID; + + public final Column CODE_NAME; + + public final Column SYSTEM_DEFINED; + + public static MCode staticInitialize(DataContext dataContext) { + return new MCode(dataContext); + } + + private MCode(DataContext dataContext) { + super(dataContext, "m_code"); + this.ID = this.delegate.getColumnByName("id"); + this.CODE_NAME = this.delegate.getColumnByName("code_name"); + this.SYSTEM_DEFINED = this.delegate.getColumnByName("is_system_defined"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCodeValue.java b/src/main/java/com/angkorteam/fintech/meta/MCodeValue.java new file mode 100644 index 00000000..7c243bdf --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCodeValue.java @@ -0,0 +1,40 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCodeValue extends AbstractTable { + + public final Column ID; + + public final Column CODE_ID; + + public final Column CODE_VALUE; + + public final Column CODE_DESCRIPTION; + + public final Column ORDER_POSITION; + + public final Column CODE_SCORE; + + public final Column ACTIVE; + + public final Column MANDATORY; + + public static MCodeValue staticInitialize(DataContext dataContext) { + return new MCodeValue(dataContext); + } + + private MCodeValue(DataContext dataContext) { + super(dataContext, "m_code_value"); + this.ID = this.delegate.getColumnByName("id"); + this.CODE_ID = this.delegate.getColumnByName("code_id"); + this.CODE_VALUE = this.delegate.getColumnByName("code_value"); + this.CODE_DESCRIPTION = this.delegate.getColumnByName("code_description"); + this.ORDER_POSITION = this.delegate.getColumnByName("order_position"); + this.CODE_SCORE = this.delegate.getColumnByName("code_score"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + this.MANDATORY = this.delegate.getColumnByName("is_mandatory"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCreditBureau.java b/src/main/java/com/angkorteam/fintech/meta/MCreditBureau.java new file mode 100644 index 00000000..15c025f9 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCreditBureau.java @@ -0,0 +1,31 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCreditBureau extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column PRODUCT; + + public final Column COUNTRY; + + public final Column IMPLEMENTATION_KEY; + + public static MCreditBureau staticInitialize(DataContext dataContext) { + return new MCreditBureau(dataContext); + } + + private MCreditBureau(DataContext dataContext) { + super(dataContext, "m_creditbureau"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.PRODUCT = this.delegate.getColumnByName("product"); + this.COUNTRY = this.delegate.getColumnByName("country"); + this.IMPLEMENTATION_KEY = this.delegate.getColumnByName("implementationKey"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCreditBureauConfiguration.java b/src/main/java/com/angkorteam/fintech/meta/MCreditBureauConfiguration.java new file mode 100644 index 00000000..fc4d9f46 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCreditBureauConfiguration.java @@ -0,0 +1,31 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCreditBureauConfiguration extends AbstractTable { + + public final Column ID; + + public final Column CONFIG_KEY; + + public final Column VALUE; + + public final Column ORGANISATION_CREDIT_BUREAU_ID; + + public final Column DESCRIPTION; + + public static MCreditBureauConfiguration staticInitialize(DataContext dataContext) { + return new MCreditBureauConfiguration(dataContext); + } + + private MCreditBureauConfiguration(DataContext dataContext) { + super(dataContext, "m_creditbureau_configuration"); + this.ID = this.delegate.getColumnByName("id"); + this.CONFIG_KEY = this.delegate.getColumnByName("configkey"); + this.VALUE = this.delegate.getColumnByName("value"); + this.ORGANISATION_CREDIT_BUREAU_ID = this.delegate.getColumnByName("organisation_creditbureau_id"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCreditBureauLoanProductMapping.java b/src/main/java/com/angkorteam/fintech/meta/MCreditBureauLoanProductMapping.java new file mode 100644 index 00000000..b9346453 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCreditBureauLoanProductMapping.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCreditBureauLoanProductMapping extends AbstractTable { + + public final Column ID; + + public final Column ORGANISATION_CREDIT_BUREAU_ID; + + public final Column LOAN_PRODUCT_ID; + + public final Column CREDIT_CHECK_MANDATORY; + + public final Column SKIP_CREDIT_CHECK_IN_FAILURE; + + public final Column STALE_PERIOD; + + public final Column ACTIVE; + + public static MCreditBureauLoanProductMapping staticInitialize(DataContext dataContext) { + return new MCreditBureauLoanProductMapping(dataContext); + } + + private MCreditBureauLoanProductMapping(DataContext dataContext) { + super(dataContext, "m_creditbureau_loanproduct_mapping"); + this.ID = this.delegate.getColumnByName("id"); + this.ORGANISATION_CREDIT_BUREAU_ID = this.delegate.getColumnByName("organisation_creditbureau_id"); + this.LOAN_PRODUCT_ID = this.delegate.getColumnByName("loan_product_id"); + this.CREDIT_CHECK_MANDATORY = this.delegate.getColumnByName("is_creditcheck_mandatory"); + this.SKIP_CREDIT_CHECK_IN_FAILURE = this.delegate.getColumnByName("skip_creditcheck_in_failure"); + this.STALE_PERIOD = this.delegate.getColumnByName("stale_period"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MCurrency.java b/src/main/java/com/angkorteam/fintech/meta/MCurrency.java new file mode 100644 index 00000000..526c13de --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MCurrency.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MCurrency extends AbstractTable { + + public final Column ID; + + public final Column CODE; + + public final Column DECIMAL_PLACE; + + public final Column CURRENCY_MULTIPLE_OF; + + public final Column DISPLAY_SYMBOL; + + public final Column NAME; + + public final Column INTERNATIONALIZED_NAME_CODE; + + public static MCurrency staticInitialize(DataContext dataContext) { + return new MCurrency(dataContext); + } + + private MCurrency(DataContext dataContext) { + super(dataContext, "m_currency"); + this.ID = this.delegate.getColumnByName("id"); + this.CODE = this.delegate.getColumnByName("code"); + this.DECIMAL_PLACE = this.delegate.getColumnByName("decimal_places"); + this.CURRENCY_MULTIPLE_OF = this.delegate.getColumnByName("currency_multiplesof"); + this.DISPLAY_SYMBOL = this.delegate.getColumnByName("display_symbol"); + this.NAME = this.delegate.getColumnByName("name"); + this.INTERNATIONALIZED_NAME_CODE = this.delegate.getColumnByName("internationalized_name_code"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MDepositAccountOnHoldTransaction.java b/src/main/java/com/angkorteam/fintech/meta/MDepositAccountOnHoldTransaction.java new file mode 100644 index 00000000..68008510 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MDepositAccountOnHoldTransaction.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MDepositAccountOnHoldTransaction extends AbstractTable { + + public final Column ID; + + public final Column SAVING_ACCOUNT_ID; + + public final Column AMOUNT; + + public final Column TRANSACTION_TYPE_ENUM; + + public final Column TRANSACTION_DATE; + + public final Column REVERSED; + + public final Column CREATED_DATE; + + public static MDepositAccountOnHoldTransaction staticInitialize(DataContext dataContext) { + return new MDepositAccountOnHoldTransaction(dataContext); + } + + private MDepositAccountOnHoldTransaction(DataContext dataContext) { + super(dataContext, "m_deposit_account_on_hold_transaction"); + this.ID = this.delegate.getColumnByName("id"); + this.SAVING_ACCOUNT_ID = this.delegate.getColumnByName("savings_account_id"); + this.AMOUNT = this.delegate.getColumnByName("amount"); + this.TRANSACTION_TYPE_ENUM = this.delegate.getColumnByName("transaction_type_enum"); + this.TRANSACTION_DATE = this.delegate.getColumnByName("transaction_date"); + this.REVERSED = this.delegate.getColumnByName("is_reversed"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MDepositAccountRecurringDetail.java b/src/main/java/com/angkorteam/fintech/meta/MDepositAccountRecurringDetail.java new file mode 100644 index 00000000..d7b58a9e --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MDepositAccountRecurringDetail.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MDepositAccountRecurringDetail extends AbstractTable { + + public final Column ID; + + public final Column SAVING_ACCOUNT_ID; + + public final Column MANDATORY_RECOMMENDED_DEPOSIT_AMOUNT; + + public final Column MANDATORY; + + public final Column ALLOW_WITHDRAWAL; + + public final Column ADJUST_ADVANCE_TOWARD_FUTURE_PAYMENT; + + public final Column CALENDAR_INHERITED; + + public final Column TOTAL_OVERDUE_AMOUNT; + + public final Column NO_OF_OVERDUE_INSTALLMENT; + + public static MDepositAccountRecurringDetail staticInitialize(DataContext dataContext) { + return new MDepositAccountRecurringDetail(dataContext); + } + + private MDepositAccountRecurringDetail(DataContext dataContext) { + super(dataContext, "m_deposit_account_recurring_detail"); + this.ID = this.delegate.getColumnByName("id"); + this.SAVING_ACCOUNT_ID = this.delegate.getColumnByName("savings_account_id"); + this.MANDATORY_RECOMMENDED_DEPOSIT_AMOUNT = this.delegate.getColumnByName("mandatory_recommended_deposit_amount"); + this.MANDATORY = this.delegate.getColumnByName("is_mandatory"); + this.ALLOW_WITHDRAWAL = this.delegate.getColumnByName("allow_withdrawal"); + this.ADJUST_ADVANCE_TOWARD_FUTURE_PAYMENT = this.delegate.getColumnByName("adjust_advance_towards_future_payments"); + this.CALENDAR_INHERITED = this.delegate.getColumnByName("is_calendar_inherited"); + this.TOTAL_OVERDUE_AMOUNT = this.delegate.getColumnByName("total_overdue_amount"); + this.NO_OF_OVERDUE_INSTALLMENT = this.delegate.getColumnByName("no_of_overdue_installments"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MDepositAccountTermAndPreClosure.java b/src/main/java/com/angkorteam/fintech/meta/MDepositAccountTermAndPreClosure.java new file mode 100644 index 00000000..90f5f6c7 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MDepositAccountTermAndPreClosure.java @@ -0,0 +1,76 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MDepositAccountTermAndPreClosure extends AbstractTable { + + public final Column ID; + + public final Column SAVING_ACCOUNT_ID; + + public final Column MIN_DEPOSIT_TERM; + + public final Column MAX_DEPOSIT_TERM; + + public final Column MIN_DEPOSIT_TERM_TYPE_ENUM; + + public final Column MAX_DEPOSIT_TERM_TYPE_ENUM; + + public final Column IN_MULTIPLE_OF_DEPOSIT_TERM; + + public final Column IN_MULTIPLE_OF_DEPOSIT_TERM_TYPE_ENUM; + + public final Column PRE_CLOSURE_PENAL_APPLICABLE; + + public final Column PRE_CLOSURE_PENAL_INTEREST; + + public final Column PRE_CLOSURE_PENAL_INTEREST_ON_ENUM; + + public final Column DEPOSIT_PERIOD; + + public final Column DEPOSIT_PERIOD_FREQUENCY_ENUM; + + public final Column DEPOSIT_AMOUNT; + + public final Column MATURITY_AMOUNT; + + public final Column MATURITY_DATE; + + public final Column ON_ACCOUNT_CLOSURE_ENUM; + + public final Column EXPECTED_FIRST_DEPOSITON_DATE; + + public final Column TRANSFER_INTEREST_TO_LINKED_ACCOUNT; + + public final Column TRANSFER_TO_SAVING_ACCOUNT_ID; + + public static MDepositAccountTermAndPreClosure staticInitialize(DataContext dataContext) { + return new MDepositAccountTermAndPreClosure(dataContext); + } + + private MDepositAccountTermAndPreClosure(DataContext dataContext) { + super(dataContext, "m_deposit_account_term_and_preclosure"); + this.ID = this.delegate.getColumnByName("id"); + this.SAVING_ACCOUNT_ID = this.delegate.getColumnByName("savings_account_id"); + this.MIN_DEPOSIT_TERM = this.delegate.getColumnByName("min_deposit_term"); + this.MAX_DEPOSIT_TERM = this.delegate.getColumnByName("max_deposit_term"); + this.MIN_DEPOSIT_TERM_TYPE_ENUM = this.delegate.getColumnByName("min_deposit_term_type_enum"); + this.MAX_DEPOSIT_TERM_TYPE_ENUM = this.delegate.getColumnByName("max_deposit_term_type_enum"); + this.IN_MULTIPLE_OF_DEPOSIT_TERM = this.delegate.getColumnByName("in_multiples_of_deposit_term"); + this.IN_MULTIPLE_OF_DEPOSIT_TERM_TYPE_ENUM = this.delegate.getColumnByName("in_multiples_of_deposit_term_type_enum"); + this.PRE_CLOSURE_PENAL_APPLICABLE = this.delegate.getColumnByName("pre_closure_penal_applicable"); + this.PRE_CLOSURE_PENAL_INTEREST = this.delegate.getColumnByName("pre_closure_penal_interest"); + this.PRE_CLOSURE_PENAL_INTEREST_ON_ENUM = this.delegate.getColumnByName("pre_closure_penal_interest_on_enum"); + this.DEPOSIT_PERIOD = this.delegate.getColumnByName("deposit_period"); + this.DEPOSIT_PERIOD_FREQUENCY_ENUM = this.delegate.getColumnByName("deposit_period_frequency_enum"); + this.DEPOSIT_AMOUNT = this.delegate.getColumnByName("deposit_amount"); + this.MATURITY_AMOUNT = this.delegate.getColumnByName("maturity_amount"); + this.MATURITY_DATE = this.delegate.getColumnByName("maturity_date"); + this.ON_ACCOUNT_CLOSURE_ENUM = this.delegate.getColumnByName("on_account_closure_enum"); + this.EXPECTED_FIRST_DEPOSITON_DATE = this.delegate.getColumnByName("expected_firstdepositon_date"); + this.TRANSFER_INTEREST_TO_LINKED_ACCOUNT = this.delegate.getColumnByName("transfer_interest_to_linked_account"); + this.TRANSFER_TO_SAVING_ACCOUNT_ID = this.delegate.getColumnByName("transfer_to_savings_account_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MDepositProductInterestRateChart.java b/src/main/java/com/angkorteam/fintech/meta/MDepositProductInterestRateChart.java new file mode 100644 index 00000000..da2422eb --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MDepositProductInterestRateChart.java @@ -0,0 +1,22 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MDepositProductInterestRateChart extends AbstractTable { + + public final Column DEPOSIT_PRODUCT_ID; + + public final Column INTEREST_RATE_CHART_ID; + + public static MDepositProductInterestRateChart staticInitialize(DataContext dataContext) { + return new MDepositProductInterestRateChart(dataContext); + } + + private MDepositProductInterestRateChart(DataContext dataContext) { + super(dataContext, "m_deposit_product_interest_rate_chart"); + this.DEPOSIT_PRODUCT_ID = this.delegate.getColumnByName("deposit_product_id"); + this.INTEREST_RATE_CHART_ID = this.delegate.getColumnByName("interest_rate_chart_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MDepositProductRecurringDetail.java b/src/main/java/com/angkorteam/fintech/meta/MDepositProductRecurringDetail.java new file mode 100644 index 00000000..08deabe6 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MDepositProductRecurringDetail.java @@ -0,0 +1,31 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MDepositProductRecurringDetail extends AbstractTable { + + public final Column ID; + + public final Column SAVING_PRODUCT_ID; + + public final Column MANDATORY; + + public final Column ALLOW_WITHDRAWAL; + + public final Column ADJUST_ADVANCE_TOWARD_FUTURE_PAYMENT; + + public static MDepositProductRecurringDetail staticInitialize(DataContext dataContext) { + return new MDepositProductRecurringDetail(dataContext); + } + + private MDepositProductRecurringDetail(DataContext dataContext) { + super(dataContext, "m_deposit_product_recurring_detail"); + this.ID = this.delegate.getColumnByName("id"); + this.SAVING_PRODUCT_ID = this.delegate.getColumnByName("savings_product_id"); + this.MANDATORY = this.delegate.getColumnByName("is_mandatory"); + this.ALLOW_WITHDRAWAL = this.delegate.getColumnByName("allow_withdrawal"); + this.ADJUST_ADVANCE_TOWARD_FUTURE_PAYMENT = this.delegate.getColumnByName("adjust_advance_towards_future_payments"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MDepositProductTermAndPreClosure.java b/src/main/java/com/angkorteam/fintech/meta/MDepositProductTermAndPreClosure.java new file mode 100644 index 00000000..15da2769 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MDepositProductTermAndPreClosure.java @@ -0,0 +1,58 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MDepositProductTermAndPreClosure extends AbstractTable { + + public final Column ID; + + public final Column SAVING_PRODUCT_ID; + + public final Column MIN_DEPOSIT_TERM; + + public final Column MAX_DEPOSIT_TERM; + + public final Column MIN_DEPOSIT_TERM_TYPE_ENUM; + + public final Column MAX_DEPOSIT_TERM_TYPE_ENUM; + + public final Column IN_MULTIPLE_OF_DEPOSIT_TERM; + + public final Column IN_MULTIPLE_OF_DEPOSIT_TERM_TYPE_ENUM; + + public final Column PRE_CLOSURE_PENAL_APPLICABLE; + + public final Column PRE_CLOSURE_PENAL_INTEREST; + + public final Column PRE_CLOSURE_PENAL_INTEREST_ON_ENUM; + + public final Column MIN_DEPOSIT_AMOUNT; + + public final Column MAX_DEPOSIT_AMOUNT; + + public final Column DEPOSIT_AMOUNT; + + public static MDepositProductTermAndPreClosure staticInitialize(DataContext dataContext) { + return new MDepositProductTermAndPreClosure(dataContext); + } + + private MDepositProductTermAndPreClosure(DataContext dataContext) { + super(dataContext, "m_deposit_product_term_and_preclosure"); + this.ID = this.delegate.getColumnByName("id"); + this.SAVING_PRODUCT_ID = this.delegate.getColumnByName("savings_product_id"); + this.MIN_DEPOSIT_TERM = this.delegate.getColumnByName("min_deposit_term"); + this.MAX_DEPOSIT_TERM = this.delegate.getColumnByName("max_deposit_term"); + this.MIN_DEPOSIT_TERM_TYPE_ENUM = this.delegate.getColumnByName("min_deposit_term_type_enum"); + this.MAX_DEPOSIT_TERM_TYPE_ENUM = this.delegate.getColumnByName("max_deposit_term_type_enum"); + this.IN_MULTIPLE_OF_DEPOSIT_TERM = this.delegate.getColumnByName("in_multiples_of_deposit_term"); + this.IN_MULTIPLE_OF_DEPOSIT_TERM_TYPE_ENUM = this.delegate.getColumnByName("in_multiples_of_deposit_term_type_enum"); + this.PRE_CLOSURE_PENAL_APPLICABLE = this.delegate.getColumnByName("pre_closure_penal_applicable"); + this.PRE_CLOSURE_PENAL_INTEREST = this.delegate.getColumnByName("pre_closure_penal_interest"); + this.PRE_CLOSURE_PENAL_INTEREST_ON_ENUM = this.delegate.getColumnByName("pre_closure_penal_interest_on_enum"); + this.MIN_DEPOSIT_AMOUNT = this.delegate.getColumnByName("min_deposit_amount"); + this.MAX_DEPOSIT_AMOUNT = this.delegate.getColumnByName("max_deposit_amount"); + this.DEPOSIT_AMOUNT = this.delegate.getColumnByName("deposit_amount"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MDocument.java b/src/main/java/com/angkorteam/fintech/meta/MDocument.java new file mode 100644 index 00000000..6b34af32 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MDocument.java @@ -0,0 +1,46 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MDocument extends AbstractTable { + + public final Column ID; + + public final Column PARENT_ENTITY_TYPE; + + public final Column PARENT_ENTITY_ID; + + public final Column NAME; + + public final Column FILE_NAME; + + public final Column SIZE; + + public final Column TYPE; + + public final Column DESCRIPTION; + + public final Column LOCATION; + + public final Column STORAGE_TYPE_ENUM; + + public static MDocument staticInitialize(DataContext dataContext) { + return new MDocument(dataContext); + } + + private MDocument(DataContext dataContext) { + super(dataContext, "m_document"); + this.ID = this.delegate.getColumnByName("id"); + this.PARENT_ENTITY_TYPE = this.delegate.getColumnByName("parent_entity_type"); + this.PARENT_ENTITY_ID = this.delegate.getColumnByName("parent_entity_id"); + this.NAME = this.delegate.getColumnByName("name"); + this.FILE_NAME = this.delegate.getColumnByName("file_name"); + this.SIZE = this.delegate.getColumnByName("size"); + this.TYPE = this.delegate.getColumnByName("type"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.LOCATION = this.delegate.getColumnByName("location"); + this.STORAGE_TYPE_ENUM = this.delegate.getColumnByName("storage_type_enum"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MEntityDatatableCheck.java b/src/main/java/com/angkorteam/fintech/meta/MEntityDatatableCheck.java new file mode 100644 index 00000000..f8d1fd1f --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MEntityDatatableCheck.java @@ -0,0 +1,34 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MEntityDatatableCheck extends AbstractTable { + + public final Column ID; + + public final Column APPLICATION_TABLE_NAME; + + public final Column X_REGISTERED_TABLE_NAME; + + public final Column STATUS_ENUM; + + public final Column SYSTEM_DEFINED; + + public final Column PRODUCT_ID; + + public static MEntityDatatableCheck staticInitialize(DataContext dataContext) { + return new MEntityDatatableCheck(dataContext); + } + + private MEntityDatatableCheck(DataContext dataContext) { + super(dataContext, "m_entity_datatable_check"); + this.ID = this.delegate.getColumnByName("id"); + this.APPLICATION_TABLE_NAME = this.delegate.getColumnByName("application_table_name"); + this.X_REGISTERED_TABLE_NAME = this.delegate.getColumnByName("x_registered_table_name"); + this.STATUS_ENUM = this.delegate.getColumnByName("status_enum"); + this.SYSTEM_DEFINED = this.delegate.getColumnByName("system_defined"); + this.PRODUCT_ID = this.delegate.getColumnByName("product_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MEntityRelation.java b/src/main/java/com/angkorteam/fintech/meta/MEntityRelation.java new file mode 100644 index 00000000..80076de0 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MEntityRelation.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MEntityRelation extends AbstractTable { + + public final Column ID; + + public final Column FROM_ENTITY_TYPE; + + public final Column TO_ENTITY_TYPE; + + public final Column CODE_NAME; + + public static MEntityRelation staticInitialize(DataContext dataContext) { + return new MEntityRelation(dataContext); + } + + private MEntityRelation(DataContext dataContext) { + super(dataContext, "m_entity_relation"); + this.ID = this.delegate.getColumnByName("id"); + this.FROM_ENTITY_TYPE = this.delegate.getColumnByName("from_entity_type"); + this.TO_ENTITY_TYPE = this.delegate.getColumnByName("to_entity_type"); + this.CODE_NAME = this.delegate.getColumnByName("code_name"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MEntityToEntityAccess.java b/src/main/java/com/angkorteam/fintech/meta/MEntityToEntityAccess.java new file mode 100644 index 00000000..ee1079e0 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MEntityToEntityAccess.java @@ -0,0 +1,34 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MEntityToEntityAccess extends AbstractTable { + + public final Column ID; + + public final Column ENTITY_TYPE; + + public final Column ENTITY_ID; + + public final Column ACCESS_TYPE_CODE_VALUE_ID; + + public final Column SECOND_ENTITY_TYPE; + + public final Column SECOND_ENTITY_ID; + + public static MEntityToEntityAccess staticInitialize(DataContext dataContext) { + return new MEntityToEntityAccess(dataContext); + } + + private MEntityToEntityAccess(DataContext dataContext) { + super(dataContext, "m_entity_to_entity_access"); + this.ID = this.delegate.getColumnByName("id"); + this.ENTITY_TYPE = this.delegate.getColumnByName("entity_type"); + this.ENTITY_ID = this.delegate.getColumnByName("entity_id"); + this.ACCESS_TYPE_CODE_VALUE_ID = this.delegate.getColumnByName("access_type_code_value_id"); + this.SECOND_ENTITY_TYPE = this.delegate.getColumnByName("second_entity_type"); + this.SECOND_ENTITY_ID = this.delegate.getColumnByName("second_entity_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MEntityToEntityMapping.java b/src/main/java/com/angkorteam/fintech/meta/MEntityToEntityMapping.java new file mode 100644 index 00000000..664eb0b1 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MEntityToEntityMapping.java @@ -0,0 +1,34 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MEntityToEntityMapping extends AbstractTable { + + public final Column ID; + + public final Column REL_ID; + + public final Column FROM_ID; + + public final Column TO_ID; + + public final Column START_DATE; + + public final Column END_DATE; + + public static MEntityToEntityMapping staticInitialize(DataContext dataContext) { + return new MEntityToEntityMapping(dataContext); + } + + private MEntityToEntityMapping(DataContext dataContext) { + super(dataContext, "m_entity_to_entity_mapping"); + this.ID = this.delegate.getColumnByName("id"); + this.REL_ID = this.delegate.getColumnByName("rel_id"); + this.FROM_ID = this.delegate.getColumnByName("from_id"); + this.TO_ID = this.delegate.getColumnByName("to_id"); + this.START_DATE = this.delegate.getColumnByName("start_date"); + this.END_DATE = this.delegate.getColumnByName("end_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MFamilyMember.java b/src/main/java/com/angkorteam/fintech/meta/MFamilyMember.java new file mode 100644 index 00000000..285b35d4 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MFamilyMember.java @@ -0,0 +1,58 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MFamilyMember extends AbstractTable { + + public final Column ID; + + public final Column CLIENT_ID; + + public final Column FIRST_NAME; + + public final Column MIDDLE_NAME; + + public final Column LAST_NAME; + + public final Column QUALIFICATION; + + public final Column RELATIONSHIP_CV_ID; + + public final Column MARITAL_STATUS_CV_ID; + + public final Column GENDER_CV_ID; + + public final Column DATE_OF_BIRTH; + + public final Column AGE; + + public final Column PROFESSION_CV_ID; + + public final Column MOBILE_NUMBER; + + public final Column DEPENDENT; + + public static MFamilyMember staticInitialize(DataContext dataContext) { + return new MFamilyMember(dataContext); + } + + private MFamilyMember(DataContext dataContext) { + super(dataContext, "m_family_members"); + this.ID = this.delegate.getColumnByName("id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + this.FIRST_NAME = this.delegate.getColumnByName("firstname"); + this.MIDDLE_NAME = this.delegate.getColumnByName("middlename"); + this.LAST_NAME = this.delegate.getColumnByName("lastname"); + this.QUALIFICATION = this.delegate.getColumnByName("qualification"); + this.RELATIONSHIP_CV_ID = this.delegate.getColumnByName("relationship_cv_id"); + this.MARITAL_STATUS_CV_ID = this.delegate.getColumnByName("marital_status_cv_id"); + this.GENDER_CV_ID = this.delegate.getColumnByName("gender_cv_id"); + this.DATE_OF_BIRTH = this.delegate.getColumnByName("date_of_birth"); + this.AGE = this.delegate.getColumnByName("age"); + this.PROFESSION_CV_ID = this.delegate.getColumnByName("profession_cv_id"); + this.MOBILE_NUMBER = this.delegate.getColumnByName("mobile_number"); + this.DEPENDENT = this.delegate.getColumnByName("is_dependent"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MFieldConfiguration.java b/src/main/java/com/angkorteam/fintech/meta/MFieldConfiguration.java new file mode 100644 index 00000000..06030fc4 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MFieldConfiguration.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MFieldConfiguration extends AbstractTable { + + public final Column ID; + + public final Column ENTITY; + + public final Column SUB_ENTITY; + + public final Column FIELD; + + public final Column ENABLED; + + public final Column MANDATORY; + + public final Column VALIDATION_REGEX; + + public static MFieldConfiguration staticInitialize(DataContext dataContext) { + return new MFieldConfiguration(dataContext); + } + + private MFieldConfiguration(DataContext dataContext) { + super(dataContext, "m_field_configuration"); + this.ID = this.delegate.getColumnByName("id"); + this.ENTITY = this.delegate.getColumnByName("entity"); + this.SUB_ENTITY = this.delegate.getColumnByName("subentity"); + this.FIELD = this.delegate.getColumnByName("field"); + this.ENABLED = this.delegate.getColumnByName("is_enabled"); + this.MANDATORY = this.delegate.getColumnByName("is_mandatory"); + this.VALIDATION_REGEX = this.delegate.getColumnByName("validation_regex"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MFloatingRate.java b/src/main/java/com/angkorteam/fintech/meta/MFloatingRate.java new file mode 100644 index 00000000..3fca536e --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MFloatingRate.java @@ -0,0 +1,40 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MFloatingRate extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column BASE_LENDING_RATE; + + public final Column ACTIVE; + + public final Column CREATED_BY_ID; + + public final Column CREATED_DATE; + + public final Column LAST_MODIFIED_BY_ID; + + public final Column LAST_MODIFIED_DATE; + + public static MFloatingRate staticInitialize(DataContext dataContext) { + return new MFloatingRate(dataContext); + } + + private MFloatingRate(DataContext dataContext) { + super(dataContext, "m_floating_rates"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.BASE_LENDING_RATE = this.delegate.getColumnByName("is_base_lending_rate"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + this.CREATED_BY_ID = this.delegate.getColumnByName("createdby_id"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.LAST_MODIFIED_BY_ID = this.delegate.getColumnByName("lastmodifiedby_id"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MFloatingRatePeriod.java b/src/main/java/com/angkorteam/fintech/meta/MFloatingRatePeriod.java new file mode 100644 index 00000000..4ec2c285 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MFloatingRatePeriod.java @@ -0,0 +1,46 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MFloatingRatePeriod extends AbstractTable { + + public final Column ID; + + public final Column FLOATING_RATE_ID; + + public final Column FROM_DATE; + + public final Column INTEREST_RATE; + + public final Column DIFFERENTIAL_TO_BASE_LENDING_RATE; + + public final Column ACTIVE; + + public final Column CREATED_BY_ID; + + public final Column CREATED_DATE; + + public final Column LAST_MODIFIED_BY_ID; + + public final Column LAST_MODIFIED_DATE; + + public static MFloatingRatePeriod staticInitialize(DataContext dataContext) { + return new MFloatingRatePeriod(dataContext); + } + + private MFloatingRatePeriod(DataContext dataContext) { + super(dataContext, "m_floating_rates_periods"); + this.ID = this.delegate.getColumnByName("id"); + this.FLOATING_RATE_ID = this.delegate.getColumnByName("floating_rates_id"); + this.FROM_DATE = this.delegate.getColumnByName("from_date"); + this.INTEREST_RATE = this.delegate.getColumnByName("interest_rate"); + this.DIFFERENTIAL_TO_BASE_LENDING_RATE = this.delegate.getColumnByName("is_differential_to_base_lending_rate"); + this.ACTIVE = this.delegate.getColumnByName("is_active"); + this.CREATED_BY_ID = this.delegate.getColumnByName("createdby_id"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.LAST_MODIFIED_BY_ID = this.delegate.getColumnByName("lastmodifiedby_id"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MFund.java b/src/main/java/com/angkorteam/fintech/meta/MFund.java new file mode 100644 index 00000000..90e263e4 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MFund.java @@ -0,0 +1,25 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MFund extends AbstractTable { + + public final Column ID; + + public final Column EXTERNAL_ID; + + public final Column NAME; + + public static MFund staticInitialize(DataContext dataContext) { + return new MFund(dataContext); + } + + private MFund(DataContext dataContext) { + super(dataContext, "m_fund"); + this.ID = this.delegate.getColumnByName("id"); + this.EXTERNAL_ID = this.delegate.getColumnByName("external_id"); + this.NAME = this.delegate.getColumnByName("name"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MGroup.java b/src/main/java/com/angkorteam/fintech/meta/MGroup.java new file mode 100644 index 00000000..9c813a7f --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MGroup.java @@ -0,0 +1,67 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MGroup extends AbstractTable { + + public final Column ID; + + public final Column EXTERNAL_ID; + + public final Column STATUS_ENUM; + + public final Column ACTIVATION_DATE; + + public final Column OFFICE_ID; + + public final Column STAFF_ID; + + public final Column PARENT_ID; + + public final Column LEVEL_ID; + + public final Column DISPLAY_NAME; + + public final Column HIERARCHY; + + public final Column CLOSURE_REASON_CV_ID; + + public final Column CLOSED_ON_DATE; + + public final Column ACTIVATED_ON_USER_ID; + + public final Column SUBMITTED_ON_DATE; + + public final Column SUBMITTED_ON_USER_ID; + + public final Column CLOSED_ON_USER_ID; + + public final Column ACCOUNT_NO; + + public static MGroup staticInitialize(DataContext dataContext) { + return new MGroup(dataContext); + } + + private MGroup(DataContext dataContext) { + super(dataContext, "m_group"); + this.ID = this.delegate.getColumnByName("id"); + this.EXTERNAL_ID = this.delegate.getColumnByName("external_id"); + this.STATUS_ENUM = this.delegate.getColumnByName("status_enum"); + this.ACTIVATION_DATE = this.delegate.getColumnByName("activation_date"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + this.STAFF_ID = this.delegate.getColumnByName("staff_id"); + this.PARENT_ID = this.delegate.getColumnByName("parent_id"); + this.LEVEL_ID = this.delegate.getColumnByName("level_id"); + this.DISPLAY_NAME = this.delegate.getColumnByName("display_name"); + this.HIERARCHY = this.delegate.getColumnByName("hierarchy"); + this.CLOSURE_REASON_CV_ID = this.delegate.getColumnByName("closure_reason_cv_id"); + this.CLOSED_ON_DATE = this.delegate.getColumnByName("closedon_date"); + this.ACTIVATED_ON_USER_ID = this.delegate.getColumnByName("activatedon_userid"); + this.SUBMITTED_ON_DATE = this.delegate.getColumnByName("submittedon_date"); + this.SUBMITTED_ON_USER_ID = this.delegate.getColumnByName("submittedon_userid"); + this.CLOSED_ON_USER_ID = this.delegate.getColumnByName("closedon_userid"); + this.ACCOUNT_NO = this.delegate.getColumnByName("account_no"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MGroupClient.java b/src/main/java/com/angkorteam/fintech/meta/MGroupClient.java new file mode 100644 index 00000000..48c9b769 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MGroupClient.java @@ -0,0 +1,22 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MGroupClient extends AbstractTable { + + public final Column GROUP_ID; + + public final Column CLIENT_ID; + + public static MGroupClient staticInitialize(DataContext dataContext) { + return new MGroupClient(dataContext); + } + + private MGroupClient(DataContext dataContext) { + super(dataContext, "m_group_client"); + this.GROUP_ID = this.delegate.getColumnByName("group_id"); + this.CLIENT_ID = this.delegate.getColumnByName("client_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MHoliday.java b/src/main/java/com/angkorteam/fintech/meta/MHoliday.java new file mode 100644 index 00000000..16618fea --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MHoliday.java @@ -0,0 +1,43 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MHoliday extends AbstractTable { + + public final Column ID; + + public final Column NAME; + + public final Column FROM_DATE; + + public final Column TO_DATE; + + public final Column REPAYMENT_RESCHEDULED_TO; + + public final Column STATUS_ENUM; + + public final Column PROCESSED; + + public final Column DESCRIPTION; + + public final Column RESCHEDULING_TYPE; + + public static MHoliday staticInitialize(DataContext dataContext) { + return new MHoliday(dataContext); + } + + private MHoliday(DataContext dataContext) { + super(dataContext, "m_holiday"); + this.ID = this.delegate.getColumnByName("id"); + this.NAME = this.delegate.getColumnByName("name"); + this.FROM_DATE = this.delegate.getColumnByName("from_date"); + this.TO_DATE = this.delegate.getColumnByName("to_date"); + this.REPAYMENT_RESCHEDULED_TO = this.delegate.getColumnByName("repayments_rescheduled_to"); + this.STATUS_ENUM = this.delegate.getColumnByName("status_enum"); + this.PROCESSED = this.delegate.getColumnByName("processed"); + this.DESCRIPTION = this.delegate.getColumnByName("description"); + this.RESCHEDULING_TYPE = this.delegate.getColumnByName("rescheduling_type"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MHolidayOffice.java b/src/main/java/com/angkorteam/fintech/meta/MHolidayOffice.java new file mode 100644 index 00000000..829131d3 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MHolidayOffice.java @@ -0,0 +1,22 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MHolidayOffice extends AbstractTable { + + public final Column HOLIDAY_ID; + + public final Column OFFICE_ID; + + public static MHolidayOffice staticInitialize(DataContext dataContext) { + return new MHolidayOffice(dataContext); + } + + private MHolidayOffice(DataContext dataContext) { + super(dataContext, "m_holiday_office"); + this.HOLIDAY_ID = this.delegate.getColumnByName("holiday_id"); + this.OFFICE_ID = this.delegate.getColumnByName("office_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MOffice.java b/src/main/java/com/angkorteam/fintech/meta/MOffice.java new file mode 100644 index 00000000..2b03ace6 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MOffice.java @@ -0,0 +1,34 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MOffice extends AbstractTable { + + public final Column ID; + + public final Column PARENT_ID; + + public final Column HIERARCHY; + + public final Column EXTERNAL_ID; + + public final Column NAME; + + public final Column OPENING_DATE; + + public static MOffice staticInitialize(DataContext dataContext) { + return new MOffice(dataContext); + } + + private MOffice(DataContext dataContext) { + super(dataContext, "m_office"); + this.ID = this.delegate.getColumnByName("id"); + this.PARENT_ID = this.delegate.getColumnByName("parent_id"); + this.HIERARCHY = this.delegate.getColumnByName("hierarchy"); + this.EXTERNAL_ID = this.delegate.getColumnByName("external_id"); + this.NAME = this.delegate.getColumnByName("name"); + this.OPENING_DATE = this.delegate.getColumnByName("opening_date"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/MOrganisationCurrency.java b/src/main/java/com/angkorteam/fintech/meta/MOrganisationCurrency.java new file mode 100644 index 00000000..3307474c --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/MOrganisationCurrency.java @@ -0,0 +1,37 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class MOrganisationCurrency extends AbstractTable { + + public final Column ID; + + public final Column CODE; + + public final Column DECIMAL_PLACE; + + public final Column CURRENCY_MULTIPLE_OF; + + public final Column DISPLAY_SYMBOL; + + public final Column NAME; + + public final Column INTERNATIONALIZED_NAME_CODE; + + public static MOrganisationCurrency staticInitialize(DataContext dataContext) { + return new MOrganisationCurrency(dataContext); + } + + private MOrganisationCurrency(DataContext dataContext) { + super(dataContext, "m_organisation_currency"); + this.ID = this.delegate.getColumnByName("id"); + this.CODE = this.delegate.getColumnByName("code"); + this.DECIMAL_PLACE = this.delegate.getColumnByName("decimal_places"); + this.CURRENCY_MULTIPLE_OF = this.delegate.getColumnByName("currency_multiplesof"); + this.DISPLAY_SYMBOL = this.delegate.getColumnByName("display_symbol"); + this.NAME = this.delegate.getColumnByName("name"); + this.INTERNATIONALIZED_NAME_CODE = this.delegate.getColumnByName("internationalized_name_code"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/Tenant.java b/src/main/java/com/angkorteam/fintech/meta/Tenant.java new file mode 100644 index 00000000..f2c01bef --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/Tenant.java @@ -0,0 +1,46 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class Tenant extends AbstractTable { + + public final Column ID; + + public final Column IDENTIFIER; + + public final Column NAME; + + public final Column TIMEZONE_ID; + + public final Column COUNTRY_ID; + + public final Column JOINED_DATE; + + public final Column CREATED_DATE; + + public final Column LAST_MODIFIED_DATE; + + public final Column OLTP_ID; + + public final Column REPORT_ID; + + public static Tenant staticInitialize(DataContext dataContext) { + return new Tenant(dataContext); + } + + private Tenant(DataContext dataContext) { + super(dataContext, "tenants"); + this.ID = this.delegate.getColumnByName("id"); + this.IDENTIFIER = this.delegate.getColumnByName("identifier"); + this.NAME = this.delegate.getColumnByName("name"); + this.TIMEZONE_ID = this.delegate.getColumnByName("timezone_id"); + this.COUNTRY_ID = this.delegate.getColumnByName("country_id"); + this.JOINED_DATE = this.delegate.getColumnByName("joined_date"); + this.CREATED_DATE = this.delegate.getColumnByName("created_date"); + this.LAST_MODIFIED_DATE = this.delegate.getColumnByName("lastmodified_date"); + this.OLTP_ID = this.delegate.getColumnByName("oltp_id"); + this.REPORT_ID = this.delegate.getColumnByName("report_id"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/TenantServerConnection.java b/src/main/java/com/angkorteam/fintech/meta/TenantServerConnection.java new file mode 100644 index 00000000..1a6a5a66 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/TenantServerConnection.java @@ -0,0 +1,82 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class TenantServerConnection extends AbstractTable { + + public final Column ID; + + public final Column SCHEMA_SERVER; + + public final Column SCHEMA_NAME; + + public final Column SCHEMA_SERVER_PORT; + + public final Column SCHEMA_USERNAME; + + public final Column SCHEMA_PASSWORD; + + public final Column AUTO_UPDATE; + + public final Column POOL_INITIAL_SIZE; + + public final Column POOL_VALIDATION_INTERVAL; + + public final Column POOL_REMOVE_ABANDONED; + + public final Column POOL_REMOVE_ABANDONED_TIMEOUT; + + public final Column POOL_LOG_ABANDONED; + + public final Column POOL_ABANDON_WHEN_PERCENTAGE_FULL; + + public final Column POOL_TEST_ON_BORROW; + + public final Column POOL_MAX_ACTIVE; + + public final Column POOL_MIN_IDLE; + + public final Column POOL_MAX_IDLE; + + public final Column POOL_SUSPECT_TIMEOUT; + + public final Column POOL_TIME_BETWEEN_EVICTION_RUNS_MILLIS; + + public final Column POOL_MIN_EVICTABLE_IDLE_TIME_MILLIS; + + public final Column DEADLOCK_MAX_RETRY; + + public final Column DEADLOCK_MAX_RETRY_INTERVAL; + + public static TenantServerConnection staticInitialize(DataContext dataContext) { + return new TenantServerConnection(dataContext); + } + + private TenantServerConnection(DataContext dataContext) { + super(dataContext, "tenant_server_connections"); + this.ID = this.delegate.getColumnByName("id"); + this.SCHEMA_SERVER = this.delegate.getColumnByName("schema_server"); + this.SCHEMA_NAME = this.delegate.getColumnByName("schema_name"); + this.SCHEMA_SERVER_PORT = this.delegate.getColumnByName("schema_server_port"); + this.SCHEMA_USERNAME = this.delegate.getColumnByName("schema_username"); + this.SCHEMA_PASSWORD = this.delegate.getColumnByName("schema_password"); + this.AUTO_UPDATE = this.delegate.getColumnByName("auto_update"); + this.POOL_INITIAL_SIZE = this.delegate.getColumnByName("pool_initial_size"); + this.POOL_VALIDATION_INTERVAL = this.delegate.getColumnByName("pool_validation_interval"); + this.POOL_REMOVE_ABANDONED = this.delegate.getColumnByName("pool_remove_abandoned"); + this.POOL_REMOVE_ABANDONED_TIMEOUT = this.delegate.getColumnByName("pool_remove_abandoned_timeout"); + this.POOL_LOG_ABANDONED = this.delegate.getColumnByName("pool_log_abandoned"); + this.POOL_ABANDON_WHEN_PERCENTAGE_FULL = this.delegate.getColumnByName("pool_abandon_when_percentage_full"); + this.POOL_TEST_ON_BORROW = this.delegate.getColumnByName("pool_test_on_borrow"); + this.POOL_MAX_ACTIVE = this.delegate.getColumnByName("pool_max_active"); + this.POOL_MIN_IDLE = this.delegate.getColumnByName("pool_min_idle"); + this.POOL_MAX_IDLE = this.delegate.getColumnByName("pool_max_idle"); + this.POOL_SUSPECT_TIMEOUT = this.delegate.getColumnByName("pool_suspect_timeout"); + this.POOL_TIME_BETWEEN_EVICTION_RUNS_MILLIS = this.delegate.getColumnByName("pool_time_between_eviction_runs_millis"); + this.POOL_MIN_EVICTABLE_IDLE_TIME_MILLIS = this.delegate.getColumnByName("pool_min_evictable_idle_time_millis"); + this.DEADLOCK_MAX_RETRY = this.delegate.getColumnByName("deadlock_max_retries"); + this.DEADLOCK_MAX_RETRY_INTERVAL = this.delegate.getColumnByName("deadlock_max_retry_interval"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/meta/TimeZone.java b/src/main/java/com/angkorteam/fintech/meta/TimeZone.java new file mode 100644 index 00000000..0f37aa27 --- /dev/null +++ b/src/main/java/com/angkorteam/fintech/meta/TimeZone.java @@ -0,0 +1,28 @@ +package com.angkorteam.fintech.meta; + +import org.apache.metamodel.DataContext; +import org.apache.metamodel.schema.Column; + +public class TimeZone extends AbstractTable { + + public final Column ID; + + public final Column COUNTRY_CODE; + + public final Column TIME_ZONE_NAME; + + public final Column COMMENT; + + public static TimeZone staticInitialize(DataContext dataContext) { + return new TimeZone(dataContext); + } + + private TimeZone(DataContext dataContext) { + super(dataContext, "timezones"); + this.ID = this.delegate.getColumnByName("id"); + this.COUNTRY_CODE = this.delegate.getColumnByName("country_code"); + this.TIME_ZONE_NAME = this.delegate.getColumnByName("timezonename"); + this.COMMENT = this.delegate.getColumnByName("comments"); + } + +} diff --git a/src/main/java/com/angkorteam/fintech/pages/AccountingPage.java b/src/main/java/com/angkorteam/fintech/pages/AccountingPage.java index 36cbe27b..48e75c5d 100644 --- a/src/main/java/com/angkorteam/fintech/pages/AccountingPage.java +++ b/src/main/java/com/angkorteam/fintech/pages/AccountingPage.java @@ -1,84 +1,65 @@ package com.angkorteam.fintech.pages; -import java.util.List; - +import com.angkorteam.fintech.MasterPage; +import com.angkorteam.fintech.dto.Function; +import org.apache.wicket.MarkupContainer; import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; -import com.angkorteam.fintech.Page; -import com.angkorteam.fintech.dto.Function; -import com.angkorteam.fintech.pages.account.AccountBrowsePage; -import com.angkorteam.fintech.pages.account.AccrualAccountingPage; -import com.angkorteam.fintech.pages.account.ClosureBrowsePage; -import com.angkorteam.fintech.pages.account.FinancialActivityBrowsePage; -import com.angkorteam.fintech.pages.account.JournalPostPage; -import com.angkorteam.fintech.pages.account.RuleBrowsePage; -import com.angkorteam.fintech.pages.account.RuleSelectPage; -import com.angkorteam.fintech.pages.account.SearchJournalPage; -import com.angkorteam.framework.BackgroundColor; -import com.angkorteam.framework.Emoji; -import com.angkorteam.framework.models.InfoBox; -import com.angkorteam.framework.models.PageBreadcrumb; -import com.angkorteam.framework.panels.InfoBoxPanel; -import com.google.common.collect.Lists; - -/** - * Created by socheatkhauv on 6/27/17. - */ @AuthorizeInstantiation(Function.ALL_FUNCTION) -public class AccountingPage extends Page { +public class AccountingPage extends MasterPage { - @Override - public IModel> buildPageBreadcrumb() { - List BREADCRUMB = Lists.newArrayList(); - { - PageBreadcrumb breadcrumb = new PageBreadcrumb(); - breadcrumb.setLabel("Accounting"); - BREADCRUMB.add(breadcrumb); - } - return Model.ofList(BREADCRUMB); - } + private BookmarkablePageLink frequentPostingsLink; - @Override - protected void initData() { - } + private BookmarkablePageLink chartAccountsLink; - @Override - protected void initComponent() { - InfoBoxPanel frequentPostingPage = new InfoBoxPanel("frequentPostingPage", Model.of(new InfoBox().setPage(RuleSelectPage.class).setTitle("Frequent Postings").setDescription("These are predefined postings").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(frequentPostingPage); + private BookmarkablePageLink addJournalEntriesLink; + + private BookmarkablePageLink closingEntriesLink; - InfoBoxPanel chartOfAccountPage = new InfoBoxPanel("chartOfAccountPage", Model.of(new InfoBox().setPage(AccountBrowsePage.class).setTitle("Chart of Accounts").setDescription("List of the accounts used by the organization").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(chartOfAccountPage); + private BookmarkablePageLink searchJournalEntriesLink; - InfoBoxPanel addJournalEntryPage = new InfoBoxPanel("addJournalEntryPage", Model.of(new InfoBox().setPage(JournalPostPage.class).setTitle("Add Journal Entries").setDescription("Manual journal entry transactions recorded in a journal").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(addJournalEntryPage); + private BookmarkablePageLink accountingRulesLink; - InfoBoxPanel closingEntryPage = new InfoBoxPanel("closingEntryPage", Model.of(new InfoBox().setPage(ClosureBrowsePage.class).setTitle("Closing Entries").setDescription("Journal entries made at the end of an accounting period").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(closingEntryPage); + private BookmarkablePageLink accountsLinkedToFinancialActivitiesLink; - InfoBoxPanel searchJournalEntryPage = new InfoBoxPanel("searchJournalEntryPage", Model.of(new InfoBox().setPage(SearchJournalPage.class).setTitle("Search Journal Entries").setDescription("Advance search option for journal entries").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(searchJournalEntryPage); + private BookmarkablePageLink accrualsLink; - InfoBoxPanel accountingRulePage = new InfoBoxPanel("accountingRulePage", Model.of(new InfoBox().setPage(RuleBrowsePage.class).setTitle("Accounting Rules").setDescription("Lists all accounting rules").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(accountingRulePage); + private BookmarkablePageLink migrateOpeningBalancesLink; - InfoBoxPanel accountLinkedPage = new InfoBoxPanel("accountLinkedPage", Model.of(new InfoBox().setPage(FinancialActivityBrowsePage.class).setTitle("Accounts Linked to Financial Activities").setDescription("List of Financial Activity and GL Account Mappings").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(accountLinkedPage); + private BookmarkablePageLink provisioningEntriesLink; - InfoBoxPanel accrualsPage = new InfoBoxPanel("accrualsPage", Model.of(new InfoBox().setPage(AccrualAccountingPage.class).setTitle("Accruals").setDescription("Accrues income, expenses, and liabilities as on the provided date").setBackgroundColor(BackgroundColor.AquaActive).setIcon(Emoji.ion_alert))); - add(accrualsPage); + @Override + protected void onInitHtml(MarkupContainer body) { + this.frequentPostingsLink = new BookmarkablePageLink<>("frequentPostingsLink", TodoPage.class); + body.add(this.frequentPostingsLink); - InfoBoxPanel migrateOpeningPage = new InfoBoxPanel("migrateOpeningPage", Model.of(new InfoBox().setPage(LoginPage.class).setTitle("Migrate Opening Balances (Office-wise)").setDescription("Set or update office-level opening balances for GL Accounts").setIcon(Emoji.ion_alert))); - add(migrateOpeningPage); + this.chartAccountsLink = new BookmarkablePageLink<>("chartAccountsLink", TodoPage.class); + body.add(this.chartAccountsLink); - InfoBoxPanel provisionEntryPage = new InfoBoxPanel("provisionEntryPage", Model.of(new InfoBox().setPage(LoginPage.class).setTitle("Provisioning Entries").setDescription("Create Provision Entries").setIcon(Emoji.ion_alert))); - add(provisionEntryPage); - } + this.addJournalEntriesLink = new BookmarkablePageLink<>("addJournalEntriesLink", TodoPage.class); + body.add(this.addJournalEntriesLink); - @Override - protected void configureMetaData() { + this.closingEntriesLink = new BookmarkablePageLink<>("closingEntriesLink", TodoPage.class); + body.add(this.closingEntriesLink); + + this.searchJournalEntriesLink = new BookmarkablePageLink<>("searchJournalEntriesLink", TodoPage.class); + body.add(this.searchJournalEntriesLink); + + this.accountingRulesLink = new BookmarkablePageLink<>("accountingRulesLink", TodoPage.class); + body.add(this.accountingRulesLink); + + this.accountsLinkedToFinancialActivitiesLink = new BookmarkablePageLink<>("accountsLinkedToFinancialActivitiesLink", TodoPage.class); + body.add(this.accountsLinkedToFinancialActivitiesLink); + + this.accrualsLink = new BookmarkablePageLink<>("accrualsLink", TodoPage.class); + body.add(this.accrualsLink); + + this.migrateOpeningBalancesLink = new BookmarkablePageLink<>("migrateOpeningBalancesLink", TodoPage.class); + body.add(this.migrateOpeningBalancesLink); + + this.provisioningEntriesLink = new BookmarkablePageLink<>("provisioningEntriesLink", TodoPage.class); + body.add(this.provisioningEntriesLink); } } diff --git a/src/main/java/com/angkorteam/fintech/pages/CurrencyConfigurationPage.java b/src/main/java/com/angkorteam/fintech/pages/CurrencyConfigurationPage.java deleted file mode 100644 index e3e8c90b..00000000 --- a/src/main/java/com/angkorteam/fintech/pages/CurrencyConfigurationPage.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.angkorteam.fintech.pages; - -import java.util.List; -import java.util.Map; - -import org.apache.wicket.WicketRuntimeException; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; -import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; -import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; - -import com.angkorteam.fintech.Page; -import com.angkorteam.fintech.Session; -import com.angkorteam.fintech.ddl.MCurrency; -import com.angkorteam.fintech.ddl.MOrganisationCurrency; -import com.angkorteam.fintech.dto.Function; -import com.angkorteam.fintech.helper.CurrencyHelper; -import com.angkorteam.fintech.layout.Size; -import com.angkorteam.fintech.layout.UIBlock; -import com.angkorteam.fintech.layout.UIContainer; -import com.angkorteam.fintech.layout.UIRow; -import com.angkorteam.fintech.provider.JdbcProvider; -import com.angkorteam.fintech.provider.SingleChoiceProvider; -import com.angkorteam.fintech.table.TextCell; -import com.angkorteam.framework.SpringBean; -import com.angkorteam.framework.jdbc.SelectQuery; -import com.angkorteam.framework.models.PageBreadcrumb; -import com.angkorteam.framework.spring.JdbcNamed; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.DataTable; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.filter.ActionFilterColumn; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.filter.ActionItem; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.filter.FilterToolbar; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.filter.ItemClass; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.filter.ItemCss; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.filter.ItemPanel; -import com.angkorteam.framework.wicket.extensions.markup.html.repeater.data.table.filter.TextFilterColumn; -import com.angkorteam.framework.wicket.markup.html.form.Button; -import com.angkorteam.framework.wicket.markup.html.form.Form; -import com.angkorteam.framework.wicket.markup.html.form.select2.Option; -import com.angkorteam.framework.wicket.markup.html.form.select2.Select2SingleChoice; -import com.google.common.collect.Lists; - -import io.github.openunirest.http.JsonNode; - -/** - * Created by socheatkhauv on 6/26/17. - */ -@AuthorizeInstantiation(Function.ALL_FUNCTION) -public class CurrencyConfigurationPage extends Page { - - protected Form form1; - protected Button addButton; - - protected UIRow row1; - protected UIBlock currencyBlock; - protected UIContainer currencyIContainer; - protected SingleChoiceProvider currencyProvider; - protected Option currencyValue; - protected Select2SingleChoice