From 0ba11c1149e2ca51457ce0de20774da3aa066375 Mon Sep 17 00:00:00 2001 From: Jesper Schulz-Wedde Date: Tue, 9 Jul 2024 17:56:12 +0200 Subject: [PATCH] Syncing with version 25.0.21703.0 (#26811) Fixes [AB#420000](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/420000) --------- Co-authored-by: Alexander Holstrup <117829001+aholstrup1@users.noreply.github.com> --- .github/AL-Go-Settings.json | 2 +- .../SwissQRBillCreateVendBank.Page.al | 4 +- .../Codeunits/NavigateHandlerCZZ.Codeunit.al | 6 +- .../PurchAdvLetterPostCZZ.Codeunit.al | 25 +- .../SalesAdvLetterPostCZZ.Codeunit.al | 24 +- .../UpgradeApplicationCZZ.Codeunit.al | 4 +- .../UpgradeTagDefinitionsCZZ.Codeunit.al | 6 + .../PurchAdvanceLettersVATCZZ.Report.al | 3 +- .../SalesAdvanceLettersVATCZZ.Report.al | 3 +- .../Tables/PurchAdvLetterEntryCZZ.Table.al | 11 + .../Tables/PurchAdvLetterHeaderCZZ.Table.al | 2 + .../Tables/SalesAdvLetterEntryCZZ.Table.al | 13 + .../Tables/SalesAdvLetterHeaderCZZ.Table.al | 2 + .../Codeunits/NavigateHandlerCZB.Codeunit.al | 26 +- .../InstallApplicationCZP.Codeunit.al | 2 - .../Codeunits/NavigateHandlerCZP.Codeunit.al | 14 +- .../Src/Tables/CashDocumentLineCZP.Table.al | 7 +- .../Codeunits/NavigateHandlerCZC.Codeunit.al | 14 +- .../app/Codeunits/CommonModuleCZ.Codeunit.al | 23 + .../ContosoDemoDataSetupCZ.Codeunit.al | 11 + .../Codeunits/CreateCZGLAccounts.Codeunit.al | 291 +++ .../Codeunits/FixedAssetModuleCZ.Codeunit.al | 1561 +++++++++++++++++ .../app/ExtensionLogo.png | Bin .../ContosoCoffeeDemoDatasetCZ/app/app.json | 38 + .../CorrectionsPostingMgtCZL.Codeunit.al | 9 +- .../GenJnlPostLineHandlerCZL.Codeunit.al | 20 +- .../Codeunits/NavigateHandlerCZL.Codeunit.al | 14 +- .../UpgradeApplicationCZL.Codeunit.al | 17 + .../UpgradeTagDefinitionsCZL.Codeunit.al | 6 + .../Codeunits/VATDateHandlerCZL.Codeunit.al | 7 +- .../Reports/InventoryDocumentCZL.Report.al | 3 +- .../PostedInventoryReceiptCZL.Report.al | 3 +- .../PostedInventoryShipmentCZL.Report.al | 3 +- .../PurchaseHeaderCZL.TableExt.al | 3 + .../src/PostingRestrictionsTests.Codeunit.al | 20 + .../app/src/DigitalVoucherDKImpl.Codeunit.al | 163 +- .../src/Codeunit/GSTNavigate.codeunit.al | 10 +- .../Codeunit/GSTPreviewHandler.Codeunit.al | 10 +- .../GSTTaxConfiguration.Codeunit.al | 2 + .../GSTUseCaseLabels.Codeunit.al | 8 + .../GSTPurchCustomDutyAvailment.Codeunit.al | 2 +- .../GSTPurchaseNonAvailment.Codeunit.al | 2 +- .../SubcontractingPostBatch.Codeunit.al | 14 + .../app/Translations/India GST.en-GB.xlf | 12 + .../app/Translations/India GST.en-US.xlf | 12 + .../app/src/enum/GSTR1CDNRPerQuery.Query.al | 3 + .../app/src/enum/GSTR1CDNRQuery.Query.al | 4 + .../app/src/report/GSTR1FileFormat.Report.al | 3 +- .../src/codeunit/TCSPostPreview.codeunit.al | 19 +- .../codeunit/TDSNavigateHandler.Codeunit.al | 18 +- .../ProvisionalEntryHandler.Codeunit.al | 17 +- .../app/Translations/India Tax Base.en-US.xlf | 2 +- .../IRS1099BaseAppSubscribers.Codeunit.al | 25 +- .../test/src/IRS1099DocumentTests.Codeunit.al | 170 +- .../src/pages/APIV2CompanyInformation.Page.al | 22 + .../test/src/APIV2CompanyInfoE2E.Codeunit.al | 86 +- .../AACodesPostingHelper.Codeunit.al | 6 +- .../app/src/BankAccRecAIProposal.Page.al | 2 +- .../app/src/BankRecAIMatchingImpl.Codeunit.al | 21 +- .../app/src/TransToGLAccAIProposal.Page.al | 2 +- .../src/codeunits/BankDepositPost.Codeunit.al | 4 +- .../NavigateBankDepositExt.Codeunit.al | 20 +- .../src/BankDepositPostingTests.Codeunit.al | 98 +- .../App/DataSearchDefaults.Codeunit.al | 24 +- .../App/DataSearchInTable.codeunit.al | 25 +- .../App/DataSearchSetupFieldList.Page.al | 21 + .../DataSearch/test/TestDataSearch.Table.al | 26 + .../test/TestDataSearch.codeunit.al | 363 ++-- .../test/TestDataSearchOnArchives.codeunit.al | 2 +- Apps/W1/EDocument/app/app.json | 4 +- .../app/src/Document/EDocument.Page.al | 4 +- .../Extensions/EDocPurchaseOrder.PageExt.al | 4 +- .../EDocPurchaseOrderList.PageExt.al | 4 +- .../Helpers/EDocumentImportHelper.Codeunit.al | 17 + .../Copilot/EDocPOCopilotMatching.Codeunit.al | 31 +- .../Copilot/EDocPOCopilotProp.Page.al | 12 +- .../EDocLineMatching.Codeunit.al | 11 - .../EDocOrderLineMatching.Page.al | 11 +- .../app/src/EmailOAuthClient.Codeunit.al | 3 +- .../app/src/EmailOutlookAPIHelper.Codeunit.al | 11 + .../DummySMTPAuthentication.Codeunit.al | 3 - Apps/W1/EnforcedDigitalVouchers/app/app.json | 5 + .../DigitalVoucherEntrySetup.Page.al | 1 + .../DigVouchPstdServCrMemo.PageExt.al | 18 + .../DigVoucherPstdServInv.PageExt.al | 18 + .../DigVoucherPurchRetOrder.PageExt.al | 18 + .../DigVoucherServCrMemo.PageExt.al | 18 + .../DigVoucherServInvoice.PageExt.al} | 16 +- .../DigVoucherServOrder.PageExt.al} | 16 +- .../DigitalVoucherPurchOrder.PageExt.al} | 14 +- .../DigitalVoucherImpl.Codeunit.al | 272 ++- .../VoucherAttachOrNoteCheck.Codeunit.al | 2 +- .../VoucherAttachmentCheck.Codeunit.al | 15 +- .../test/src/DigitalVouchersTests.Codeunit.al | 558 +++++- .../FixedAsset/FixedAssetAnalysisExcel.xlsx | Bin 58858 -> 60726 bytes .../FixedAsset/FixedAssetDetailsExcel.xlsx | Bin 40885 -> 43377 bytes .../FixedAssetProjectedValueExcel.xlsx | Bin 36198 -> 39276 bytes .../ConsolidatedTrialBalanceExcel.xlsx | Bin 59205 -> 492606 bytes .../TrialBalanceBudgetExcel.xlsx | Bin 43174 -> 393029 bytes .../GeneralLedger/TrialBalanceExcel.xlsx | Bin 65675 -> 468103 bytes .../Purchase/AgedAccountsPayableExcel.xlsx | Bin 61462 -> 61472 bytes .../src/Customer/EXRCustomerTopList.Report.al | 11 +- .../EXRConsolidatedTrialBalance.Report.al | 96 +- .../EXRFixedAssetAnalysisExcel.Report.al | 5 +- .../EXRFixedAssetDetailsExcel.Report.al | 3 + .../EXRFixedAssetProjected.Report.al | 423 ++++- .../EXRTrialBalanceBudgetExcel.Report.al | 64 +- .../Financials/EXRTrialBalanceExcel.Report.al | 77 +- .../src/Financials/TrialBalance.Codeunit.al | 176 +- .../EXRAccountantRoleCenter.PageExt.al | 32 + .../RoleCenters/EXRFinRoleCenter.PageExt.al | 32 + .../app/src/Vendor/EXRVendorTopList.Report.al | 11 +- .../FieldServiceIntegration/app/.objidconfig | 3 - Apps/W1/FieldServiceIntegration/app/app.json | 45 - .../FSAssistedSetupSubscriber.Codeunit.al | 50 - .../FSDataClassification.Codeunit.al | 39 - .../app/src/Codeunits/FSInstall.Codeunit.al | 131 -- .../FSIntTableSubscriber.Codeunit.al | 1200 ------------- .../Codeunits/FSIntegrationMgt.Codeunit.al | 217 --- .../Codeunits/FSLookupFSTables.Codeunit.al | 81 - .../src/Codeunits/FSSetupDefaults.Codeunit.al | 774 -------- .../src/Enums/FSWorkOrderLinePostRule.Enum.al | 24 - .../Page Extensions/FSJobJournal.PageExt.al | 33 - .../FSJobProjectManagerRC.PageExt.al | 42 - .../Page Extensions/FSJobTaskCard.PageExt.al | 167 -- .../Page Extensions/FSJobTaskLines.PageExt.al | 179 -- .../Page Extensions/FSJobTaskList.PageExt.al | 179 -- .../FSProjectManagerActivities.PageExt.al | 51 - .../Page Extensions/FSResourceCard.PageExt.al | 213 --- .../Page Extensions/FSResourceList.PageExt.al | 210 --- .../FSServiceConnections.PageExt.al | 17 - .../FSServiceItemCard.PageExt.al | 186 -- .../FSServiceItemList.PageExt.al | 200 --- .../FSServiceManagerRC.PageExt.al | 42 - .../src/Pages/FSBookableResourceList.Page.al | 166 -- .../app/src/Pages/FSConnectionSetup.Page.al | 505 ------ .../src/Pages/FSConnectionSetupWizard.Page.al | 517 ------ .../app/src/Pages/FSCustomerAssetList.Page.al | 184 -- .../app/src/Pages/FSLocationList.PageExt.al | 172 -- .../FSD365TEAMMEMBER.PermissionSetExt.al | 12 - .../src/Permissions/FSEdit.PermissionSet.al | 30 - .../FSINTELLIGENTCLOUD.PermissionSetExt.al | 12 - .../Permissions/FSObjects.PermissionSet.al | 39 - .../src/Permissions/FSRead.PermissionSet.al | 30 - .../src/Table Extensions/FSJob.TableExt.al | 69 - .../src/Table Extensions/FSJobCue.TableExt.al | 28 - .../Table Extensions/FSJobTask.TableExt.al | 22 - .../Table Extensions/FSLocation.TableExt.al | 22 - .../FSServiceItem.TableExt.al | 22 - .../src/Tables/FSBookableResource.Table.al | 501 ------ .../Tables/FSBookableResourceBooking.Table.al | 636 ------- .../FSBookableResourceBookingHdr.Table.al | 308 ---- .../app/src/Tables/FSConnectionSetup.Table.al | 1054 ----------- .../app/src/Tables/FSCustomerAsset.Table.al | 423 ----- .../Tables/FSCustomerAssetCategory.Table.al | 214 --- .../app/src/Tables/FSProjectTask.Table.al | 259 --- .../app/src/Tables/FSResourcePayType.Table.al | 261 --- .../app/src/Tables/FSWarehouse.Table.al | 222 --- .../app/src/Tables/FSWorkOrder.Table.al | 906 ---------- .../src/Tables/FSWorkOrderIncident.Table.al | 312 ---- .../src/Tables/FSWorkOrderProduct.Table.al | 726 -------- .../src/Tables/FSWorkOrderService.Table.al | 767 -------- .../src/Tables/FSWorkOrderSubstatus.Table.al | 233 --- .../app/src/Tables/FSWorkOrderType.Table.al | 239 --- .../test library/ExtensionLogo.png | Bin 5446 -> 0 bytes .../test library/app.json | 43 - .../src/FSIntegrationTestLibrary.Codeunit.al | 30 - .../codeunit/TaxPostingBufferMgmt.Codeunit.al | 17 + .../table/TransactionPostingBuffer.Table.al | 1 - .../src/IntrastatReportManagement.Codeunit.al | 34 + .../src/pages/MasterDataSynchTables.Page.al | 19 +- .../src/UniversalPrintGraphHelper.Codeunit.al | 39 - .../FieldMapper/AttachmentMapping.Table.al | 84 + .../FieldMapper/AttachmentMappingPart.Page.al | 257 +++ .../FieldMapper/ColumnAction.Enum.al | 31 + .../Attachment/FieldMapper/ColumnType.Enum.al | 36 + .../FieldMapper/ItemInfoFromFile.Page.al | 346 ++++ .../FieldMapper/MappingCache.Table.al | 33 + .../MappingCacheManagement.Codeunit.al | 66 + .../FileHandlers/CSVHandler.Codeunit.al | 152 ++ .../FileHandlers/FileHandler.Interface.al | 33 + .../FileHandlerFactory.Codeunit.al | 25 + .../FileHandlerResult.Codeunit.al | 221 +++ .../FileHandlers/FileHandlerType.Enum.al} | 16 +- .../SalesLineAISuggestionsSub.Page.al | 7 + .../SalesLineFromAttachment.Codeunit.al | 68 + .../SalesLineFromAttachment.Page.al | 303 ++++ .../SalesInvoiceSubFormExt.PageExt.al | 8 - .../SalesOrderSubFormExt.PageExt.al | 58 +- .../SalesQuoteSubFormExt.PageExt.al | 8 - .../app/SLSPrompts.Codeunit.al | 44 +- .../LookupItemsFromCsvFunction.Codeunit.al | 113 ++ .../app/SalesLineAISuggestions.Page.al | 30 +- .../app/SalesLineAISuggestions.Table.al | 4 + .../app/SalesLinesSuggestionsImpl.Codeunit.al | 85 +- .../app/Search/Search.Codeunit.al | 10 +- .../Utilities/SalesLineUtility.Codeunit.al | 13 +- Apps/W1/SalesLinesSuggestions/app/app.json | 2 +- .../test/SaveFileMappingTest.Codeunit.al | 146 ++ .../test/SearchItemTest.Codeunit.al | 56 +- Apps/W1/SalesLinesSuggestions/test/app.json | 2 +- .../app/ExtensionLogo.png | Bin 0 -> 2408 bytes Apps/W1/SalesOrderTakingAgent/app/app.json | 24 + .../AgentSetup/AgentAccessControl.Page.al | 132 ++ .../AgentSetup/AgentCard.Page.al | 223 +++ .../AgentSetup/AgentImpl.Codeunit.al | 158 ++ .../AgentSetup/AgentList.Page.al | 72 + .../AgentMonitoringImpl.Codeunit.al | 163 ++ .../Monitoring/AgentNewTaskMessage.Page.al | 53 + .../Monitoring/AgentTaskList.Page.al | 238 +++ .../Monitoring/AgentTaskMessageCard.Page.al | 95 + .../Monitoring/AgentTaskMessageList.Page.al | 127 ++ .../Monitoring/AgentTaskStepList.Page.al | 80 + .../Monitoring/AgentUserIntervention.Page.al | 91 + .../Permissions/AgentObjects.PermissionSet.al | 22 + .../Instructions/SOADemoPrompt.Codeunit.al | 206 +++ .../SOAInstructTasksPolicies.Page.al | 76 + .../Instructions/SOAInstructionPhase.Table.al | 102 ++ .../SOAInstructionPhaseStep.Table.al | 96 + .../SOAInstructionPhaseSteps.Page.al | 128 ++ .../Instructions/SOAInstructionPhases.Page.al | 73 + .../SOAInstructionPrompt.Table.al | 79 + .../SOAInstructionPromptCard.Page.al | 131 ++ .../SOAInstructionPromptList.Page.al | 74 + .../SOAInstructionTaskPolicy.Table.al | 102 ++ .../SOAInstructionTemplate.Table.al | 115 ++ .../SOAInstructionTemplates.Page.al | 92 + .../src/Instructions/SOAInstructions.Page.al | 115 ++ .../SOAInstructionsMgt.Codeunit.al | 162 ++ .../src/Instructions/SOAPhaseStepType.Enum.al | 21 + .../app/src/Instructions/SOAPhases.Enum.al | 33 + .../Instructions/SOAYesNoToggleState.Enum.al} | 21 +- .../src/Permissions/SOAEdit.permissionset.al | 19 + .../SOAInstructionsEdit.permissionset.al | 22 + .../SOAInstructionsRead.permissionset.al | 22 + .../SOAInstructionsView.permissionset.al | 22 + .../Permissions/SOAObjects.PermissionSet.al | 38 + .../src/Permissions/SOARead.permissionset.al | 19 + .../SOAContactCard.PageCust.al | 123 ++ .../SOAContactList.PageCust.al | 83 + .../SOACustomerCard.PageCust.al | 140 ++ .../SOACustomerList.PageCust.al | 97 + .../SOAItemList.PageCust.al | 97 + .../SOAItemLookup.PageCust.al | 68 + .../SOASalesQuote.PageCust.al | 185 ++ .../SOASalesQuoteSubform.PageCust.al | 85 + .../SOASalesQuotes.PageCust.al | 111 ++ .../Profile/SalesOrderTakerAgent.Profile.al | 22 + .../app/src/RoleCenter/SOARoleCenter.Page.al | 109 ++ .../ShpfyGQLFFOrdersFromOrder.Codeunit.al | 2 +- .../ShpfyGQLNextFFOrdersFromOrd.Codeunit.al | 2 +- .../ShpfyGQLOrderTransactions.Codeunit.al | 27 + .../GraphQL/Enums/ShpfyGraphQLType.Enum.al | 5 + .../ShpfyFulfillmentOrdersAPI.Codeunit.al | 1 + .../Tables/ShpfyFulFillmentOrderLine.Table.al | 4 + .../Codeunits/ShpfyRefundsAPI.Codeunit.al | 11 +- .../Codeunits/ShpfyReturnsAPI.Codeunit.al | 6 +- .../Codeunits/ShpfyImportOrder.Codeunit.al | 14 +- .../Codeunits/ShpfyOrderEvents.Codeunit.al | 2 +- .../Codeunits/ShpfyOrdersAPI.Codeunit.al | 9 +- .../Codeunits/ShpfyProcessOrder.Codeunit.al | 2 +- .../ShpfyObjects.PermissionSet.al | 1 + .../Codeunits/ShpfyProductEvents.Codeunit.al | 10 + .../Codeunits/ShpfyProductExport.Codeunit.al | 1 + .../ShpfyExportShipments.Codeunit.al | 1 + .../Codeunits/ShpfyTransactions.Codeunit.al | 157 +- .../Enums/ShpfyTransactionStatus.Enum.al | 9 +- .../Pages/ShpfyTransactions.Page.al | 6 + .../Tables/ShpfyOrderTransaction.Table.al | 8 + .../ShpfyOrdersAPISubscriber.Codeunit.al | 46 + .../ShpfyOrdersAPITest.Codeunit.al | 30 +- .../ShpfyOrderRefundTest.Codeunit.al | 37 +- .../ShpfyOrderRefundsHelper.Codeunit.al | 18 +- .../SustainabilityCalcMgt.Codeunit.al | 2 +- .../Journal/SustainabilityJnlBatches.Page.al | 25 + .../SustainabilityJournalMgt.Codeunit.al | 19 + .../src/SustainabilityJournalTest.Codeunit.al | 46 + .../src/TransactStorageExportData.Codeunit.al | 2 +- .../app/src/TransactionStorageABS.Codeunit.al | 53 +- Build/Packages.json | 2 +- 280 files changed, 11712 insertions(+), 14057 deletions(-) create mode 100644 Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CommonModuleCZ.Codeunit.al create mode 100644 Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/ContosoDemoDataSetupCZ.Codeunit.al create mode 100644 Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CreateCZGLAccounts.Codeunit.al create mode 100644 Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/FixedAssetModuleCZ.Codeunit.al rename Apps/{W1/FieldServiceIntegration => CZ/ContosoCoffeeDemoDatasetCZ}/app/ExtensionLogo.png (100%) create mode 100644 Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/app.json create mode 100644 Apps/W1/DataSearch/test/TestDataSearch.Table.al create mode 100644 Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVouchPstdServCrMemo.PageExt.al create mode 100644 Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPstdServInv.PageExt.al create mode 100644 Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPurchRetOrder.PageExt.al create mode 100644 Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServCrMemo.PageExt.al rename Apps/W1/{FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMREAD.PermissionSetExt.al => EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServInvoice.PageExt.al} (57%) rename Apps/W1/{FieldServiceIntegration/app/src/Permissions/FSD365READ.PermissionSetExt.al => EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServOrder.PageExt.al} (58%) rename Apps/W1/{FieldServiceIntegration/app/src/Permissions/FSD365AUTOMATION.PermissionSetExt.al => EnforcedDigitalVouchers/app/src/Extensions/DigitalVoucherPurchOrder.PageExt.al} (57%) delete mode 100644 Apps/W1/FieldServiceIntegration/app/.objidconfig delete mode 100644 Apps/W1/FieldServiceIntegration/app/app.json delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSAssistedSetupSubscriber.Codeunit.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSDataClassification.Codeunit.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSInstall.Codeunit.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntTableSubscriber.Codeunit.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntegrationMgt.Codeunit.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSLookupFSTables.Codeunit.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSSetupDefaults.Codeunit.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Enums/FSWorkOrderLinePostRule.Enum.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobJournal.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobProjectManagerRC.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskCard.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskLines.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskList.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSProjectManagerActivities.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceCard.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceList.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceConnections.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemCard.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemList.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceManagerRC.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Pages/FSBookableResourceList.Page.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetup.Page.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetupWizard.Page.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Pages/FSCustomerAssetList.Page.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Pages/FSLocationList.PageExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365TEAMMEMBER.PermissionSetExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Permissions/FSEdit.PermissionSet.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Permissions/FSINTELLIGENTCLOUD.PermissionSetExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Permissions/FSObjects.PermissionSet.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Permissions/FSRead.PermissionSet.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJob.TableExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobCue.TableExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobTask.TableExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSLocation.TableExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSServiceItem.TableExt.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResource.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBooking.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBookingHdr.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSConnectionSetup.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAsset.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAssetCategory.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSProjectTask.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSResourcePayType.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSWarehouse.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrder.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderIncident.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderProduct.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderService.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderSubstatus.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderType.Table.al delete mode 100644 Apps/W1/FieldServiceIntegration/test library/ExtensionLogo.png delete mode 100644 Apps/W1/FieldServiceIntegration/test library/app.json delete mode 100644 Apps/W1/FieldServiceIntegration/test library/src/FSIntegrationTestLibrary.Codeunit.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMapping.Table.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMappingPart.Page.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnAction.Enum.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnType.Enum.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ItemInfoFromFile.Page.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCache.Table.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCacheManagement.Codeunit.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/CSVHandler.Codeunit.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandler.Interface.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerFactory.Codeunit.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerResult.Codeunit.al rename Apps/W1/{FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMMGT.PermissionSetExt.al => SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerType.Enum.al} (59%) rename Apps/W1/SalesLinesSuggestions/app/{ => Attachment}/SalesLineAISuggestionsSub.Page.al (94%) create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Codeunit.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Page.al create mode 100644 Apps/W1/SalesLinesSuggestions/app/SalesAzureOpenAITools/FunctionsImpl/LookupItemsFromCsvFunction.Codeunit.al create mode 100644 Apps/W1/SalesLinesSuggestions/test/SaveFileMappingTest.Codeunit.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/ExtensionLogo.png create mode 100644 Apps/W1/SalesOrderTakingAgent/app/app.json create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentAccessControl.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentCard.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentImpl.Codeunit.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentList.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentMonitoringImpl.Codeunit.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentNewTaskMessage.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskList.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageCard.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageList.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskStepList.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentUserIntervention.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Permissions/AgentObjects.PermissionSet.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOADemoPrompt.Codeunit.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructTasksPolicies.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhase.Table.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseStep.Table.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseSteps.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhases.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPrompt.Table.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptCard.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptList.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTaskPolicy.Table.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplate.Table.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplates.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructions.Page.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionsMgt.Codeunit.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhaseStepType.Enum.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhases.Enum.al rename Apps/W1/{FieldServiceIntegration/app/src/Enums/FSWorkOrderLineSynchRule.Enum.al => SalesOrderTakingAgent/app/src/Instructions/SOAYesNoToggleState.Enum.al} (53%) create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAEdit.permissionset.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsEdit.permissionset.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsRead.permissionset.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsView.permissionset.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAObjects.PermissionSet.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOARead.permissionset.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactCard.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactList.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerCard.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerList.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemList.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemLookup.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuote.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuoteSubform.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuotes.PageCust.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/Profile/SalesOrderTakerAgent.Profile.al create mode 100644 Apps/W1/SalesOrderTakingAgent/app/src/RoleCenter/SOARoleCenter.Page.al create mode 100644 Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLOrderTransactions.Codeunit.al create mode 100644 Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPISubscriber.Codeunit.al diff --git a/.github/AL-Go-Settings.json b/.github/AL-Go-Settings.json index 379ec9f4f4..e222666964 100644 --- a/.github/AL-Go-Settings.json +++ b/.github/AL-Go-Settings.json @@ -5,7 +5,7 @@ "runs-on": "windows-latest", "cacheImageName": "", "UsePsSession": false, - "artifact": "https://bcinsider-fvh2ekdjecfjd6gk.b02.azurefd.net/sandbox/25.0.20906.0/base", + "artifact": "https://bcinsider-fvh2ekdjecfjd6gk.b02.azurefd.net/sandbox/25.0.21703.0/base", "country": "base", "useProjectDependencies": true, "repoVersion": "25.0", diff --git a/Apps/CH/SwissQRBill/app/src/purchases/SwissQRBillCreateVendBank.Page.al b/Apps/CH/SwissQRBill/app/src/purchases/SwissQRBillCreateVendBank.Page.al index 2faeae0098..10b0bb38d2 100644 --- a/Apps/CH/SwissQRBill/app/src/purchases/SwissQRBillCreateVendBank.Page.al +++ b/Apps/CH/SwissQRBill/app/src/purchases/SwissQRBillCreateVendBank.Page.al @@ -69,14 +69,14 @@ page 11502 "Swiss QR-Bill Create Vend Bank" TestField(Code); end; - internal procedure SetDetails(VendorBankAccount: Record "Vendor Bank Account") + procedure SetDetails(VendorBankAccount: Record "Vendor Bank Account") begin if Delete() then; TransferFields(VendorBankAccount); Insert(); end; - internal procedure GetDetails(var VendorBankAccount: Record "Vendor Bank Account") + procedure GetDetails(var VendorBankAccount: Record "Vendor Bank Account") begin VendorBankAccount := Rec; end; diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/NavigateHandlerCZZ.Codeunit.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/NavigateHandlerCZZ.Codeunit.al index 00a25a9c48..aa85214925 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/NavigateHandlerCZZ.Codeunit.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/NavigateHandlerCZZ.Codeunit.al @@ -42,8 +42,8 @@ codeunit 31007 "Navigate Handler CZZ" end; end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateShowRecords', '', true, false)] - local procedure NavigateOnAfterNavigateShowRecords(var TempDocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text) + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', true, false)] + local procedure NavigateOnBeforeShowRecords(var TempDocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; var IsHandled: Boolean) var SalesAdvLetterEntryCZZ: Record "Sales Adv. Letter Entry CZZ"; PurchAdvLetterEntryCZZ: Record "Purch. Adv. Letter Entry CZZ"; @@ -54,12 +54,14 @@ codeunit 31007 "Navigate Handler CZZ" SalesAdvLetterEntryCZZ.SetFilter("Document No.", DocNoFilter); SalesAdvLetterEntryCZZ.SetFilter("Posting Date", PostingDateFilter); Page.Run(0, SalesAdvLetterEntryCZZ); + IsHandled := true; end; Database::"Purch. Adv. Letter Entry CZZ": begin PurchAdvLetterEntryCZZ.SetFilter("Document No.", DocNoFilter); PurchAdvLetterEntryCZZ.SetFilter("Posting Date", PostingDateFilter); Page.Run(0, PurchAdvLetterEntryCZZ); + IsHandled := true; end; end; end; diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/PurchAdvLetterPostCZZ.Codeunit.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/PurchAdvLetterPostCZZ.Codeunit.al index d6ee9a42a3..401851eab9 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/PurchAdvLetterPostCZZ.Codeunit.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/PurchAdvLetterPostCZZ.Codeunit.al @@ -128,8 +128,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitNewEntry(); TempPurchAdvLetterEntryCZZGlob.InitVendorLedgerEntry(VendorLedgerEntryPayment); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::Payment; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; EntryNo := TempPurchAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); if not AdvancePostingParametersCZZ."Temporary Entries Only" then @@ -218,8 +218,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitVendorLedgerEntry(VendorLedgerEntry); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := PurchAdvLetterEntryCZZ."Entry Type"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob.Cancelled := true; TempPurchAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); @@ -335,8 +335,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitNewEntry(); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Payment"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempPurchAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempPurchAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -413,8 +413,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitNewEntry(); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ."Related Entry"); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Payment"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempPurchAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempPurchAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -638,6 +638,7 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" PurchAdvLetterHeaderCZZ.Get(PurchAdvLetterEntryCZZ."Purch. Adv. Letter No."); PurchAdvLetterEntryCZZ2.Reset(); + PurchAdvLetterEntryCZZ2.SetRange("Purch. Adv. Letter No.", PurchAdvLetterHeaderCZZ."No."); PurchAdvLetterEntryCZZ2.SetRange("Document No.", PurchAdvLetterEntryCZZ."Document No."); PurchAdvLetterEntryCZZ2.SetFilter("Entry Type", '%1|%2|%3', PurchAdvLetterEntryCZZ2."Entry Type"::"VAT Adjustment", @@ -788,8 +789,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitNewEntry(); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ."Related Entry"); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Payment"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempPurchAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempPurchAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -1025,8 +1026,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitNewEntry(); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ."Related Entry"); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := PurchAdvLetterEntryCZZ."Entry Type"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempPurchAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempPurchAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -1109,8 +1110,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitVendorLedgerEntry(VendorLedgerEntry); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := PurchAdvLetterEntryCZZ."Entry Type"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob.Cancelled := true; EntryNo := TempPurchAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); @@ -1269,8 +1270,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitVendorLedgerEntry(VendorLedgerEntry2); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::Close; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."Amount (LCY)" := -RemainingAmountLCY; EntryNo := TempPurchAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); end; @@ -1416,8 +1417,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitVendorLedgerEntry(VendorLedgerEntry2); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(PurchAdvLetterEntryCZZ); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::Usage; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; EntryNo := TempPurchAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); if PurchAdvLetterHeaderCZZ."Automatic Post VAT Usage" then begin @@ -1540,8 +1541,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitNewEntry(); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(RelatedEntryNo); TempPurchAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := EntryType; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempPurchAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempPurchAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -1719,8 +1720,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitNewEntry(); TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(RelatedEntryNo); TempPurchAdvLetterEntryCZZGlob.CopyFromVATPostingSetup(VATPostingSetup); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Rate"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."Document No." := AdvancePostingParametersCZZ."Document No."; TempPurchAdvLetterEntryCZZGlob."External Document No." := AdvancePostingParametersCZZ."External Document No."; TempPurchAdvLetterEntryCZZGlob."Posting Date" := AdvancePostingParametersCZZ."Posting Date"; @@ -1816,8 +1817,8 @@ codeunit 31142 "Purch. Adv. Letter-Post CZZ" TempPurchAdvLetterEntryCZZGlob.InitRelatedEntry(RelatedEntryNo); TempPurchAdvLetterEntryCZZGlob.InitDetailedVendorLedgerEntry(RelatedDetEntryNo); TempPurchAdvLetterEntryCZZGlob.CopyFromVATPostingSetup(VATPostingSetup); + TempPurchAdvLetterEntryCZZGlob.CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ); TempPurchAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Adjustment"; - TempPurchAdvLetterEntryCZZGlob."Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; TempPurchAdvLetterEntryCZZGlob."Document No." := AdvancePostingParametersCZZ."Document No."; TempPurchAdvLetterEntryCZZGlob."External Document No." := AdvancePostingParametersCZZ."External Document No."; TempPurchAdvLetterEntryCZZGlob."Posting Date" := AdvancePostingParametersCZZ."Posting Date"; diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/SalesAdvLetterPostCZZ.Codeunit.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/SalesAdvLetterPostCZZ.Codeunit.al index 9ed4f7ae42..aa20ebcd99 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/SalesAdvLetterPostCZZ.Codeunit.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/SalesAdvLetterPostCZZ.Codeunit.al @@ -125,8 +125,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitNewEntry(); TempSalesAdvLetterEntryCZZGlob.InitCustLedgerEntry(CustLedgerEntryPayment); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::Payment; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; EntryNo := TempSalesAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); if not AdvancePostingParametersCZZ."Temporary Entries Only" then @@ -215,8 +215,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitCustLedgerEntry(CustLedgerEntry); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := SalesAdvLetterEntryCZZ."Entry Type"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob.Cancelled := true; TempSalesAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); @@ -328,8 +328,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitNewEntry(); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Payment"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempSalesAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempSalesAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -406,8 +406,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitNewEntry(); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ."Related Entry"); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Payment"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempSalesAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempSalesAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -672,8 +672,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitNewEntry(); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ."Related Entry"); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Payment"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempSalesAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempSalesAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -899,8 +899,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitNewEntry(); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ."Related Entry"); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := SalesAdvLetterEntryCZZ."Entry Type"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempSalesAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempSalesAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -983,8 +983,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitCustLedgerEntry(CustLedgerEntry); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := SalesAdvLetterEntryCZZ."Entry Type"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob.Cancelled := true; EntryNo := TempSalesAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); @@ -1143,8 +1143,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitCustLedgerEntry(CustLedgerEntry2); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::Close; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."Amount (LCY)" := RemainingAmountLCY; EntryNo := TempSalesAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); end; @@ -1290,8 +1290,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitCustLedgerEntry(CustLedgerEntry2); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(SalesAdvLetterEntryCZZ); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::Usage; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; EntryNo := TempSalesAdvLetterEntryCZZGlob.InsertNewEntry(not AdvancePostingParametersCZZ."Temporary Entries Only"); if SalesAdvLetterHeaderCZZ."Automatic Post VAT Document" then begin @@ -1401,8 +1401,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitNewEntry(); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(RelatedEntryNo); TempSalesAdvLetterEntryCZZGlob.CopyFromGenJnlLine(GenJournalLine); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := EntryType; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."VAT Entry No." := VATEntryNo; TempSalesAdvLetterEntryCZZGlob."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempSalesAdvLetterEntryCZZGlob."Auxiliary Entry" := AdvancePostingBufferCZZ."Auxiliary Entry"; @@ -1580,8 +1580,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitNewEntry(); TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(RelatedEntryNo); TempSalesAdvLetterEntryCZZGlob.CopyFromVATPostingSetup(VATPostingSetup); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Rate"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."Document No." := AdvancePostingParametersCZZ."Document No."; TempSalesAdvLetterEntryCZZGlob."Posting Date" := AdvancePostingParametersCZZ."Posting Date"; TempSalesAdvLetterEntryCZZGlob."VAT Date" := AdvancePostingParametersCZZ."VAT Date"; @@ -1675,8 +1675,8 @@ codeunit 31143 "Sales Adv. Letter-Post CZZ" TempSalesAdvLetterEntryCZZGlob.InitRelatedEntry(RelatedEntryNo); TempSalesAdvLetterEntryCZZGlob.InitDetailedCustLedgerEntry(RelatedDetEntryNo); TempSalesAdvLetterEntryCZZGlob.CopyFromVATPostingSetup(VATPostingSetup); + TempSalesAdvLetterEntryCZZGlob.CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ); TempSalesAdvLetterEntryCZZGlob."Entry Type" := "Advance Letter Entry Type CZZ"::"VAT Adjustment"; - TempSalesAdvLetterEntryCZZGlob."Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; TempSalesAdvLetterEntryCZZGlob."Document No." := AdvancePostingParametersCZZ."Document No."; TempSalesAdvLetterEntryCZZGlob."Posting Date" := AdvancePostingParametersCZZ."Posting Date"; TempSalesAdvLetterEntryCZZGlob."VAT Date" := AdvancePostingParametersCZZ."VAT Date"; diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeApplicationCZZ.Codeunit.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeApplicationCZZ.Codeunit.al index 89f8922b77..e8f90e052f 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeApplicationCZZ.Codeunit.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeApplicationCZZ.Codeunit.al @@ -86,7 +86,7 @@ codeunit 31088 "Upgrade Application CZZ" var SalesAdvLetterEntry: Record "Sales Adv. Letter Entry CZZ"; begin - if UpgradeTag.HasUpgradeTag(UpgradeTagDefinitionsCZZ.GetSalesAdvLetterEntryCustomerNoUpgradeTag()) then + if UpgradeTag.HasUpgradeTag(UpgradeTagDefinitionsCZZ.GetSalesAdvLetterEntryCustomerNo2UpgradeTag()) then exit; SalesAdvLetterEntry.SetLoadFields("Sales Adv. Letter No."); @@ -97,7 +97,7 @@ codeunit 31088 "Upgrade Application CZZ" SalesAdvLetterEntry.Modify(); until SalesAdvLetterEntry.Next() = 0; - UpgradeTag.SetUpgradeTag(UpgradeTagDefinitionsCZZ.GetSalesAdvLetterEntryCustomerNoUpgradeTag()); + UpgradeTag.SetUpgradeTag(UpgradeTagDefinitionsCZZ.GetSalesAdvLetterEntryCustomerNo2UpgradeTag()); end; local procedure UpgradeAdvanceLetterApplicationAmountLCY() diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeTagDefinitionsCZZ.Codeunit.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeTagDefinitionsCZZ.Codeunit.al index 13f89997d8..0a9f4e6bb0 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeTagDefinitionsCZZ.Codeunit.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Codeunits/UpgradeTagDefinitionsCZZ.Codeunit.al @@ -25,6 +25,7 @@ codeunit 31089 "Upgrade Tag Definitions CZZ" PerCompanyUpgradeTags.Add(GetSalesAdvLetterEntryCustomerNoUpgradeTag()); PerCompanyUpgradeTags.Add(GetAdvanceLetterApplicationAmountLCYUpgradeTag()); PerCompanyUpgradeTags.Add(GetPostVATDocForReverseChargeUpgradeTag()); + PerCompanyUpgradeTags.Add(GetSalesAdvLetterEntryCustomerNo2UpgradeTag()); end; procedure GetDataVersion190PerDatabaseUpgradeTag(): Code[250] @@ -71,4 +72,9 @@ codeunit 31089 "Upgrade Tag Definitions CZZ" begin exit('CZZ-494279-PostVATDocForReverseChargeUpgradeTag-20240426'); end; + + procedure GetSalesAdvLetterEntryCustomerNo2UpgradeTag(): Code[250] + begin + exit('CZZ-537960-SalesAdvLetterEntryCustomerNo2UpgradeTag-20240612'); + end; } diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/PurchAdvanceLettersVATCZZ.Report.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/PurchAdvanceLettersVATCZZ.Report.al index 1739c4946a..64a793df52 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/PurchAdvanceLettersVATCZZ.Report.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/PurchAdvanceLettersVATCZZ.Report.al @@ -59,7 +59,7 @@ report 31025 "Purch. Advance Letters VAT CZZ" dataitem("Purch. Adv. Letter Entry CZZ"; "Purch. Adv. Letter Entry CZZ") { - DataItemTableView = where("Entry Type" = filter("VAT Payment" | "VAT Usage" | "VAT Close" | "VAT Rate" | "VAT Adjustment"), Cancelled = const(false)); + DataItemTableView = where("Entry Type" = filter("VAT Payment" | "VAT Usage" | "VAT Close" | "VAT Rate" | "VAT Adjustment")); DataItemLink = "Purch. Adv. Letter No." = field("No."); column(Document_No_; "Document No.") @@ -112,7 +112,6 @@ report 31025 "Purch. Advance Letters VAT CZZ" PurchAdvLetterEntryCZZ: Record "Purch. Adv. Letter Entry CZZ"; begin PurchAdvLetterEntryCZZ.SetRange("Purch. Adv. Letter No.", "Purch. Adv. Letter Header CZZ"."No."); - PurchAdvLetterEntryCZZ.SetRange(Cancelled, false); PurchAdvLetterEntryCZZ.SetFilter("Posting Date", '..%1', ToDate); PurchAdvLetterEntryCZZ.SetFilter("Entry Type", '%1|%2|%3|%4|%5', PurchAdvLetterEntryCZZ."Entry Type"::"VAT Payment", PurchAdvLetterEntryCZZ."Entry Type"::"VAT Usage", PurchAdvLetterEntryCZZ."Entry Type"::"VAT Close", diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/SalesAdvanceLettersVATCZZ.Report.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/SalesAdvanceLettersVATCZZ.Report.al index e44990de5c..177e9e10d6 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/SalesAdvanceLettersVATCZZ.Report.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Reports/SalesAdvanceLettersVATCZZ.Report.al @@ -59,7 +59,7 @@ report 31023 "Sales Advance Letters VAT CZZ" dataitem("Sales Adv. Letter Entry CZZ"; "Sales Adv. Letter Entry CZZ") { - DataItemTableView = where("Entry Type" = filter("VAT Payment" | "VAT Usage" | "VAT Close" | "VAT Rate" | "VAT Adjustment"), Cancelled = const(false)); + DataItemTableView = where("Entry Type" = filter("VAT Payment" | "VAT Usage" | "VAT Close" | "VAT Rate" | "VAT Adjustment")); DataItemLink = "Sales Adv. Letter No." = field("No."); column(Document_No_; "Document No.") @@ -112,7 +112,6 @@ report 31023 "Sales Advance Letters VAT CZZ" SalesAdvLetterEntryCZZ: Record "Sales Adv. Letter Entry CZZ"; begin SalesAdvLetterEntryCZZ.SetRange("Sales Adv. Letter No.", "Sales Adv. Letter Header CZZ"."No."); - SalesAdvLetterEntryCZZ.SetRange(Cancelled, false); SalesAdvLetterEntryCZZ.SetFilter("Posting Date", '..%1', ToDate); SalesAdvLetterEntryCZZ.SetFilter("Entry Type", '%1|%2|%3|%4|%5', SalesAdvLetterEntryCZZ."Entry Type"::"VAT Payment", SalesAdvLetterEntryCZZ."Entry Type"::"VAT Usage", SalesAdvLetterEntryCZZ."Entry Type"::"VAT Close", diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterEntryCZZ.Table.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterEntryCZZ.Table.al index 888b4989eb..215fca0b06 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterEntryCZZ.Table.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterEntryCZZ.Table.al @@ -373,6 +373,12 @@ table 31009 "Purch. Adv. Letter Entry CZZ" OnAfterCopyFromVATPostingSetup(VATPostingSetup, Rec); end; + procedure CopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ: Record "Purch. Adv. Letter Header CZZ") + begin + "Purch. Adv. Letter No." := PurchAdvLetterHeaderCZZ."No."; + OnAfterCopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ, Rec); + end; + procedure InsertNewEntry(WriteToDatabase: Boolean) EntryNo: Integer var PurchAdvLetterEntryCZZ: Record "Purch. Adv. Letter Entry CZZ"; @@ -451,6 +457,11 @@ table 31009 "Purch. Adv. Letter Entry CZZ" begin end; + [IntegrationEvent(false, false)] + local procedure OnAfterCopyFromPurchAdvLetterHeader(PurchAdvLetterHeaderCZZ: Record "Purch. Adv. Letter Header CZZ"; var PurchAdvLetterEntryCZZ: Record "Purch. Adv. Letter Entry CZZ") + begin + end; + [IntegrationEvent(false, false)] local procedure OnBeforeInsertNewEntry(WriteToDatabase: Boolean; var PurchAdvLetterEntryCZZ: Record "Purch. Adv. Letter Entry CZZ") begin diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterHeaderCZZ.Table.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterHeaderCZZ.Table.al index 847bdca347..95b874b056 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterHeaderCZZ.Table.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/PurchAdvLetterHeaderCZZ.Table.al @@ -120,6 +120,7 @@ table 31008 "Purch. Adv. Letter Header CZZ" SetPurchaserCode(Vendor."Purchaser Code", "Purchaser Code"); Validate("Payment Terms Code"); Validate("Payment Method Code"); + Validate("VAT Bus. Posting Group"); Validate("Currency Code"); Validate("Bank Account Code", Vendor."Preferred Bank Account Code"); @@ -1311,6 +1312,7 @@ table 31008 "Purch. Adv. Letter Header CZZ" PurchAdvLetterLineCZZ.Init(); PurchAdvLetterLineCZZ."Document No." := "No."; PurchAdvLetterLineCZZ."Line No." += 10000; + PurchAdvLetterLineCZZ."VAT Bus. Posting Group" := "VAT Bus. Posting Group"; PurchAdvLetterLineCZZ.Validate("VAT Prod. Posting Group", TempPurchAdvLetterLineCZZ."VAT Prod. Posting Group"); PurchAdvLetterLineCZZ.Description := TempPurchAdvLetterLineCZZ.Description; PurchAdvLetterLineCZZ.Validate("Amount Including VAT", TempPurchAdvLetterLineCZZ."Amount Including VAT"); diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterEntryCZZ.Table.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterEntryCZZ.Table.al index 873efb6050..6d177c9bc7 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterEntryCZZ.Table.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterEntryCZZ.Table.al @@ -310,6 +310,7 @@ table 31006 "Sales Adv. Letter Entry CZZ" var SalesAdvLetterHeader: Record "Sales Adv. Letter Header CZZ"; begin + SalesAdvLetterHeader.SetLoadFields("Bill-to Customer No."); SalesAdvLetterHeader.Get("Sales Adv. Letter No."); exit(SalesAdvLetterHeader."Bill-to Customer No."); end; @@ -394,6 +395,13 @@ table 31006 "Sales Adv. Letter Entry CZZ" OnAfterCopyFromVATPostingSetup(VATPostingSetup, Rec); end; + procedure CopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ: Record "Sales Adv. Letter Header CZZ") + begin + "Sales Adv. Letter No." := SalesAdvLetterHeaderCZZ."No."; + "Customer No." := SalesAdvLetterHeaderCZZ."Bill-to Customer No."; + OnAfterCopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ, Rec); + end; + procedure InsertNewEntry(WriteToDatabase: Boolean) EntryNo: Integer var SalesAdvLetterEntryCZZ: Record "Sales Adv. Letter Entry CZZ"; @@ -478,6 +486,11 @@ table 31006 "Sales Adv. Letter Entry CZZ" begin end; + [IntegrationEvent(false, false)] + local procedure OnAfterCopyFromSalesAdvLetterHeader(SalesAdvLetterHeaderCZZ: Record "Sales Adv. Letter Header CZZ"; var SalesAdvLetterEntryCZZ: Record "Sales Adv. Letter Entry CZZ") + begin + end; + [IntegrationEvent(false, false)] local procedure OnBeforeInsertNewEntry(WriteToDatabase: Boolean; var SalesAdvLetterEntryCZZ: Record "Sales Adv. Letter Entry CZZ") begin diff --git a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterHeaderCZZ.Table.al b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterHeaderCZZ.Table.al index cfc55aa612..f14a634470 100644 --- a/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterHeaderCZZ.Table.al +++ b/Apps/CZ/AdvancePaymentsLocalization/app/Src/Tables/SalesAdvLetterHeaderCZZ.Table.al @@ -103,6 +103,7 @@ table 31004 "Sales Adv. Letter Header CZZ" Validate("Payment Terms Code"); Validate("Payment Method Code"); + Validate("VAT Bus. Posting Group"); Validate("Currency Code"); if not SkipBillToContact then @@ -1386,6 +1387,7 @@ table 31004 "Sales Adv. Letter Header CZZ" SalesAdvLetterLineCZZ.Init(); SalesAdvLetterLineCZZ."Document No." := "No."; SalesAdvLetterLineCZZ."Line No." += 10000; + SalesAdvLetterLineCZZ."VAT Bus. Posting Group" := "VAT Bus. Posting Group"; SalesAdvLetterLineCZZ.Validate("VAT Prod. Posting Group", TempSalesAdvLetterLineCZZ."VAT Prod. Posting Group"); SalesAdvLetterLineCZZ.Description := TempSalesAdvLetterLineCZZ.Description; SalesAdvLetterLineCZZ.Validate("Amount Including VAT", TempSalesAdvLetterLineCZZ."Amount Including VAT"); diff --git a/Apps/CZ/BankingDocumentsLocalization/app/Src/Codeunits/NavigateHandlerCZB.Codeunit.al b/Apps/CZ/BankingDocumentsLocalization/app/Src/Codeunits/NavigateHandlerCZB.Codeunit.al index fbcb3c2d39..a361213de5 100644 --- a/Apps/CZ/BankingDocumentsLocalization/app/Src/Codeunits/NavigateHandlerCZB.Codeunit.al +++ b/Apps/CZ/BankingDocumentsLocalization/app/Src/Codeunits/NavigateHandlerCZB.Codeunit.al @@ -16,40 +16,40 @@ codeunit 31434 "Navigate Handler CZB" [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateFindRecords', '', false, false)] local procedure OnAfterNavigateFindRecords(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; - PostingDateFilter: Text; Sender: Page Navigate) + PostingDateFilter: Text) begin - FindIssuedBankStatementHeader(DocumentEntry, DocNoFilter, PostingDateFilter, Sender); - FindIssuedPaymentOrderHeader(DocumentEntry, DocNoFilter, PostingDateFilter, Sender); + FindIssuedBankStatementHeader(DocumentEntry, DocNoFilter, PostingDateFilter); + FindIssuedPaymentOrderHeader(DocumentEntry, DocNoFilter, PostingDateFilter); end; - local procedure FindIssuedBankStatementHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; Navigate: Page Navigate) + local procedure FindIssuedBankStatementHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text) begin if not IssBankStatementHeaderCZB.ReadPermission() then exit; IssBankStatementHeaderCZB.Reset(); IssBankStatementHeaderCZB.SetFilter("No.", DocNoFilter); IssBankStatementHeaderCZB.SetFilter("Document Date", PostingDateFilter); - Navigate.InsertIntoDocEntry( - DocumentEntry, Database::"Iss. Bank Statement Header CZB", Enum::"Document Entry Document Type"::" ", + DocumentEntry.InsertIntoDocEntry( + Database::"Iss. Bank Statement Header CZB", Enum::"Document Entry Document Type"::" ", IssBankStatementHeaderCZB.TableCaption, IssBankStatementHeaderCZB.Count); end; - local procedure FindIssuedPaymentOrderHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; Navigate: Page Navigate) + local procedure FindIssuedPaymentOrderHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text) begin if not IssPaymentOrderHeaderCZB.ReadPermission() then exit; IssPaymentOrderHeaderCZB.Reset(); IssPaymentOrderHeaderCZB.SetFilter("No.", DocNoFilter); IssPaymentOrderHeaderCZB.SetFilter("Document Date", PostingDateFilter); - Navigate.InsertIntoDocEntry( - DocumentEntry, Database::"Iss. Payment Order Header CZB", Enum::"Document Entry Document Type"::" ", + DocumentEntry.InsertIntoDocEntry( + Database::"Iss. Payment Order Header CZB", Enum::"Document Entry Document Type"::" ", IssPaymentOrderHeaderCZB.TableCaption, IssPaymentOrderHeaderCZB.Count); end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateShowRecords', '', false, false)] - local procedure OnBeforeNavigateShowRecords(TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry") + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] + local procedure OnBeforeShowRecords(var TempDocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; var IsHandled: Boolean) begin - case TableID of + case TempDocumentEntry."Table ID" of Database::"Iss. Bank Statement Header CZB": begin IssBankStatementHeaderCZB.Reset(); @@ -61,6 +61,7 @@ codeunit 31434 "Navigate Handler CZB" Page.Run(Page::"Iss. Bank Statement CZB", IssBankStatementHeaderCZB) end else Page.Run(0, IssBankStatementHeaderCZB); + IsHandled := true; end; Database::"Iss. Payment Order Header CZB": begin @@ -73,6 +74,7 @@ codeunit 31434 "Navigate Handler CZB" Page.Run(Page::"Iss. Payment Order CZB", IssPaymentOrderHeaderCZB) end else Page.Run(0, IssPaymentOrderHeaderCZB); + IsHandled := true; end; end; end; diff --git a/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/InstallApplicationCZP.Codeunit.al b/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/InstallApplicationCZP.Codeunit.al index 8fa225fcae..e236b4cefe 100644 --- a/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/InstallApplicationCZP.Codeunit.al +++ b/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/InstallApplicationCZP.Codeunit.al @@ -364,7 +364,6 @@ codeunit 31054 "Install Application CZP" CashDocumentLineCZP."VAT Difference" := CashDocumentLine."VAT Difference"; CashDocumentLineCZP."VAT %" := CashDocumentLine."VAT %"; CashDocumentLineCZP."VAT Identifier" := CashDocumentLine."VAT Identifier"; - CashDocumentLineCZP."VAT Difference (LCY)" := CashDocumentLine."VAT Difference (LCY)"; CashDocumentLineCZP."System-Created Entry" := CashDocumentLine."System-Created Entry"; CashDocumentLineCZP."Gen. Posting Type" := CashDocumentLine."Gen. Posting Type"; CashDocumentLineCZP."VAT Calculation Type" := CashDocumentLine."VAT Calculation Type"; @@ -475,7 +474,6 @@ codeunit 31054 "Install Application CZP" PostedCashDocumentLineCZP."VAT Difference" := PostedCashDocumentLine."VAT Difference"; PostedCashDocumentLineCZP."VAT %" := PostedCashDocumentLine."VAT %"; PostedCashDocumentLineCZP."VAT Identifier" := PostedCashDocumentLine."VAT Identifier"; - PostedCashDocumentLineCZP."VAT Difference (LCY)" := PostedCashDocumentLine."VAT Difference (LCY)"; PostedCashDocumentLineCZP."System-Created Entry" := PostedCashDocumentLine."System-Created Entry"; PostedCashDocumentLineCZP."Gen. Posting Type" := PostedCashDocumentLine."Gen. Posting Type"; PostedCashDocumentLineCZP."VAT Calculation Type" := PostedCashDocumentLine."VAT Calculation Type"; diff --git a/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/NavigateHandlerCZP.Codeunit.al b/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/NavigateHandlerCZP.Codeunit.al index 3b81c14c93..9a0bbc421c 100644 --- a/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/NavigateHandlerCZP.Codeunit.al +++ b/Apps/CZ/CashDeskLocalization/app/Src/Codeunits/NavigateHandlerCZP.Codeunit.al @@ -16,13 +16,13 @@ codeunit 11791 "Navigate Handler CZP" [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateFindRecords', '', false, false)] local procedure OnAfterNavigateFindRecords(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; - PostingDateFilter: Text; Sender: Page Navigate) + PostingDateFilter: Text) begin - FindPostedCashDocumentHdr(DocumentEntry, DocNoFilter, PostingDateFilter, Sender); + FindPostedCashDocumentHdr(DocumentEntry, DocNoFilter, PostingDateFilter); FindCashDeskLedgerEntries(DocumentEntry, DocNoFilter, PostingDateFilter); end; - local procedure FindPostedCashDocumentHdr(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; Navigate: Page Navigate) + local procedure FindPostedCashDocumentHdr(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text) var PostedCashDocumentTxt: Label 'Posted Cash Document'; begin @@ -30,7 +30,7 @@ codeunit 11791 "Navigate Handler CZP" PostedCashDocumentHdrCZP.Reset(); PostedCashDocumentHdrCZP.SetFilter("No.", DocNoFilter); PostedCashDocumentHdrCZP.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry(DocumentEntry, Database::"Posted Cash Document Hdr. CZP", "Document Entry Document Type"::Quote, + DocumentEntry.InsertIntoDocEntry(Database::"Posted Cash Document Hdr. CZP", "Document Entry Document Type"::Quote, PostedCashDocumentTxt, PostedCashDocumentHdrCZP.Count()); end; end; @@ -89,10 +89,10 @@ codeunit 11791 "Navigate Handler CZP" exit(DocEntryNoOfRecords); end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeNavigateShowRecords', '', false, false)] - local procedure OnBeforeNavigateShowRecords(TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry"; var IsHandled: Boolean) + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] + local procedure OnBeforeShowRecords(var TempDocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; var IsHandled: Boolean) begin - case TableID of + case TempDocumentEntry."Table ID" of Database::"Posted Cash Document Hdr. CZP": begin PostedCashDocumentHdrCZP.Reset(); diff --git a/Apps/CZ/CashDeskLocalization/app/Src/Tables/CashDocumentLineCZP.Table.al b/Apps/CZ/CashDeskLocalization/app/Src/Tables/CashDocumentLineCZP.Table.al index f294fb9161..1bfba3ee63 100644 --- a/Apps/CZ/CashDeskLocalization/app/Src/Tables/CashDocumentLineCZP.Table.al +++ b/Apps/CZ/CashDeskLocalization/app/Src/Tables/CashDocumentLineCZP.Table.al @@ -770,9 +770,14 @@ table 11733 "Cash Document Line CZP" { Caption = 'VAT Difference (LCY)'; DataClassification = CustomerContent; - ObsoleteState = Pending; ObsoleteReason = 'Moved to Core Localization Pack for Czech.'; +#if CLEAN25 + ObsoleteState = Removed; + ObsoleteTag = '28.0'; +#else + ObsoleteState = Pending; ObsoleteTag = '18.0'; +#endif } field(63; "System-Created Entry"; Boolean) { diff --git a/Apps/CZ/CompensationLocalization/app/Src/Codeunits/NavigateHandlerCZC.Codeunit.al b/Apps/CZ/CompensationLocalization/app/Src/Codeunits/NavigateHandlerCZC.Codeunit.al index 9fd8e136d3..b5206c1af1 100644 --- a/Apps/CZ/CompensationLocalization/app/Src/Codeunits/NavigateHandlerCZC.Codeunit.al +++ b/Apps/CZ/CompensationLocalization/app/Src/Codeunits/NavigateHandlerCZC.Codeunit.al @@ -14,12 +14,12 @@ codeunit 31266 "Navigate Handler CZC" [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateFindRecords', '', false, false)] local procedure OnAfterNavigateFindRecords(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; - PostingDateFilter: Text; Sender: Page Navigate) + PostingDateFilter: Text) begin - FindPostedCompesationHeader(DocumentEntry, DocNoFilter, PostingDateFilter, Sender); + FindPostedCompesationHeader(DocumentEntry, DocNoFilter, PostingDateFilter); end; - local procedure FindPostedCompesationHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; Navigate: Page Navigate) + local procedure FindPostedCompesationHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text) var PostedCompensationTxt: Label 'Posted Compensation'; DocumentEntryDocumentType: Enum "Document Entry Document Type"; @@ -28,7 +28,7 @@ codeunit 31266 "Navigate Handler CZC" PostedCompensationHeaderCZC.Reset(); PostedCompensationHeaderCZC.SetFilter("No.", DocNoFilter); PostedCompensationHeaderCZC.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry(DocumentEntry, Database::"Posted Compensation Header CZC", DocumentEntryDocumentType::" ", + DocumentEntry.InsertIntoDocEntry(Database::"Posted Compensation Header CZC", DocumentEntryDocumentType::" ", PostedCompensationTxt, PostedCompensationHeaderCZC.Count()); end; end; @@ -63,10 +63,10 @@ codeunit 31266 "Navigate Handler CZC" exit(DocumentEntry."No. of Records"); end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeNavigateShowRecords', '', false, false)] - local procedure OnBeforeNavigateShowRecords(TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry"; var IsHandled: Boolean) + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] + local procedure OnBeforeShowRecords(var TempDocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; var IsHandled: Boolean) begin - case TableID of + case TempDocumentEntry."Table ID" of Database::"Posted Compensation Header CZC": begin PostedCompensationHeaderCZC.Reset(); diff --git a/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CommonModuleCZ.Codeunit.al b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CommonModuleCZ.Codeunit.al new file mode 100644 index 0000000000..91d3b8a3bb --- /dev/null +++ b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CommonModuleCZ.Codeunit.al @@ -0,0 +1,23 @@ +codeunit 31210 "Common Module CZ" +{ + InherentEntitlements = X; + InherentPermissions = X; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Contoso Demo Tool", 'OnAfterGeneratingDemoData', '', false, false)] + local procedure LocalizationVATPostingSetup(Module: Enum "Contoso Demo Data Module"; ContosoDemoDataLevel: Enum "Contoso Demo Data Level") + var + ContosoPostingSetup: Codeunit "Contoso Posting Setup"; + CommonPostingGroup: Codeunit "Create Common Posting Group"; + CommonGLAccount: Codeunit "Create Common GL Account"; + LocalStandardVATPercentage: Decimal; + begin + if Module = Enum::"Contoso Demo Data Module"::"Common Module" then + if ContosoDemoDataLevel = Enum::"Contoso Demo Data Level"::"Setup Data" then begin + LocalStandardVATPercentage := 21; + ContosoPostingSetup.SetOverwriteData(true); + ContosoPostingSetup.InsertVATPostingSetup(CommonPostingGroup.Domestic(), CommonPostingGroup.StandardVAT(), CommonGLAccount.SalesVATStandard(), CommonGLAccount.PurchaseVATStandard(), CommonPostingGroup.StandardVAT(), LocalStandardVATPercentage, Enum::"Tax Calculation Type"::"Normal VAT"); + ContosoPostingSetup.SetOverwriteData(false); + end; + end; +} + diff --git a/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/ContosoDemoDataSetupCZ.Codeunit.al b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/ContosoDemoDataSetupCZ.Codeunit.al new file mode 100644 index 0000000000..ffc479b62c --- /dev/null +++ b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/ContosoDemoDataSetupCZ.Codeunit.al @@ -0,0 +1,11 @@ +codeunit 31211 "Contoso Demo Data Setup CZ" +{ + InherentPermissions = X; + InherentEntitlements = X; + + [EventSubscriber(ObjectType::Table, Database::"Contoso Coffee Demo Data Setup", 'OnBeforeInsertEvent', '', false, false)] + local procedure LocalDemoDataSetup(var Rec: Record "Contoso Coffee Demo Data Setup") + begin + Rec."Country/Region Code" := 'CZ'; + end; +} \ No newline at end of file diff --git a/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CreateCZGLAccounts.Codeunit.al b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CreateCZGLAccounts.Codeunit.al new file mode 100644 index 0000000000..a61774ec57 --- /dev/null +++ b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/CreateCZGLAccounts.Codeunit.al @@ -0,0 +1,291 @@ +codeunit 31212 "Create CZ GL Accounts" +{ + InherentPermissions = X; + InherentEntitlements = X; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Create Common GL Account", 'OnAfterAddGLAccountsForLocalization', '', false, false)] + local procedure ModifyCommonGLAccounts() + var + InventorySetup: Record "Inventory Setup"; + ContosoGLAccount: Codeunit "Contoso GL Account"; + CommonGLAccount: Codeunit "Create Common GL Account"; + begin + InventorySetup.Get(); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.CustomerDomesticName(), '311100'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.VendorDomesticName(), '321100'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.SalesDomesticName(), '604110'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.PurchaseDomesticName(), '131050'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.SalesVATStandardName(), '343521'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.PurchaseVATStandardName(), '343121'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.DirectCostAppliedRawMatName(), '111100'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.DirectCostAppliedRetailName(), '131050'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.OverheadAppliedRawMatName(), '501990'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.OverheadAppliedRetailName(), '501990'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.PurchaseVarianceRawMatName(), '112200'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.PurchaseVarianceRetailName(), '132200'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.InventoryAdjRawMatName(), '131950'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.InventoryAdjRetailName(), '131450'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.RawMaterialsName(), '112100'); + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.PurchRawMatDomName(), '131500'); + + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.ResalesName(), '132100'); + if InventorySetup."Expected Cost Posting to G/L" then + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.ResaleInterimName(), '132110') + else + ContosoGLAccount.AddAccountForLocalization(CommonGLAccount.ResaleInterimName(), ''); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Create Svc GL Account", 'OnAfterAddGLAccountsForLocalization', '', false, false)] + local procedure ModifyServiceGLAccounts() + var + ContosoGLAccount: Codeunit "Contoso GL Account"; + SvcGLAccount: Codeunit "Create Svc GL Account"; + begin + ContosoGLAccount.AddAccountForLocalization(SvcGLAccount.ServiceContractSaleName(), '602220'); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Create Mfg GL Account", 'OnAfterAddGLAccountsForLocalization', '', false, false)] + local procedure ModifyManufacturingGLAccounts() + var + ContosoGLAccount: Codeunit "Contoso GL Account"; + MfgGLAccount: Codeunit "Create Mfg GL Account"; + begin + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.DirectCostAppliedCapName(), '518900'); + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.OverheadAppliedCapName(), '511200'); + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.PurchaseVarianceCapName(), '511300'); + + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.MaterialVarianceName(), '581100'); + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.CapacityVarianceName(), '581200'); + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.SubcontractedVarianceName(), '581400'); + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.CapOverheadVarianceName(), '581300'); + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.MfgOverheadVarianceName(), '581300'); + + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.FinishedGoodsName(), '123100'); + ContosoGLAccount.AddAccountForLocalization(MfgGLAccount.WIPAccountFinishedGoodsName(), '121100'); + end; + + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Create FA GL Account", 'OnAfterAddGLAccountsForLocalization', '', false, false)] + local procedure ModifyFixedAssetGLAccounts() + var + ContosoGLAccount: Codeunit "Contoso GL Account"; + FAGLAccount: Codeunit "Create FA GL Account"; + FixedAssetModuleCZ: Codeunit "Fixed Asset Module CZ"; + begin + ContosoGLAccount.AddAccountForLocalization(FAGLAccount.IncreasesDuringTheYearName(), ''); + ContosoGLAccount.AddAccountForLocalization(FAGLAccount.DecreasesDuringTheYearName(), '022300'); + ContosoGLAccount.AddAccountForLocalization(FAGLAccount.AccumDepreciationBuildingsName(), '082300'); + ContosoGLAccount.AddAccountForLocalization(FAGLAccount.MiscellaneousName(), '511100'); + ContosoGLAccount.AddAccountForLocalization(FAGLAccount.DepreciationEquipmentName(), '551300'); + ContosoGLAccount.AddAccountForLocalization(FAGLAccount.GainsAndLossesName(), '022300'); + + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostBuildingsName(), '021100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AcquisitionCostBuildings(), FixedAssetModuleCZ.AcquisitionCostBuildingsName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FAGLAccount.AccumDepreciationBuildingsName(), '081100'); + ContosoGLAccount.InsertGLAccount(FAGLAccount.AccumDepreciationBuildings(), FAGLAccount.AccumDepreciationBuildingsName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownBuildingsName(), '021100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2BuildingsName(), '042100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.Custom2Buildings(), FixedAssetModuleCZ.Custom2BuildingsName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqCostonDisposalBuildingsName(), '021100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepronDisposalBuildingsName(), '081100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AccumDepronDisposalBuildings(), FixedAssetModuleCZ.AccumDepronDisposalBuildingsName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownonDisposalBuildingsName(), '021100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2onDisposalBuildingsName(), '042100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.GainsonDisposalBuildingsName(), '551900'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.GainsonDisposalBuildings(), FixedAssetModuleCZ.GainsonDisposalBuildingsName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.LossesonDisposalBuildingsName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispGainBuildingsName(), '541100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.BookValonDispGainBuildings(), FixedAssetModuleCZ.BookValonDispGainBuildingsName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispLossBuildingsName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispGainBuildingsName(), '081100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispLossBuildingsName(), '081100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.MaintenanceExpenseBuildingsName(), '511100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.MaintenanceExpenseBuildings(), FixedAssetModuleCZ.MaintenanceExpenseBuildingsName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostBalBuildingsName(), '042100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.DepreciationExpenseBuildingsName(), '551100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqusitionCostBalonDisposalBuildingsName(), '081100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.ApprecBalonDispBuildingsName(), '081100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationonDisposalBuildingsName(), '021100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationBuildingsName(), '021100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationBalBuildingsName(), '042100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesBalBuildingsName(), '395100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.SalesBalBuildings(), FixedAssetModuleCZ.SalesBalBuildingsName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValueBalonDisposalBuildingsName(), '081100'); + + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostGoodwillName(), '015100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AcquisitionCostGoodwill(), FixedAssetModuleCZ.AcquisitionCostGoodwillName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepreciationGoodwillName(), '075100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AccumDepreciationGoodwill(), FixedAssetModuleCZ.AccumDepreciationGoodwillName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownGoodwillName(), '015100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2GoodwillName(), '041100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.Custom2Goodwill(), FixedAssetModuleCZ.Custom2GoodwillName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqCostonDisposalGoodwillName(), '015100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepronDisposalGoodwillName(), '075100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownonDisposalGoodwillName(), '015100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2onDisposalGoodwillName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.GainsonDisposalGoodwillName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.LossesonDisposalGoodwillName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispGainGoodwillName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispLossGoodwillName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispGainGoodwillName(), '075100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispLossGoodwillName(), '075100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.MaintenanceExpenseGoodwillName(), '511100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostBalGoodwillName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.DepreciationExpenseGoodwillName(), '551700'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.DepreciationExpenseGoodwill(), FixedAssetModuleCZ.DepreciationExpenseGoodwillName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqusitionCostBalonDisposalGoodwillName(), '075100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.ApprecBalonDispGoodwillName(), '075100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationonDisposalGoodwillName(), '015100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationGoodwillName(), '015100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationBalGoodwillName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesBalGoodwillName(), '395100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValueBalonDisposalGoodwillName(), '075100'); + + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostVehiclesName(), '022300'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AcquisitionCostVehicles(), FixedAssetModuleCZ.AcquisitionCostVehiclesName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepreciationVehiclesName(), '082300'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AccumDepreciationVehicles(), FixedAssetModuleCZ.AccumDepreciationVehiclesName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownVehiclesName(), '022300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2VehiclesName(), '042300'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.Custom2Vehicles(), FixedAssetModuleCZ.Custom2VehiclesName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqCostonDisposalVehiclesName(), '022300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepronDisposalVehiclesName(), '082300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownonDisposalVehiclesName(), '022300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2onDisposalVehiclesName(), '042300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.GainsonDisposalVehiclesName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.LossesonDisposalVehiclesName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispGainVehiclesName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispLossVehiclesName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispGainVehiclesName(), '082300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispLossVehiclesName(), '082300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.MaintenanceExpenseVehiclesName(), '511100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostBalVehiclesName(), '042300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.DepreciationExpenseVehiclesName(), '551300'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.DepreciationExpenseVehicles(), FixedAssetModuleCZ.DepreciationExpenseVehiclesName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqusitionCostBalonDisposalVehiclesName(), '082300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.ApprecBalonDispVehiclesName(), '082300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationonDisposalVehiclesName(), '022300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationVehiclesName(), '022300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationBalVehiclesName(), '042300'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesBalVehiclesName(), '395100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValueBalonDisposalVehiclesName(), '082300'); + + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostEquipmentName(), '022100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AcquisitionCostEquipment(), FixedAssetModuleCZ.AcquisitionCostEquipmentName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepreciationEquipmentName(), '082100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AccumDepreciationEquipment(), FixedAssetModuleCZ.AccumDepreciationEquipmentName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownEquipmentName(), '022100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2EquipmentName(), '042200'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.Custom2Equipment(), FixedAssetModuleCZ.Custom2EquipmentName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqCostonDisposalEquipmentName(), '022100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepronDisposalEquipmentName(), '082100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownonDisposalEquipmentName(), '022100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2onDisposalEquipmentName(), '042200'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.GainsonDisposalEquipmentName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.LossesonDisposalEquipmentName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispGainEquipmentName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispLossEquipmentName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispGainEquipmentName(), '082100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispLossEquipmentName(), '082100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.MaintenanceExpenseEquipmentName(), '511100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostBalEquipmentName(), '042200'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.DepreciationExpenseEquipmentName(), '551200'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.DepreciationExpenseEquipment(), FixedAssetModuleCZ.DepreciationExpenseEquipmentName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqusitionCostBalonDisposalEquipmentName(), '082100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.ApprecBalonDispEquipmentName(), '082100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationonDisposalEquipmentName(), '022100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationEquipmentName(), '022100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationBalEquipmentName(), '042200'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesBalEquipmentName(), '395100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValueBalonDisposalEquipmentName(), '082100'); + + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostPatentsName(), '012100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AcquisitionCostPatents(), FixedAssetModuleCZ.AcquisitionCostPatentsName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepreciationPatentsName(), '072100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AccumDepreciationPatents(), FixedAssetModuleCZ.AccumDepreciationPatentsName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownPatentsName(), '012100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2PatentsName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqCostonDisposalPatentsName(), '012100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepronDisposalPatentsName(), '072100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownonDisposalPatentsName(), '012100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2onDisposalPatentsName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.GainsonDisposalPatentsName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.LossesonDisposalPatentsName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispGainPatentsName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispLossPatentsName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispGainPatentsName(), '072100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispLossPatentsName(), '072100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.MaintenanceExpensePatentsName(), '511100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostBalPatentsName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.DepreciationExpensePatentsName(), '551400'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.DepreciationExpensePatents(), FixedAssetModuleCZ.DepreciationExpensePatentsName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqusitionCostBalonDisposalPatentsName(), '072100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.ApprecBalonDispPatentsName(), '072100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationonDisposalPatentsName(), '012100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationPatentsName(), '012100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationBalPatentsName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesBalPatentsName(), '395100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValueBalonDisposalPatentsName(), '072100'); + + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostSoftwareName(), '013100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AcquisitionCostSoftware(), FixedAssetModuleCZ.AcquisitionCostSoftwareName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepreciationSoftwareName(), '073100'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.AccumDepreciationSoftware(), FixedAssetModuleCZ.AccumDepreciationSoftwareName(), Enum::"G/L Account Income/Balance"::"Balance Sheet", Enum::"G/L Account Category"::Assets, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownSoftwareName(), '013100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2SoftwareName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqCostonDisposalSoftwareName(), '013100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AccumDepronDisposalSoftwareName(), '073100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.WriteDownonDisposalSoftwareName(), '013100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.Custom2onDisposalSoftwareName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.GainsonDisposalSoftwareName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.LossesonDisposalSoftwareName(), '551900'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispGainSoftwareName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValonDispLossSoftwareName(), '541100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispGainSoftwareName(), '073100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesonDispLossSoftwareName(), '073100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.MaintenanceExpenseSoftwareName(), '511100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcquisitionCostBalSoftwareName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.DepreciationExpenseSoftwareName(), '551500'); + ContosoGLAccount.InsertGLAccount(FixedAssetModuleCZ.DepreciationExpenseSoftware(), FixedAssetModuleCZ.DepreciationExpenseSoftwareName(), Enum::"G/L Account Income/Balance"::"Income Statement", Enum::"G/L Account Category"::Expense, Enum::"G/L Account Type"::Posting); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AcqusitionCostBalonDisposalSoftwareName(), '073100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.ApprecBalonDispSoftwareName(), '073100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationonDisposalSoftwareName(), '013100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationSoftwareName(), '013100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.AppreciationBalSoftwareName(), '041100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.SalesBalSoftwareName(), '395100'); + ContosoGLAccount.AddAccountForLocalization(FixedAssetModuleCZ.BookValueBalonDisposalSoftwareName(), '073100'); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Create HR GL Account", 'OnAfterAddGLAccountsForLocalization', '', false, false)] + local procedure ModifyHumanResourcesGLAccounts() + var + ContosoGLAccount: Codeunit "Contoso GL Account"; + HRGLAccount: Codeunit "Create HR GL Account"; + begin + ContosoGLAccount.AddAccountForLocalization(HRGLAccount.EmployeesPayableName(), '333100'); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Create Job GL Account", 'OnAfterAddGLAccountsForLocalization', '', false, false)] + local procedure ModifyJobGLAccounts() + var + ContosoGLAccount: Codeunit "Contoso GL Account"; + JobGLAccount: Codeunit "Create Job GL Account"; + begin + ContosoGLAccount.AddAccountForLocalization(JobGLAccount.WIPInvoicedSalesName(), '121100'); + ContosoGLAccount.AddAccountForLocalization(JobGLAccount.WIPJobCostsName(), '121100'); + + ContosoGLAccount.AddAccountForLocalization(JobGLAccount.JobSalesAppliedName(), '602500'); + ContosoGLAccount.AddAccountForLocalization(JobGLAccount.RecognizedSalesName(), '602500'); + + ContosoGLAccount.AddAccountForLocalization(JobGLAccount.JobCostsAppliedName(), '581100'); + ContosoGLAccount.AddAccountForLocalization(JobGLAccount.RecognizedCostsName(), '581100'); + end; +} \ No newline at end of file diff --git a/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/FixedAssetModuleCZ.Codeunit.al b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/FixedAssetModuleCZ.Codeunit.al new file mode 100644 index 0000000000..933b195272 --- /dev/null +++ b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/Codeunits/FixedAssetModuleCZ.Codeunit.al @@ -0,0 +1,1561 @@ +codeunit 31213 "Fixed Asset Module CZ" +{ + InherentEntitlements = X; + InherentPermissions = X; + + Access = Internal; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Contoso Demo Tool", 'OnAfterGeneratingDemoData', '', false, false)] + local procedure LocalizationFA(Module: Enum "Contoso Demo Data Module"; ContosoDemoDataLevel: Enum "Contoso Demo Data Level") + var + ContosoFixedAsset: Codeunit "Contoso Fixed Asset"; + CreateFAPostingGroup: Codeunit "Create FA Posting Group"; + FAGLAccount: Codeunit "Create FA GL Account"; + begin + if Module = Enum::"Contoso Demo Data Module"::"Fixed Asset Module" then + if ContosoDemoDataLevel = Enum::"Contoso Demo Data Level"::"Setup Data" then begin + ContosoFixedAsset.SetOverwriteData(true); + + InsertFAPostingGroup(CreateFAPostingGroup.Property(), AcquisitionCostBuildings(), FAGLAccount.AccumDepreciationBuildings(), WriteDownBuildings(), Custom2Buildings(), AcqCostonDisposalBuildings(), AccumDepronDisposalBuildings(), WriteDownonDisposalBuildings(), Custom2onDisposalBuildings(), GainsonDisposalBuildings(), LossesonDisposalBuildings(), BookValonDispGainBuildings(), BookValonDispLossBuildings(), SalesonDispGainBuildings(), SalesonDispLossBuildings(), MaintenanceExpenseBuildings(), + DepreciationExpenseBuildings(), AcquisitionCostBalBuildings(), AcqusitionCostBalonDisposalBuildings(), ApprecBalonDispBuildings(), AppreciationonDisposalBuildings(), AppreciationBuildings(), AppreciationBalBuildings(), SalesBalBuildings(), BookValueBalonDisposalBuildings()); + + InsertFAPostingGroup(CreateFAPostingGroup.Goodwill(), AcquisitionCostGoodwill(), AccumDepreciationGoodwill(), WriteDownGoodwill(), Custom2Goodwill(), AcqCostonDisposalGoodwill(), AccumDepronDisposalGoodwill(), WriteDownonDisposalGoodwill(), Custom2onDisposalGoodwill(), GainsonDisposalGoodwill(), LossesonDisposalGoodwill(), BookValonDispGainGoodwill(), BookValonDispLossGoodwill(), SalesonDispGainGoodwill(), SalesonDispLossGoodwill(), MaintenanceExpenseGoodwill(), + DepreciationExpenseGoodwill(), AcquisitionCostBalGoodwill(), AcqusitionCostBalonDisposalGoodwill(), ApprecBalonDispGoodwill(), AppreciationonDisposalGoodwill(), AppreciationGoodwill(), AppreciationBalGoodwill(), SalesBalGoodwill(), BookValueBalonDisposalGoodwill()); + + InsertFAPostingGroup(CreateFAPostingGroup.Vehicles(), AcquisitionCostVehicles(), AccumDepreciationVehicles(), WriteDownVehicles(), Custom2Vehicles(), AcqCostonDisposalVehicles(), AccumDepronDisposalVehicles(), WriteDownonDisposalVehicles(), Custom2onDisposalVehicles(), GainsonDisposalVehicles(), LossesonDisposalVehicles(), BookValonDispGainVehicles(), BookValonDispLossVehicles(), SalesonDispGainVehicles(), SalesonDispLossVehicles(), MaintenanceExpenseVehicles(), + DepreciationExpenseVehicles(), AcquisitionCostBalVehicles(), AcqusitionCostBalonDisposalVehicles(), ApprecBalonDispVehicles(), AppreciationonDisposalVehicles(), AppreciationVehicles(), AppreciationBalVehicles(), SalesBalVehicles(), BookValueBalonDisposalVehicles()); + + InsertFAPostingGroup(CreateFAPostingGroup.Equipment(), AcquisitionCostEquipment(), AccumDepreciationEquipment(), WriteDownEquipment(), Custom2Equipment(), AcqCostonDisposalEquipment(), AccumDepronDisposalEquipment(), WriteDownonDisposalEquipment(), Custom2onDisposalEquipment(), GainsonDisposalEquipment(), LossesonDisposalEquipment(), BookValonDispGainEquipment(), BookValonDispLossEquipment(), SalesonDispGainEquipment(), SalesonDispLossEquipment(), MaintenanceExpenseEquipment(), + DepreciationExpenseEquipment(), AcquisitionCostBalEquipment(), AcqusitionCostBalonDisposalEquipment(), ApprecBalonDispEquipment(), AppreciationonDisposalEquipment(), AppreciationEquipment(), AppreciationBalEquipment(), SalesBalEquipment(), BookValueBalonDisposalEquipment()); + + InsertFAPostingGroup(Furniture(), AcquisitionCostEquipment(), AccumDepreciationEquipment(), WriteDownEquipment(), Custom2Equipment(), AcqCostonDisposalEquipment(), AccumDepronDisposalEquipment(), WriteDownonDisposalEquipment(), Custom2onDisposalEquipment(), GainsonDisposalEquipment(), LossesonDisposalEquipment(), BookValonDispGainEquipment(), BookValonDispLossEquipment(), SalesonDispGainEquipment(), SalesonDispLossEquipment(), MaintenanceExpenseEquipment(), + DepreciationExpenseEquipment(), AcquisitionCostBalEquipment(), AcqusitionCostBalonDisposalEquipment(), ApprecBalonDispEquipment(), AppreciationonDisposalEquipment(), AppreciationEquipment(), AppreciationBalEquipment(), SalesBalEquipment(), BookValueBalonDisposalEquipment()); + + InsertFAPostingGroup(Patents(), AcquisitionCostPatents(), AccumDepreciationPatents(), WriteDownPatents(), Custom2Patents(), AcqCostonDisposalPatents(), AccumDepronDisposalPatents(), WriteDownonDisposalPatents(), Custom2onDisposalPatents(), GainsonDisposalPatents(), LossesonDisposalPatents(), BookValonDispGainPatents(), BookValonDispLossPatents(), SalesonDispGainPatents(), SalesonDispLossPatents(), MaintenanceExpensePatents(), + DepreciationExpensePatents(), AcquisitionCostBalPatents(), AcqusitionCostBalonDisposalPatents(), ApprecBalonDispPatents(), AppreciationonDisposalPatents(), AppreciationPatents(), AppreciationBalPatents(), SalesBalPatents(), BookValueBalonDisposalPatents()); + + InsertFAPostingGroup(Software(), AcquisitionCostSoftware(), AccumDepreciationSoftware(), WriteDownSoftware(), Custom2Software(), AcqCostonDisposalSoftware(), AccumDepronDisposalSoftware(), WriteDownonDisposalSoftware(), Custom2onDisposalSoftware(), GainsonDisposalSoftware(), LossesonDisposalSoftware(), BookValonDispGainSoftware(), BookValonDispLossSoftware(), SalesonDispGainSoftware(), SalesonDispLossSoftware(), MaintenanceExpenseSoftware(), + DepreciationExpenseSoftware(), AcquisitionCostBalSoftware(), AcqusitionCostBalonDisposalSoftware(), ApprecBalonDispSoftware(), AppreciationonDisposalSoftware(), AppreciationSoftware(), AppreciationBalSoftware(), SalesBalSoftware(), BookValueBalonDisposalSoftware()); + + ContosoFixedAsset.SetOverwriteData(false); + end; + end; + + procedure InsertFAPostingGroup(GroupCode: Code[20]; AcquisitionCostAccount: Code[20]; AccumDepreciationAccount: Code[20]; WriteDownAccount: Code[20]; Custom2Account: Code[20]; AcqCostAccOnDisposal: Code[20]; AccumDeprAccOnDisposal: Code[20]; WriteDownAccOnDisposal: Code[20]; Custom2AccountOnDisposal: Code[20]; GainsAccOnDisposal: Code[20]; LossesAccOnDisposal: Code[20]; BookValAccOnDispGain: Code[20]; BookValAccOnDispLoss: Code[20]; + SalesAccOnDispGain: Code[20]; SalesAccOnDispLoss: Code[20]; MaintenanceExpenseAccount: Code[20]; DepreciationExpenseAcc: Code[20]; AcquisitionCostBalAcc: Code[20]; AcqCostBalAccDispCZF: Code[20]; ApprecBalAccOnDisp: Code[20]; AppreciationAccOnDisposal: Code[20]; AppreciationAccount: Code[20]; AppreciationBalAccount: Code[20]; SalesBalAcc: Code[20]; BookValueBalAccOnDisposal: Code[20]) + var + FAPostingGroup: Record "FA Posting Group"; + Exists: Boolean; + begin + if FAPostingGroup.Get(GroupCode) then + Exists := true; + + FAPostingGroup.Validate(Code, GroupCode); + FAPostingGroup.Validate("Acquisition Cost Account", AcquisitionCostAccount); + FAPostingGroup.Validate("Accum. Depreciation Account", AccumDepreciationAccount); + FAPostingGroup.Validate("Write-Down Account", WriteDownAccount); + FAPostingGroup.Validate("Custom 2 Account", Custom2Account); + FAPostingGroup.Validate("Acq. Cost Acc. on Disposal", AcqCostAccOnDisposal); + FAPostingGroup.Validate("Accum. Depr. Acc. on Disposal", AccumDeprAccOnDisposal); + FAPostingGroup.Validate("Write-Down Acc. on Disposal", WriteDownAccOnDisposal); + FAPostingGroup.Validate("Custom 2 Account on Disposal", Custom2AccountOnDisposal); + FAPostingGroup.Validate("Gains Acc. on Disposal", GainsAccOnDisposal); + FAPostingGroup.Validate("Losses Acc. on Disposal", LossesAccOnDisposal); + FAPostingGroup.Validate("Book Val. Acc. on Disp. (Gain)", BookValAccOnDispGain); + FAPostingGroup.Validate("Book Val. Acc. on Disp. (Loss)", BookValAccOnDispLoss); + FAPostingGroup.Validate("Sales Acc. on Disp. (Gain)", SalesAccOnDispGain); + FAPostingGroup.Validate("Sales Acc. on Disp. (Loss)", SalesAccOnDispLoss); + FAPostingGroup.Validate("Maintenance Expense Account", MaintenanceExpenseAccount); + FAPostingGroup.Validate("Depreciation Expense Acc.", DepreciationExpenseAcc); + FAPostingGroup.Validate("Acquisition Cost Bal. Acc.", AcquisitionCostBalAcc); + FAPostingGroup.Validate("Acq. Cost Bal. Acc. Disp. CZF", AcqCostBalAccDispCZF); + FAPostingGroup.Validate("Apprec. Bal. Acc. on Disp.", ApprecBalAccOnDisp); + FAPostingGroup.Validate("Appreciation Acc. on Disposal", AppreciationAccOnDisposal); + FAPostingGroup.Validate("Appreciation Account", AppreciationAccount); + FAPostingGroup.Validate("Appreciation Bal. Account", AppreciationBalAccount); + FAPostingGroup.Validate("Sales Bal. Acc.", SalesBalAcc); + FAPostingGroup.Validate("Book Value Bal. Acc. Disp. CZF", BookValueBalAccOnDisposal); + + if Exists then + FAPostingGroup.Modify(true) + else + FAPostingGroup.Insert(true); + end; + + procedure Furniture(): Code[20] + begin + exit(FurnitureLbl); + end; + + procedure Patents(): Code[20] + begin + exit(PatentsLbl); + end; + + procedure Software(): Code[20] + begin + exit(SoftwareLbl); + end; + + procedure AcquisitionCostBuildingsName(): Text[100] + begin + exit(BuildingsLbl); + end; + + procedure AcquisitionCostBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostBuildingsName())); + end; + + procedure WriteDownBuildingsName(): Text[100] + begin + exit(BuildingsLbl); + end; + + procedure WriteDownBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownBuildingsName())); + end; + + procedure Custom2BuildingsName(): Text[100] + begin + exit(AcquisitionofbuildingsLbl); + end; + + procedure Custom2Buildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2BuildingsName())); + end; + + procedure AcqCostonDisposalBuildingsName(): Text[100] + begin + exit(BuildingsLbl); + end; + + procedure AcqCostonDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqCostonDisposalBuildingsName())); + end; + + procedure AccumDepronDisposalBuildingsName(): Text[100] + begin + exit(AccumulateddepreciationofbuildingsLbl); + end; + + procedure AccumDepronDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepronDisposalBuildingsName())); + end; + + procedure WriteDownonDisposalBuildingsName(): Text[100] + begin + exit(BuildingsLbl); + end; + + procedure WriteDownonDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownonDisposalBuildingsName())); + end; + + procedure Custom2onDisposalBuildingsName(): Text[100] + begin + exit(AcquisitionofbuildingsLbl); + end; + + procedure Custom2onDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2onDisposalBuildingsName())); + end; + + procedure GainsonDisposalBuildingsName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure GainsonDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(GainsonDisposalBuildingsName())); + end; + + procedure LossesonDisposalBuildingsName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure LossesonDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(LossesonDisposalBuildingsName())); + end; + + procedure BookValonDispGainBuildingsName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispGainBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispGainBuildingsName())); + end; + + procedure BookValonDispLossBuildingsName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispLossBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispLossBuildingsName())); + end; + + procedure SalesonDispGainBuildingsName(): Text[100] + begin + exit(AccumulateddepreciationofbuildingsLbl); + end; + + procedure SalesonDispGainBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispGainBuildingsName())); + end; + + procedure SalesonDispLossBuildingsName(): Text[100] + begin + exit(AccumulateddepreciationofbuildingsLbl); + end; + + procedure SalesonDispLossBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispLossBuildingsName())); + end; + + procedure MaintenanceExpenseBuildingsName(): Text[100] + begin + exit(RepairsandMaintenanceLbl); + end; + + procedure MaintenanceExpenseBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(MaintenanceExpenseBuildingsName())); + end; + + procedure AcquisitionCostBalBuildingsName(): Text[100] + begin + exit(AcquisitionofbuildingsLbl); + end; + + procedure AcquisitionCostBalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostBalBuildingsName())); + end; + + procedure DepreciationExpenseBuildingsName(): Text[100] + begin + exit(RepairsandMaintenanceLbl); + end; + + procedure DepreciationExpenseBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(DepreciationExpenseBuildingsName())); + end; + + procedure AcqusitionCostBalonDisposalBuildingsName(): Text[100] + begin + exit(AccumulateddepreciationofbuildingsLbl); + end; + + procedure AcqusitionCostBalonDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqusitionCostBalonDisposalBuildingsName())); + end; + + procedure ApprecBalonDispBuildingsName(): Text[100] + begin + exit(AccumulateddepreciationofbuildingsLbl); + end; + + procedure ApprecBalonDispBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(ApprecBalonDispBuildingsName())); + end; + + procedure AppreciationonDisposalBuildingsName(): Text[100] + begin + exit(BuildingsLbl); + end; + + procedure AppreciationonDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationonDisposalBuildingsName())); + end; + + procedure AppreciationBuildingsName(): Text[100] + begin + exit(BuildingsLbl); + end; + + procedure AppreciationBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationBuildingsName())); + end; + + procedure AppreciationBalBuildingsName(): Text[100] + begin + exit(AcquisitionofbuildingsLbl); + end; + + procedure AppreciationBalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationBalBuildingsName())); + end; + + procedure SalesBalBuildingsName(): Text[100] + begin + exit(InternalsettlementLbl); + end; + + procedure SalesBalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesBalBuildingsName())); + end; + + procedure BookValueBalonDisposalBuildingsName(): Text[100] + begin + exit(AccumulateddepreciationofbuildingsLbl); + end; + + procedure BookValueBalonDisposalBuildings(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValueBalonDisposalBuildingsName())); + end; + + procedure AcquisitionCostGoodwillName(): Text[100] + begin + exit(GoodwillLbl); + end; + + procedure AcquisitionCostGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostGoodwillName())); + end; + + procedure WriteDownGoodwillName(): Text[100] + begin + exit(GoodwillLbl); + end; + + procedure WriteDownGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownGoodwillName())); + end; + + procedure AccumDepreciationGoodwillName(): Text[100] + begin + exit(CorrectionstogoodwillLbl); + end; + + procedure AccumDepreciationGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepreciationGoodwillName())); + end; + + procedure Custom2GoodwillName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure Custom2Goodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2GoodwillName())); + end; + + procedure AcqCostonDisposalGoodwillName(): Text[100] + begin + exit(GoodwillLbl); + end; + + procedure AcqCostonDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqCostonDisposalGoodwillName())); + end; + + procedure AccumDepronDisposalGoodwillName(): Text[100] + begin + exit(CorrectionstogoodwillLbl); + end; + + procedure AccumDepronDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepronDisposalGoodwillName())); + end; + + procedure WriteDownonDisposalGoodwillName(): Text[100] + begin + exit(GoodwillLbl); + end; + + procedure WriteDownonDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownonDisposalGoodwillName())); + end; + + procedure Custom2onDisposalGoodwillName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure Custom2onDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2onDisposalGoodwillName())); + end; + + procedure GainsonDisposalGoodwillName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure GainsonDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(GainsonDisposalGoodwillName())); + end; + + procedure LossesonDisposalGoodwillName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure LossesonDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(LossesonDisposalGoodwillName())); + end; + + procedure BookValonDispGainGoodwillName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispGainGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispGainGoodwillName())); + end; + + procedure BookValonDispLossGoodwillName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispLossGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispLossGoodwillName())); + end; + + procedure SalesonDispGainGoodwillName(): Text[100] + begin + exit(CorrectionstogoodwillLbl); + end; + + procedure SalesonDispGainGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispGainGoodwillName())); + end; + + procedure SalesonDispLossGoodwillName(): Text[100] + begin + exit(CorrectionstogoodwillLbl); + end; + + procedure SalesonDispLossGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispLossGoodwillName())); + end; + + procedure MaintenanceExpenseGoodwillName(): Text[100] + begin + exit(RepairsandMaintenanceLbl); + end; + + procedure MaintenanceExpenseGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(MaintenanceExpenseGoodwillName())); + end; + + procedure AcquisitionCostBalGoodwillName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure AcquisitionCostBalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostBalGoodwillName())); + end; + + procedure DepreciationExpenseGoodwillName(): Text[100] + begin + exit(DeprecationofotherintangiblefixedassetsLbl); + end; + + procedure DepreciationExpenseGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(DepreciationExpenseGoodwillName())); + end; + + procedure AcqusitionCostBalonDisposalGoodwillName(): Text[100] + begin + exit(CorrectionstogoodwillLbl); + end; + + procedure AcqusitionCostBalonDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqusitionCostBalonDisposalGoodwillName())); + end; + + procedure ApprecBalonDispGoodwillName(): Text[100] + begin + exit(CorrectionstogoodwillLbl); + end; + + procedure ApprecBalonDispGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(ApprecBalonDispGoodwillName())); + end; + + procedure AppreciationonDisposalGoodwillName(): Text[100] + begin + exit(GoodwillLbl); + end; + + procedure AppreciationonDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationonDisposalGoodwillName())); + end; + + procedure AppreciationGoodwillName(): Text[100] + begin + exit(GoodwillLbl); + end; + + procedure AppreciationGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationGoodwillName())); + end; + + procedure AppreciationBalGoodwillName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure AppreciationBalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationBalGoodwillName())); + end; + + procedure SalesBalGoodwillName(): Text[100] + begin + exit(InternalsettlementLbl); + end; + + procedure SalesBalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesBalGoodwillName())); + end; + + procedure BookValueBalonDisposalGoodwillName(): Text[100] + begin + exit(CorrectionstogoodwillLbl); + end; + + procedure BookValueBalonDisposalGoodwill(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValueBalonDisposalGoodwillName())); + end; + + procedure AcquisitionCostVehiclesName(): Text[100] + begin + exit(VehiclesLbl); + end; + + procedure AcquisitionCostVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostVehiclesName())); + end; + + procedure AccumDepreciationVehiclesName(): Text[100] + begin + exit(AccumulateddepreciationofvehiclesLbl); + end; + + procedure AccumDepreciationVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepreciationVehiclesName())); + end; + + + procedure WriteDownVehiclesName(): Text[100] + begin + exit(VehiclesLbl); + end; + + procedure WriteDownVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownVehiclesName())); + end; + + procedure Custom2VehiclesName(): Text[100] + begin + exit(AcquisitionofvehiclesLbl); + end; + + procedure Custom2Vehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2VehiclesName())); + end; + + procedure AcqCostonDisposalVehiclesName(): Text[100] + begin + exit(VehiclesLbl); + end; + + procedure AcqCostonDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqCostonDisposalVehiclesName())); + end; + + procedure AccumDepronDisposalVehiclesName(): Text[100] + begin + exit(AccumulateddepreciationofvehiclesLbl); + end; + + procedure AccumDepronDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepronDisposalVehiclesName())); + end; + + procedure WriteDownonDisposalVehiclesName(): Text[100] + begin + exit(VehiclesLbl); + end; + + procedure WriteDownonDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownonDisposalVehiclesName())); + end; + + procedure Custom2onDisposalVehiclesName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure Custom2onDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2onDisposalVehiclesName())); + end; + + procedure GainsonDisposalVehiclesName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure GainsonDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(GainsonDisposalVehiclesName())); + end; + + procedure LossesonDisposalVehiclesName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure LossesonDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(LossesonDisposalVehiclesName())); + end; + + procedure BookValonDispGainVehiclesName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispGainVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispGainVehiclesName())); + end; + + procedure BookValonDispLossVehiclesName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispLossVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispLossVehiclesName())); + end; + + procedure SalesonDispGainVehiclesName(): Text[100] + begin + exit(AccumulateddepreciationofvehiclesLbl); + end; + + procedure SalesonDispGainVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispGainVehiclesName())); + end; + + procedure SalesonDispLossVehiclesName(): Text[100] + begin + exit(AccumulateddepreciationofvehiclesLbl); + end; + + procedure SalesonDispLossVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispLossVehiclesName())); + end; + + procedure MaintenanceExpenseVehiclesName(): Text[100] + begin + exit(RepairsandMaintenanceLbl); + end; + + procedure MaintenanceExpenseVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(MaintenanceExpenseVehiclesName())); + end; + + procedure AcquisitionCostBalVehiclesName(): Text[100] + begin + exit(AcquisitionofvehiclesLbl); + end; + + procedure AcquisitionCostBalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostBalVehiclesName())); + end; + + procedure DepreciationExpenseVehiclesName(): Text[100] + begin + exit(DepreciationofvehiclesLbl); + end; + + procedure DepreciationExpenseVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(DepreciationExpenseVehiclesName())); + end; + + procedure AcqusitionCostBalonDisposalVehiclesName(): Text[100] + begin + exit(AccumulateddepreciationofvehiclesLbl); + end; + + procedure AcqusitionCostBalonDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqusitionCostBalonDisposalVehiclesName())); + end; + + procedure ApprecBalonDispVehiclesName(): Text[100] + begin + exit(AccumulateddepreciationofvehiclesLbl); + end; + + procedure ApprecBalonDispVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(ApprecBalonDispVehiclesName())); + end; + + procedure AppreciationonDisposalVehiclesName(): Text[100] + begin + exit(VehiclesLbl); + end; + + procedure AppreciationonDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationonDisposalVehiclesName())); + end; + + procedure AppreciationVehiclesName(): Text[100] + begin + exit(VehiclesLbl); + end; + + procedure AppreciationVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationVehiclesName())); + end; + + procedure AppreciationBalVehiclesName(): Text[100] + begin + exit(AcquisitionofvehiclesLbl); + end; + + procedure AppreciationBalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationBalVehiclesName())); + end; + + procedure SalesBalVehiclesName(): Text[100] + begin + exit(InternalsettlementLbl); + end; + + procedure SalesBalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesBalVehiclesName())); + end; + + procedure BookValueBalonDisposalVehiclesName(): Text[100] + begin + exit(AccumulateddepreciationofvehiclesLbl); + end; + + procedure BookValueBalonDisposalVehicles(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValueBalonDisposalVehiclesName())); + end; + + procedure AcquisitionCostEquipmentName(): Text[100] + begin + exit(MachinestoolsequipmentLbl); + end; + + procedure AcquisitionCostEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostEquipmentName())); + end; + + procedure WriteDownEquipmentName(): Text[100] + begin + exit(MachinestoolsequipmentLbl); + end; + + procedure WriteDownEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownEquipmentName())); + end; + + procedure AccumDepreciationEquipmentName(): Text[100] + begin + exit(AccumulateddepreciationofmachineryLbl); + end; + + procedure AccumDepreciationEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepreciationEquipmentName())); + end; + + procedure Custom2EquipmentName(): Text[100] + begin + exit(AcquisitionofmachineryLbl); + end; + + procedure Custom2Equipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2EquipmentName())); + end; + + procedure AcqCostonDisposalEquipmentName(): Text[100] + begin + exit(MachinestoolsequipmentLbl); + end; + + procedure AcqCostonDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqCostonDisposalEquipmentName())); + end; + + procedure AccumDepronDisposalEquipmentName(): Text[100] + begin + exit(AccumulateddepreciationofmachineryLbl); + end; + + procedure AccumDepronDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepronDisposalEquipmentName())); + end; + + procedure WriteDownonDisposalEquipmentName(): Text[100] + begin + exit(MachinestoolsequipmentLbl); + end; + + procedure WriteDownonDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownonDisposalEquipmentName())); + end; + + procedure Custom2onDisposalEquipmentName(): Text[100] + begin + exit(AcquisitionofmachineryLbl); + end; + + procedure Custom2onDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2onDisposalEquipmentName())); + end; + + procedure GainsonDisposalEquipmentName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure GainsonDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(GainsonDisposalEquipmentName())); + end; + + procedure LossesonDisposalEquipmentName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure LossesonDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(LossesonDisposalEquipmentName())); + end; + + procedure BookValonDispGainEquipmentName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispGainEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispGainEquipmentName())); + end; + + procedure BookValonDispLossEquipmentName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispLossEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispLossEquipmentName())); + end; + + procedure SalesonDispGainEquipmentName(): Text[100] + begin + exit(AccumulateddepreciationofmachineryLbl); + end; + + procedure SalesonDispGainEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispGainEquipmentName())); + end; + + procedure SalesonDispLossEquipmentName(): Text[100] + begin + exit(AccumulateddepreciationofmachineryLbl); + end; + + procedure SalesonDispLossEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispLossEquipmentName())); + end; + + procedure MaintenanceExpenseEquipmentName(): Text[100] + begin + exit(RepairsandMaintenanceLbl); + end; + + procedure MaintenanceExpenseEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(MaintenanceExpenseEquipmentName())); + end; + + procedure AcquisitionCostBalEquipmentName(): Text[100] + begin + exit(AcquisitionofmachineryLbl); + end; + + procedure AcquisitionCostBalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostBalEquipmentName())); + end; + + procedure DepreciationExpenseEquipmentName(): Text[100] + begin + exit(DepreciationofmachinesandtoolsLbl); + end; + + procedure DepreciationExpenseEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(DepreciationExpenseEquipmentName())); + end; + + procedure AcqusitionCostBalonDisposalEquipmentName(): Text[100] + begin + exit(AccumulateddepreciationofmachineryLbl); + end; + + procedure AcqusitionCostBalonDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqusitionCostBalonDisposalEquipmentName())); + end; + + procedure ApprecBalonDispEquipmentName(): Text[100] + begin + exit(AccumulateddepreciationofmachineryLbl); + end; + + procedure ApprecBalonDispEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(ApprecBalonDispEquipmentName())); + end; + + procedure AppreciationonDisposalEquipmentName(): Text[100] + begin + exit(MachinestoolsequipmentLbl); + end; + + procedure AppreciationonDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationonDisposalEquipmentName())); + end; + + procedure AppreciationEquipmentName(): Text[100] + begin + exit(MachinestoolsequipmentLbl); + end; + + procedure AppreciationEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationEquipmentName())); + end; + + procedure AppreciationBalEquipmentName(): Text[100] + begin + exit(AcquisitionofmachineryLbl); + end; + + procedure AppreciationBalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationBalEquipmentName())); + end; + + procedure SalesBalEquipmentName(): Text[100] + begin + exit(InternalsettlementLbl); + end; + + procedure SalesBalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesBalEquipmentName())); + end; + + procedure BookValueBalonDisposalEquipmentName(): Text[100] + begin + exit(AccumulateddepreciationofmachineryLbl); + end; + + procedure BookValueBalonDisposalEquipment(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValueBalonDisposalEquipmentName())); + end; + + procedure AcquisitionCostPatentsName(): Text[100] + begin + exit(IntangibleresultsofresearchanddevelopmentLbl); + end; + + procedure AcquisitionCostPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostPatentsName())); + end; + + procedure WriteDownPatentsName(): Text[100] + begin + exit(IntangibleresultsofresearchanddevelopmentLbl); + end; + + procedure WriteDownPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownPatentsName())); + end; + + procedure AccumDepreciationPatentsName(): Text[100] + begin + exit(CorrectionstointangibleresultsofresearchanddevelopmentLbl); + end; + + procedure AccumDepreciationPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepreciationPatentsName())); + end; + + procedure Custom2PatentsName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure Custom2Patents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2PatentsName())); + end; + + procedure AcqCostonDisposalPatentsName(): Text[100] + begin + exit(IntangibleresultsofresearchanddevelopmentLbl); + end; + + procedure AcqCostonDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqCostonDisposalPatentsName())); + end; + + procedure AccumDepronDisposalPatentsName(): Text[100] + begin + exit(CorrectionstointangibleresultsofresearchanddevelopmentLbl); + end; + + procedure AccumDepronDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepronDisposalPatentsName())); + end; + + procedure WriteDownonDisposalPatentsName(): Text[100] + begin + exit(IntangibleresultsofresearchanddevelopmentLbl); + end; + + procedure WriteDownonDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownonDisposalPatentsName())); + end; + + procedure Custom2onDisposalPatentsName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure Custom2onDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2onDisposalPatentsName())); + end; + + procedure GainsonDisposalPatentsName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure GainsonDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(GainsonDisposalPatentsName())); + end; + + procedure LossesonDisposalPatentsName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure LossesonDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(LossesonDisposalPatentsName())); + end; + + procedure BookValonDispGainPatentsName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispGainPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispGainPatentsName())); + end; + + procedure BookValonDispLossPatentsName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispLossPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispLossPatentsName())); + end; + + procedure SalesonDispGainPatentsName(): Text[100] + begin + exit(CorrectionstointangibleresultsofresearchanddevelopmentLbl); + end; + + procedure SalesonDispGainPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispGainPatentsName())); + end; + + procedure SalesonDispLossPatentsName(): Text[100] + begin + exit(CorrectionstointangibleresultsofresearchanddevelopmentLbl); + end; + + procedure SalesonDispLossPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispLossPatentsName())); + end; + + procedure MaintenanceExpensePatentsName(): Text[100] + begin + exit(RepairsandMaintenanceLbl); + end; + + procedure MaintenanceExpensePatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(MaintenanceExpensePatentsName())); + end; + + procedure AcquisitionCostBalPatentsName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure AcquisitionCostBalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostBalPatentsName())); + end; + + procedure DepreciationExpensePatentsName(): Text[100] + begin + exit(DeprecationofpatentsLbl); + end; + + procedure DepreciationExpensePatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(DepreciationExpensePatentsName())); + end; + + procedure AcqusitionCostBalonDisposalPatentsName(): Text[100] + begin + exit(CorrectionstointangibleresultsofresearchanddevelopmentLbl); + end; + + procedure AcqusitionCostBalonDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqusitionCostBalonDisposalPatentsName())); + end; + + procedure ApprecBalonDispPatentsName(): Text[100] + begin + exit(CorrectionstointangibleresultsofresearchanddevelopmentLbl); + end; + + procedure ApprecBalonDispPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(ApprecBalonDispPatentsName())); + end; + + procedure AppreciationonDisposalPatentsName(): Text[100] + begin + exit(IntangibleresultsofresearchanddevelopmentLbl); + end; + + procedure AppreciationonDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationonDisposalPatentsName())); + end; + + procedure AppreciationPatentsName(): Text[100] + begin + exit(IntangibleresultsofresearchanddevelopmentLbl); + end; + + procedure AppreciationPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationPatentsName())); + end; + + procedure AppreciationBalPatentsName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure AppreciationBalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationBalPatentsName())); + end; + + procedure SalesBalPatentsName(): Text[100] + begin + exit(InternalsettlementLbl); + end; + + procedure SalesBalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesBalPatentsName())); + end; + + procedure BookValueBalonDisposalPatentsName(): Text[100] + begin + exit(CorrectionstointangibleresultsofresearchanddevelopmentLbl); + end; + + procedure BookValueBalonDisposalPatents(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValueBalonDisposalPatentsName())); + end; + + procedure AcquisitionCostSoftwareName(): Text[100] + begin + exit(SoftwareAccountLbl); + end; + + procedure AcquisitionCostSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostSoftwareName())); + end; + + procedure WriteDownSoftwareName(): Text[100] + begin + exit(SoftwareAccountLbl); + end; + + procedure WriteDownSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownSoftwareName())); + end; + + procedure AccumDepreciationSoftwareName(): Text[100] + begin + exit(CorrectionstoSoftwareLbl); + end; + + procedure AccumDepreciationSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepreciationSoftwareName())); + end; + + procedure Custom2SoftwareName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure Custom2Software(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2SoftwareName())); + end; + + procedure AcqCostonDisposalSoftwareName(): Text[100] + begin + exit(SoftwareAccountLbl); + end; + + procedure AcqCostonDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqCostonDisposalSoftwareName())); + end; + + procedure AccumDepronDisposalSoftwareName(): Text[100] + begin + exit(CorrectionstoSoftwareLbl); + end; + + procedure AccumDepronDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AccumDepronDisposalSoftwareName())); + end; + + procedure WriteDownonDisposalSoftwareName(): Text[100] + begin + exit(SoftwareAccountLbl); + end; + + procedure WriteDownonDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(WriteDownonDisposalSoftwareName())); + end; + + procedure Custom2onDisposalSoftwareName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure Custom2onDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(Custom2onDisposalSoftwareName())); + end; + + procedure GainsonDisposalSoftwareName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure GainsonDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(GainsonDisposalSoftwareName())); + end; + + procedure LossesonDisposalSoftwareName(): Text[100] + begin + exit(NetbookvalueoffixedassetsdisposedLbl); + end; + + procedure LossesonDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(LossesonDisposalSoftwareName())); + end; + + procedure BookValonDispGainSoftwareName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispGainSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispGainSoftwareName())); + end; + + procedure BookValonDispLossSoftwareName(): Text[100] + begin + exit(NetbookvalueoffixedassetssoldLbl); + end; + + procedure BookValonDispLossSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValonDispLossSoftwareName())); + end; + + procedure SalesonDispGainSoftwareName(): Text[100] + begin + exit(CorrectionstoSoftwareLbl); + end; + + procedure SalesonDispGainSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispGainSoftwareName())); + end; + + procedure SalesonDispLossSoftwareName(): Text[100] + begin + exit(CorrectionstoSoftwareLbl); + end; + + procedure SalesonDispLossSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesonDispLossSoftwareName())); + end; + + procedure MaintenanceExpenseSoftwareName(): Text[100] + begin + exit(RepairsandMaintenanceLbl); + end; + + procedure MaintenanceExpenseSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(MaintenanceExpenseSoftwareName())); + end; + + procedure AcquisitionCostBalSoftwareName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure AcquisitionCostBalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcquisitionCostBalSoftwareName())); + end; + + procedure DepreciationExpenseSoftwareName(): Text[100] + begin + exit(DeprecationofsoftwareLbl); + end; + + procedure DepreciationExpenseSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(DepreciationExpenseSoftwareName())); + end; + + procedure AcqusitionCostBalonDisposalSoftwareName(): Text[100] + begin + exit(CorrectionstoSoftwareLbl); + end; + + procedure AcqusitionCostBalonDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AcqusitionCostBalonDisposalSoftwareName())); + end; + + procedure ApprecBalonDispSoftwareName(): Text[100] + begin + exit(CorrectionstoSoftwareLbl); + end; + + procedure ApprecBalonDispSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(ApprecBalonDispSoftwareName())); + end; + + procedure AppreciationonDisposalSoftwareName(): Text[100] + begin + exit(SoftwareAccountLbl); + end; + + procedure AppreciationonDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationonDisposalSoftwareName())); + end; + + procedure AppreciationSoftwareName(): Text[100] + begin + exit(SoftwareAccountLbl); + end; + + procedure AppreciationSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationSoftwareName())); + end; + + procedure AppreciationBalSoftwareName(): Text[100] + begin + exit(AcquisitionofintangiblefixedassetsLbl); + end; + + procedure AppreciationBalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(AppreciationBalSoftwareName())); + end; + + procedure SalesBalSoftwareName(): Text[100] + begin + exit(InternalsettlementLbl); + end; + + procedure SalesBalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(SalesBalSoftwareName())); + end; + + procedure BookValueBalonDisposalSoftwareName(): Text[100] + begin + exit(CorrectionstoSoftwareLbl); + end; + + procedure BookValueBalonDisposalSoftware(): Code[20] + begin + exit(ContosoGLAccount.GetAccountNo(BookValueBalonDisposalSoftwareName())); + end; + + var + ContosoGLAccount: Codeunit "Contoso GL Account"; + BuildingsLbl: Label 'Buildings', MaxLength = 100; + AcquisitionofbuildingsLbl: Label 'Acquisition of buildings', MaxLength = 100; + AccumulateddepreciationofbuildingsLbl: Label 'Accumulated depreciation of buildings', MaxLength = 100; + NetbookvalueoffixedassetsdisposedLbl: Label 'Net book value of fixed assets disposed', MaxLength = 100; + NetbookvalueoffixedassetssoldLbl: Label 'Net book value of fixed assets sold', MaxLength = 100; + RepairsandMaintenanceLbl: Label 'Repairs and Maintenance', MaxLength = 100; + InternalsettlementLbl: Label 'Internal settlement', MaxLength = 100; + GoodwillLbl: Label 'Goodwill', MaxLength = 100; + CorrectionstogoodwillLbl: Label 'Corrections to goodwill', MaxLength = 100; + AcquisitionofintangiblefixedassetsLbl: Label 'Acquisition of intangible fixed assets', MaxLength = 100; + DeprecationofotherintangiblefixedassetsLbl: Label 'Deprecation of other intangible fixed assets', MaxLength = 100; + VehiclesLbl: Label 'Vehicles', MaxLength = 100; + AccumulateddepreciationofvehiclesLbl: Label 'Accumulated depreciation of vehicles', MaxLength = 100; + AcquisitionofvehiclesLbl: Label 'Acquisition of vehicles', MaxLength = 100; + DepreciationofvehiclesLbl: Label 'Depreciation of vehicles', MaxLength = 100; + MachinestoolsequipmentLbl: Label 'Machines, tools, equipment', MaxLength = 100; + AccumulateddepreciationofmachineryLbl: Label 'Accumulated depreciation of machinery', MaxLength = 100; + AcquisitionofmachineryLbl: Label 'Acquisition of machinery', MaxLength = 100; + DepreciationofmachinesandtoolsLbl: Label 'Depreciation of machines and tools', MaxLength = 100; + IntangibleresultsofresearchanddevelopmentLbl: Label 'Intangible results of research and development', MaxLength = 100; + CorrectionstointangibleresultsofresearchanddevelopmentLbl: Label 'Corrections to intangible results of research and development', MaxLength = 100; + DeprecationofpatentsLbl: Label 'Deprecation of patents', MaxLength = 100; + CorrectionstosoftwareLbl: Label 'Corrections to software', MaxLength = 100; + DeprecationofsoftwareLbl: Label 'Deprecation of software', MaxLength = 100; + SoftwareAccountLbl: Label 'Software', MaxLength = 100; + FurnitureLbl: Label 'FURNITURE', MaxLength = 20; + PatentsLbl: Label 'PATENTS', MaxLength = 20; + SoftwareLbl: Label 'SOFTWARE', MaxLength = 20; +} diff --git a/Apps/W1/FieldServiceIntegration/app/ExtensionLogo.png b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/ExtensionLogo.png similarity index 100% rename from Apps/W1/FieldServiceIntegration/app/ExtensionLogo.png rename to Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/ExtensionLogo.png diff --git a/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/app.json b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/app.json new file mode 100644 index 0000000000..bf3584b290 --- /dev/null +++ b/Apps/CZ/ContosoCoffeeDemoDatasetCZ/app/app.json @@ -0,0 +1,38 @@ +{ + "id": "acbbfbc7-75c1-436f-8b22-926d741b2616", + "name": "Contoso Coffee Demo Dataset (CZ)", + "publisher": "Microsoft", + "version": "25.0.0.0", + "brief": "To help partners demonstrate the premium capabilities of Business Central, we are making the demo data available for manufacturing scenarios.", + "description": "Presales specialists can run the tool on top of Cronus or My Company and get the setup and demo data they'll need when they demonstrate various scenarios in the manufacturing space.", + "privacyStatement": "https://go.microsoft.com/fwlink/?linkid=724009", + "EULA": "https://go.microsoft.com/fwlink/?linkid=2009120", + "help": "https://go.microsoft.com/fwlink/?linkid=2187180", + "url": "https://go.microsoft.com/fwlink/?linkid=724011", + "contextSensitiveHelpUrl": "https://go.microsoft.com/fwlink/?linkid=2187180", + "logo": "./ExtensionLogo.png", + "dependencies": [ + { + "id": "5a0b41e9-7a42-4123-d521-2265186cfb31", + "name": "Contoso Coffee Demo Dataset", + "publisher": "Microsoft", + "version": "25.0.0.0" + }, + { + "id": "ef5dfe8c-ba1c-4271-8a86-95d5abdc6fe9", + "name": "Fixed Asset Localization for Czech", + "publisher": "Microsoft", + "version": "25.0.0.0" + } + ], + "screenshots": [ + + ], + "platform": "25.0.0.0", + "application": "25.0.0.0", + "resourceExposurePolicy": { + "allowDebugging": true, + "allowDownloadingSource": false, + "includeSourceInSymbolFile": false + } +} \ No newline at end of file diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/CorrectionsPostingMgtCZL.Codeunit.al b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/CorrectionsPostingMgtCZL.Codeunit.al index 210e936957..ba5c305448 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/CorrectionsPostingMgtCZL.Codeunit.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/CorrectionsPostingMgtCZL.Codeunit.al @@ -23,6 +23,7 @@ using Microsoft.Projects.Project.Journal; using Microsoft.Purchases.Document; using Microsoft.Sales.Document; using Microsoft.Service.Document; +using Microsoft.Service.Posting; codeunit 11796 "Corrections Posting Mgt. CZL" { @@ -409,7 +410,7 @@ codeunit 11796 "Corrections Posting Mgt. CZL" end; #pragma warning restore AL0432 #endif - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPrepareSales', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::Microsoft.Sales.Posting."Sales Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure SetCorrectionOnAfterPrepareSales(var SalesLine: Record "Sales Line"; var InvoicePostingBuffer: Record "Invoice Posting Buffer") var SalesHeader: Record "Sales Header"; @@ -418,7 +419,7 @@ codeunit 11796 "Corrections Posting Mgt. CZL" InvoicePostingBuffer."Correction CZL" := SalesHeader.Correction xor SalesLine."Negative CZL"; end; - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPreparePurchase', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::Microsoft.Purchases.Posting."Purch. Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure SetCorrectionOnAfterPreparePurchase(var PurchaseLine: Record "Purchase Line"; var InvoicePostingBuffer: Record "Invoice Posting Buffer") var PurchaseHeader: Record "Purchase Header"; @@ -427,8 +428,8 @@ codeunit 11796 "Corrections Posting Mgt. CZL" InvoicePostingBuffer."Correction CZL" := PurchaseHeader.Correction xor PurchaseLine."Negative CZL"; end; - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPrepareService', '', false, false)] - local procedure SetCorrectionOnAfterPrepareService(var ServiceLine: Record "Service Line"; var InvoicePostingBuffer: Record "Invoice Posting Buffer") + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Service Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] + local procedure SetCorrectionOnAfterPrepareService(ServiceLine: Record "Service Line"; var InvoicePostingBuffer: Record "Invoice Posting Buffer") var ServiceHeader: Record "Service Header"; begin diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/GenJnlPostLineHandlerCZL.Codeunit.al b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/GenJnlPostLineHandlerCZL.Codeunit.al index 0e7156404e..0576c8bf9b 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/GenJnlPostLineHandlerCZL.Codeunit.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/GenJnlPostLineHandlerCZL.Codeunit.al @@ -420,14 +420,24 @@ codeunit 31315 "Gen.Jnl. Post Line Handler CZL" [EventSubscriber(ObjectType::Codeunit, Codeunit::"Gen. Jnl.-Post Line", 'OnPostDeferralPostBufferOnAfterFindDeferalPostingBuffer', '', false, false)] local procedure GetNonDeductibleVATPctOnPostDeferralPostBufferOnAfterFindDeferalPostingBuffer(GenJournalLine: Record "Gen. Journal Line"; var DeferralPostingBuffer: Record "Deferral Posting Buffer"; var NonDeductibleVATPct: Decimal) + begin + NonDeductibleVATPct := GetNonDeductibleVATPct(GenJournalLine, DeferralPostingBuffer."Deferral Doc. Type"); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Gen. Jnl.-Post Line", 'OnPostDeferralOnAfterGetNonDeductibleVATPct', '', false, false)] + local procedure GetNonDeductibleVATPctOnPostDeferralOnAfterGetNonDeductibleVATPct(GenJournalLine: Record "Gen. Journal Line"; DeferralDocType: Enum "Deferral Document Type"; var NonDeductibleVATPct: Decimal) + begin + NonDeductibleVATPct := GetNonDeductibleVATPct(GenJournalLine, DeferralDocType); + end; + + local procedure GetNonDeductibleVATPct(GenJournalLine: Record "Gen. Journal Line"; DeferralDocType: Enum "Deferral Document Type"): Decimal var NonDeductibleVATCZL: Codeunit "Non-Deductible VAT CZL"; begin - NonDeductibleVATPct := - NonDeductibleVATCZL.GetNonDeductibleVATPct( - GenJournalLine."VAT Bus. Posting Group", GenJournalLine."VAT Prod. Posting Group", - NonDeductibleVATCZL.GetGeneralPostingTypeFromDeferralDocType(DeferralPostingBuffer."Deferral Doc. Type"), - GenJournalLine."VAT Reporting Date"); + exit(NonDeductibleVATCZL.GetNonDeductibleVATPct( + GenJournalLine."VAT Bus. Posting Group", GenJournalLine."VAT Prod. Posting Group", + NonDeductibleVATCZL.GetGeneralPostingTypeFromDeferralDocType(DeferralDocType), + GenJournalLine."VAT Reporting Date")); end; [IntegrationEvent(false, false)] diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/NavigateHandlerCZL.Codeunit.al b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/NavigateHandlerCZL.Codeunit.al index 7972358495..1ee0913289 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/NavigateHandlerCZL.Codeunit.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/NavigateHandlerCZL.Codeunit.al @@ -14,26 +14,26 @@ codeunit 31044 "Navigate Handler CZL" EETEntryCZL: Record "EET Entry CZL"; [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateFindRecords', '', false, false)] - local procedure OnAfterNavigateFindRecords(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; Sender: Page Navigate) + local procedure OnAfterNavigateFindRecords(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text) begin - FindEETEntries(DocumentEntry, DocNoFilter, Sender); + FindEETEntries(DocumentEntry, DocNoFilter); end; - local procedure FindEETEntries(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; Navigate: Page Navigate) + local procedure FindEETEntries(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text) begin if EETEntryCZL.ReadPermission() then begin EETEntryCZL.Reset(); EETEntryCZL.SetCurrentKey("Document No."); EETEntryCZL.SetFilter("Document No.", DocNoFilter); - Navigate.InsertIntoDocEntry(DocumentEntry, Database::"EET Entry CZL", Enum::"Document Entry Document Type"::Quote, + DocumentEntry.InsertIntoDocEntry(Database::"EET Entry CZL", Enum::"Document Entry Document Type"::Quote, EETEntryCZL.TableCaption(), EETEntryCZL.Count()); end; end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeNavigateShowRecords', '', false, false)] - local procedure OnBeforeNavigateShowRecords(TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry"; var IsHandled: Boolean) + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] + local procedure OnBeforeShowRecords(var TempDocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; var IsHandled: Boolean) begin - case TableID of + case TempDocumentEntry."Table ID" of Database::"EET Entry CZL": begin EETEntryCZL.Reset(); diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeApplicationCZL.Codeunit.al b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeApplicationCZL.Codeunit.al index 427fb8c7d9..97a6973f70 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeApplicationCZL.Codeunit.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeApplicationCZL.Codeunit.al @@ -274,6 +274,7 @@ codeunit 31017 "Upgrade Application CZL" UpgradeSubstCustVendPostingGroup(); UpgradeVATStatementTemplate(); UpgradeAllowVATPosting(); + UpgradeOriginalVATAmountsInVATEntries(); end; local procedure UpgradeGeneralLedgerSetup(); @@ -2658,6 +2659,22 @@ codeunit 31017 "Upgrade Application CZL" UpgradeTag.SetUpgradeTag(UpgradeTagDefinitionsCZL.GetAllowVATPostingUpgradeTag()); end; + local procedure UpgradeOriginalVATAmountsInVATEntries() + var + VATEntry: Record "VAT Entry"; + VATEntryDataTransfer: DataTransfer; + begin + if UpgradeTag.HasUpgradeTag(UpgradeTagDefinitionsCZL.GetOriginalVATAmountsInVATEntriesUpgradeTag()) then + exit; + + VATEntryDataTransfer.SetTables(Database::"VAT Entry", Database::"VAT Entry"); + VATEntryDataTransfer.AddFieldValue(VATEntry.FieldNo(Base), VATEntry.FieldNo("Original VAT Base CZL")); + VATEntryDataTransfer.AddFieldValue(VATEntry.FieldNo(Amount), VATEntry.FieldNo("Original VAT Amount CZL")); + VATEntryDataTransfer.CopyFields(); + + UpgradeTag.SetUpgradeTag(UpgradeTagDefinitionsCZL.GetOriginalVATAmountsInVATEntriesUpgradeTag()); + end; + local procedure InsertRepSelection(ReportUsage: Enum "Report Selection Usage"; Sequence: Code[10]; ReportID: Integer) var ReportSelections: Record "Report Selections"; diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeTagDefinitionsCZL.Codeunit.al b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeTagDefinitionsCZL.Codeunit.al index 681104110d..38e27e3746 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeTagDefinitionsCZL.Codeunit.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/UpgradeTagDefinitionsCZL.Codeunit.al @@ -40,6 +40,7 @@ codeunit 31016 "Upgrade Tag Definitions CZL" PerCompanyUpgradeTags.Add(GetSubstCustVendPostingGroupUpgradeTag()); PerCompanyUpgradeTags.Add(GetVATStatementReportExtensionUpgradeTag()); PerCompanyUpgradeTags.Add(GetAllowVATPostingUpgradeTag()); + PerCompanyUpgradeTags.Add(GetOriginalVATAmountsInVATEntriesUpgradeTag()); end; procedure GetDataVersion174PerDatabaseUpgradeTag(): Code[250] @@ -171,4 +172,9 @@ codeunit 31016 "Upgrade Tag Definitions CZL" begin exit('CZL-495916-AllowVATPostingUpgradeTag-20240109'); end; + + procedure GetOriginalVATAmountsInVATEntriesUpgradeTag(): Code[250] + begin + exit('CZL-539623-OriginalVATAmountsInVATEntriesUpgradeTag-20240627'); + end; } diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/VATDateHandlerCZL.Codeunit.al b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/VATDateHandlerCZL.Codeunit.al index bdcc13ce84..14ccf0d0bd 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/VATDateHandlerCZL.Codeunit.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Codeunits/VATDateHandlerCZL.Codeunit.al @@ -19,6 +19,7 @@ using Microsoft.Sales.History; using Microsoft.Sales.Receivables; using Microsoft.Service.Document; using Microsoft.Service.History; +using Microsoft.Service.Posting; using System.Reflection; using System.Security.User; @@ -82,7 +83,7 @@ codeunit 11742 "VAT Date Handler CZL" #pragma warning restore AL0432 #endif - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPrepareSales', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::Microsoft.Sales.Posting."Sales Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure UpdateInvoicePostingBufferOnAfterPrepareSales(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; var SalesLine: Record "Sales Line") var SalesHeader: Record "Sales Header"; @@ -93,7 +94,7 @@ codeunit 11742 "VAT Date Handler CZL" InvoicePostingBuffer."Correction CZL" := SalesHeader.Correction xor SalesLine."Negative CZL"; end; - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPreparePurchase', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::Microsoft.Purchases.Posting."Purch. Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure UpdateInvoicePostingBufferOnAfterPreparePurchase(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; var PurchaseLine: Record "Purchase Line") var PurchaseHeader: Record "Purchase Header"; @@ -104,7 +105,7 @@ codeunit 11742 "VAT Date Handler CZL" InvoicePostingBuffer."Correction CZL" := PurchaseHeader.Correction xor PurchaseLine."Negative CZL"; end; - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPrepareService', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Service Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure UpdateInvoicePostingBufferOnAfterPrepareService(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; var ServiceLine: Record "Service Line") var ServiceHeader: Record "Service Header"; diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Reports/InventoryDocumentCZL.Report.al b/Apps/CZ/CoreLocalizationPack/app/Src/Reports/InventoryDocumentCZL.Report.al index bdd3e10880..78b2138720 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Reports/InventoryDocumentCZL.Report.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Reports/InventoryDocumentCZL.Report.al @@ -153,7 +153,8 @@ report 11752 "Inventory Document CZL" begin CurrReport.Language := LanguageMgt.GetLanguageIdOrDefault("Language Code"); CurrReport.FormatRegion := LanguageMgt.GetFormatRegionOrDefault("Format Region"); - SalespersonPurchaser.Get("Salesperson/Purchaser Code"); + if not SalespersonPurchaser.Get("Salesperson/Purchaser Code") then + SalespersonPurchaser.Init(); if not IsReportInPreviewMode() then Codeunit.Run(Codeunit::"Invt. Document-Printed CZL", "Invt. Document Header"); diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryReceiptCZL.Report.al b/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryReceiptCZL.Report.al index 8b5728c960..33d5178e88 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryReceiptCZL.Report.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryReceiptCZL.Report.al @@ -153,7 +153,8 @@ report 11751 "Posted Inventory Receipt CZL" begin CurrReport.Language := LanguageMGt.GetLanguageIdOrDefault("Language Code"); CurrReport.FormatRegion := LanguageMGt.GetFormatRegionOrDefault("Format Region"); - SalespersonPurchaser.Get("Purchaser Code"); + if not SalespersonPurchaser.Get("Purchaser Code") then + SalespersonPurchaser.Init(); if not IsReportInPreviewMode() then Codeunit.Run(Codeunit::"Posted Invt. Rcpt.-Printed CZL", "Invt. Receipt Header"); diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryShipmentCZL.Report.al b/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryShipmentCZL.Report.al index b9455b37e7..d56b77f547 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryShipmentCZL.Report.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/Reports/PostedInventoryShipmentCZL.Report.al @@ -151,7 +151,8 @@ report 11750 "Posted Inventory Shipment CZL" begin CurrReport.Language := LanguageMgt.GetLanguageIdOrDefault("Language Code"); CurrReport.FormatRegion := LanguageMgt.GetFormatRegionOrDefault("Format Region"); - SalespersonPurchaser.Get("Salesperson Code"); + if not SalespersonPurchaser.Get("Salesperson Code") then + SalespersonPurchaser.Init(); if not IsReportInPreviewMode() then Codeunit.Run(Codeunit::"Posted Invt. Shpt.-Printed CZL", "Invt. Shipment Header"); diff --git a/Apps/CZ/CoreLocalizationPack/app/Src/TableExtensions/PurchaseHeaderCZL.TableExt.al b/Apps/CZ/CoreLocalizationPack/app/Src/TableExtensions/PurchaseHeaderCZL.TableExt.al index 552dd7ade7..4fd1150fb5 100644 --- a/Apps/CZ/CoreLocalizationPack/app/Src/TableExtensions/PurchaseHeaderCZL.TableExt.al +++ b/Apps/CZ/CoreLocalizationPack/app/Src/TableExtensions/PurchaseHeaderCZL.TableExt.al @@ -513,6 +513,9 @@ tableextension 11705 "Purchase Header CZL" extends "Purchase Header" PurchaseLine: Record "Purchase Line"; NonDeductibleVAT: Codeunit "Non-Deductible VAT"; begin + if not NonDeductibleVAT.IsNonDeductibleVATEnabled() then + exit; + if not PurchLinesExist() then exit; diff --git a/Apps/DK/DKCore/test/src/PostingRestrictionsTests.Codeunit.al b/Apps/DK/DKCore/test/src/PostingRestrictionsTests.Codeunit.al index 10ab7195dd..3bd5f65ac3 100644 --- a/Apps/DK/DKCore/test/src/PostingRestrictionsTests.Codeunit.al +++ b/Apps/DK/DKCore/test/src/PostingRestrictionsTests.Codeunit.al @@ -13,6 +13,7 @@ codeunit 148017 "Posting Restrictions Tests" LibraryPurchase: Codeunit "Library - Purchase"; LibraryJournals: Codeunit "Library - Journals"; LibraryRandom: Codeunit "Library - Random"; + LibraryUtility: Codeunit "Library - Utility"; Assert: Codeunit "Assert"; isInitialized: Boolean; CannotPostWithoutCVRNumberErr: Label 'You cannot post without a valid CVR number filled in. Open the Company Information page and enter a CVR number in the Registration No. field.'; @@ -507,6 +508,8 @@ codeunit 148017 "Posting Restrictions Tests" local procedure PostSalesInvoice(var SalesHeader: Record "Sales Header"): Code[20] begin LibrarySales.CreateSalesInvoice(SalesHeader); + SalesHeader.Validate("Incoming Document Entry No.", MockIncomingDocument(SalesHeader."Posting Date", SalesHeader."No.")); + SalesHeader.Modify(true); exit(LibrarySales.PostSalesDocument(SalesHeader, true, true)); end; @@ -520,9 +523,26 @@ codeunit 148017 "Posting Restrictions Tests" local procedure PostPurchaseInvoice(var PurchaseHeader: Record "Purchase Header"): Code[20] begin LibraryPurchase.CreatePurchaseInvoice(PurchaseHeader); + PurchaseHeader.Validate("Incoming Document Entry No.", MockIncomingDocument(PurchaseHeader."Posting Date", PurchaseHeader."No.")); + PurchaseHeader.Modify(true); exit(LibraryPurchase.PostPurchaseDocument(PurchaseHeader, true, true)); end; + local procedure MockIncomingDocument(PostingDate: Date; DocNo: Code[20]): Integer + var + IncomingDocument: Record "Incoming Document"; + IncomingDocumentAttachment: Record "Incoming Document Attachment"; + begin + IncomingDocument."Entry No." := + LibraryUtility.GetNewRecNo(IncomingDocument, IncomingDocument.FieldNo("Entry No.")); + IncomingDocument."Posting Date" := PostingDate; + IncomingDocument."Document No." := DocNo; + IncomingDocument.Insert(); + IncomingDocumentAttachment."Incoming Document Entry No." := IncomingDocument."Entry No."; + IncomingDocumentAttachment.Insert(); + exit(IncomingDocument."Entry No."); + end; + local procedure VerifyGLEntry(PostingDate: Date; DocNo: Code[20]) var GLEntry: Record "G/L Entry"; diff --git a/Apps/DK/EnforcedDigitalVouchersDK/app/src/DigitalVoucherDKImpl.Codeunit.al b/Apps/DK/EnforcedDigitalVouchersDK/app/src/DigitalVoucherDKImpl.Codeunit.al index 3dea1e612c..752f08144f 100644 --- a/Apps/DK/EnforcedDigitalVouchersDK/app/src/DigitalVoucherDKImpl.Codeunit.al +++ b/Apps/DK/EnforcedDigitalVouchersDK/app/src/DigitalVoucherDKImpl.Codeunit.al @@ -4,24 +4,28 @@ // ------------------------------------------------------------------------------------------------ namespace Microsoft.EServices.EDocument; +using Microsoft.Foundation.AuditCodes; + codeunit 13621 "Digital Voucher DK Impl." { Access = Internal; + Permissions = tabledata "Digital Voucher Entry Setup" = rim, + tabledata "Voucher Entry Source Code" = rim, + tabledata "Digital Voucher Setup" = rim; var NotAllowedToChangeWhenEnforcedErr: Label 'You are not allowed to change make this change when the feature is enforced.'; [EventSubscriber(ObjectType::Table, Database::"Digital Voucher Entry Setup", 'OnBeforeModifyEvent', '', false, false)] - local procedure CheckDigitalVoucherEntrySetupOnBeforeModify(var Rec: Record "Digital Voucher Entry Setup"; var xRec: Record "Digital Voucher Entry Setup"; RunTrigger: Boolean) + local procedure CheckDigitalVoucherEntrySetupOnBeforeModify(var Rec: Record "Digital Voucher Entry Setup") begin - if not CheckSetupForEntryTypesForbiddenFromChangeIsRequired(Rec) then - exit; - if not IsEntryTypeForbiddenForChange(Rec."Entry Type") then - exit; - if Rec."Check Type" <> xRec."Check Type" then - error(NotAllowedToChangeWhenEnforcedErr); - if Rec."Entry Type" in [Rec."Entry Type"::"Purchase Document", Rec."Entry Type"::"Purchase Journal"] then - Error(NotAllowedToChangeWhenEnforcedErr); + CheckDigitalVoucherEntrySetupOnModification(Rec); + end; + + [EventSubscriber(ObjectType::Table, Database::"Digital Voucher Entry Setup", 'OnBeforeInsertEvent', '', false, false)] + local procedure CheckDigitalVoucherEntrySetupOnBeforeInsert(var Rec: Record "Digital Voucher Entry Setup") + begin + CheckDigitalVoucherEntrySetupOnModification(Rec); end; [EventSubscriber(ObjectType::Table, Database::"Digital Voucher Entry Setup", 'OnBeforeDeleteEvent', '', false, false)] @@ -40,6 +44,64 @@ codeunit 13621 "Digital Voucher DK Impl." CheckSetupForEntryTypesForbiddenFromChange(Rec); end; + [EventSubscriber(ObjectType::Table, Database::"Voucher Entry Source Code", 'OnBeforeModifyEvent', '', false, false)] + local procedure CheckVoucherSourceCodeOnBeforeModify(var Rec: Record "Voucher Entry Source Code"; xRec: Record "Voucher Entry Source Code") + begin + CheckVoucherSourceCodeOnModification(Rec, xRec); + end; + + [EventSubscriber(ObjectType::Table, Database::"Voucher Entry Source Code", 'OnBeforeRenameEvent', '', false, false)] + local procedure CheckVoucherSourceCodeOnBeforeRename(var Rec: Record "Voucher Entry Source Code"; xRec: Record "Voucher Entry Source Code") + begin + CheckVoucherSourceCodeOnModification(Rec, xRec); + end; + + [EventSubscriber(ObjectType::Table, Database::"Voucher Entry Source Code", 'OnBeforeDeleteEvent', '', false, false)] + local procedure CheckVoucherSourceCodeOnBeforeDelete(var Rec: Record "Voucher Entry Source Code") + var + DigitalVoucherFeature: Codeunit "Digital Voucher Feature"; + begin + if Rec.IsTemporary then + exit; + if not DigitalVoucherFeature.EnforceDigitalVoucherFunctionality() then + exit; + if Rec."Entry Type" in [Rec."Entry Type"::"Purchase Journal", Rec."Entry Type"::"Sales Journal"] then + Error(NotAllowedToChangeWhenEnforcedErr); + end; + + local procedure CheckDigitalVoucherEntrySetupOnModification(Rec: Record "Digital Voucher Entry Setup") + begin + if not CheckSetupForEntryTypesForbiddenFromChangeIsRequired(Rec) then + exit; + if not IsEntryTypeForbiddenForChange(Rec."Entry Type") then + exit; + if Rec."Check Type" <> Rec."Check Type"::Attachment then + error(NotAllowedToChangeWhenEnforcedErr); + if (Rec."Entry Type" in [Rec."Entry Type"::"Purchase Document", Rec."Entry Type"::"Purchase Journal"]) and Rec."Generate Automatically" then + error(NotAllowedToChangeWhenEnforcedErr); + end; + + local procedure CheckVoucherSourceCodeOnModification(Rec: Record "Voucher Entry Source Code"; xRec: Record "Voucher Entry Source Code") + var + SourceCodeSetup: Record "Source Code Setup"; + DigitalVoucherFeature: Codeunit "Digital Voucher Feature"; + begin + if Rec.IsTemporary then + exit; + if not DigitalVoucherFeature.EnforceDigitalVoucherFunctionality() then + exit; + if not SourceCodeSetup.Get() then + exit; + case Rec."Entry Type" of + Rec."Entry Type"::"Purchase Journal": + if (xRec."Source Code" = SourceCodeSetup."Purchase Journal") and (xRec."Source Code" <> Rec."Source Code") then + Error(NotAllowedToChangeWhenEnforcedErr); + Rec."Entry Type"::"Sales Journal": + if (xRec."Source Code" = SourceCodeSetup."Sales Journal") and (xRec."Source Code" <> Rec."Source Code") then + Error(NotAllowedToChangeWhenEnforcedErr); + end; + end; + local procedure CheckSetupForEntryTypesForbiddenFromChange(Rec: Record "Digital Voucher Entry Setup") begin if IsEntryTypeForbiddenForChange(Rec."Entry Type") then @@ -59,4 +121,87 @@ codeunit 13621 "Digital Voucher DK Impl." exit(false); exit(DigitalVoucherFeature.EnforceDigitalVoucherFunctionality()); end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Digital Voucher Impl.", 'OnHandleDigitalVoucherEntrySetupWhenEnforced', '', false, false)] + local procedure DefaultEnforcementSetupOnGetDigitalVoucherEntrySetupWhenEnforced(EntryType: Enum "Digital Voucher Entry Type") + var + DigitalVoucherSetup: Record "Digital Voucher Setup"; + DigitalVoucherEntrySetup: Record "Digital Voucher Entry Setup"; + DigitalVoucherFeature: Codeunit "Digital Voucher Feature"; + begin + if not DigitalVoucherFeature.EnforceDigitalVoucherFunctionality() then + exit; + if not DigitalVoucherSetup.Get() then + DigitalVoucherSetup.Insert(); + if not DigitalVoucherSetup.Enabled then begin + DigitalVoucherSetup.Enabled := true; + DigitalVoucherSetup.Modify(); + end; + + case EntryType of + EntryType::"General Journal", EntryType::"Sales Journal": + if not DigitalVoucherEntrySetup.Get(EntryType) then + RecreateDigitalVoucherEntrySetup(EntryType, DigitalVoucherEntrySetup."Check Type"::"No Check", false); + EntryType::"Purchase Journal": + RecreateDigitalVoucherEntrySetup(EntryType, DigitalVoucherEntrySetup."Check Type"::Attachment, false); + EntryType::"Sales Document": + RecreateDigitalVoucherEntrySetup(EntryType, DigitalVoucherEntrySetup."Check Type"::Attachment, true); + EntryType::"Purchase Document": + RecreateDigitalVoucherEntrySetup(EntryType, DigitalVoucherEntrySetup."Check Type"::Attachment, false); + end; + end; + + local procedure RecreateDigitalVoucherEntrySetup(EntryType: Enum "Digital Voucher Entry Type"; CheckType: Enum "Digital Voucher Check Type"; GenerateAutomatically: Boolean) + var + DigitalVoucherEntrySetup: Record "Digital Voucher Entry Setup"; + begin + if DigitalVoucherEntrySetup.Get(EntryType) then + if DigitalVoucherEntrySetup."Check Type" = CheckType then + exit; + DigitalVoucherEntrySetup."Entry Type" := EntryType; + DigitalVoucherEntrySetup."Check Type" := CheckType; + DigitalVoucherEntrySetup."Generate Automatically" := GenerateAutomatically; + DigitalVoucherEntrySetup."Skip If Manually Added" := true; + if not DigitalVoucherEntrySetup.insert() then + DigitalVoucherEntrySetup.Modify(); + RecreateDigitalVoucherEntrySourceCode(EntryType); + end; + + local procedure RecreateDigitalVoucherEntrySourceCode(EntryType: Enum "Digital Voucher Entry Type") + var + SourceCodeSetup: Record "Source Code Setup"; + begin + if not SourceCodeSetup.Get() then + exit; + case EntryType of + EntryType::"Sales Document": + begin + InsertDigitalVoucherEntrySourceCode(EntryType, SourceCodeSetup.Sales); + InsertDigitalVoucherEntrySourceCode(EntryType, SourceCodeSetup."Sales Deferral"); + end; + EntryType::"Sales Journal": + InsertDigitalVoucherEntrySourceCode(EntryType, SourceCodeSetup."Sales Journal"); + EntryType::"Purchase Document": + begin + InsertDigitalVoucherEntrySourceCode(EntryType, SourceCodeSetup.Purchases); + InsertDigitalVoucherEntrySourceCode(EntryType, SourceCodeSetup."Purchase Deferral"); + end; + EntryType::"Purchase Journal": + InsertDigitalVoucherEntrySourceCode(EntryType, SourceCodeSetup."Purchase Journal"); + end; + end; + + local procedure InsertDigitalVoucherEntrySourceCode(EntryType: Enum "Digital Voucher Entry Type"; SourceCode: Code[10]) + var + VoucherSourceCode: Record "Voucher Entry Source Code"; + SourceCodeRec: Record "Source Code"; + begin + if SourceCode = '' then + exit; + if not SourceCodeRec.Get(SourceCode) then + exit; + VoucherSourceCode.Validate("Entry Type", EntryType); + VoucherSourceCode.Validate("Source Code", SourceCode); + if VoucherSourceCode.Insert(true) then; + end; } diff --git a/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTNavigate.codeunit.al b/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTNavigate.codeunit.al index da2c7b1a79..9d7e19b08a 100644 --- a/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTNavigate.codeunit.al +++ b/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTNavigate.codeunit.al @@ -18,15 +18,13 @@ codeunit 18002 "GST Navigate" DetailedGSTLedgerEntry: Record "Detailed GST Ledger Entry"; GSTLedgerEntry: Record "GST Ledger Entry"; GSTTDSTCSEntry: Record "GST TDS/TCS Entry"; - Navigate: Page Navigate; begin if GSTLedgerEntry.ReadPermission() then begin GSTLedgerEntry.Reset(); GSTLedgerEntry.SetCurrentKey("Document No.", "Posting Date"); GSTLedgerEntry.SetFilter("Document No.", DocNoFilter); GSTLedgerEntry.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry( - DocumentEntry, + DocumentEntry.InsertIntoDocEntry( Database::"GST Ledger Entry", 0, CopyStr(GSTLedgerEntry.TableCaption(), 1, 1024), @@ -38,8 +36,7 @@ codeunit 18002 "GST Navigate" DetailedGSTLedgerEntry.SetCurrentKey("Document No.", "Posting Date"); DetailedGSTLedgerEntry.SetFilter("Document No.", DocNoFilter); DetailedGSTLedgerEntry.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry( - DocumentEntry, + DocumentEntry.InsertIntoDocEntry( Database::"Detailed GST Ledger Entry", 0, CopyStr(DetailedGSTLedgerEntry.TableCaption(), 1, 1024), @@ -51,8 +48,7 @@ codeunit 18002 "GST Navigate" GSTTDSTCSEntry.SetCurrentKey("Document No.", "Posting Date"); GSTTDSTCSEntry.SetFilter("Document No.", DocNoFilter); GSTTDSTCSEntry.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry( - DocumentEntry, + DocumentEntry.InsertIntoDocEntry( Database::"GST TDS/TCS Entry", 0, CopyStr(GSTTDSTCSEntry.TableCaption(), 1, 1024), diff --git a/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTPreviewHandler.Codeunit.al b/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTPreviewHandler.Codeunit.al index c63bd88c1f..d367110cca 100644 --- a/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTPreviewHandler.Codeunit.al +++ b/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTPreviewHandler.Codeunit.al @@ -139,21 +139,22 @@ codeunit 18003 "GST Preview Handler" TempDetailedGSTLedgerEntryInfo.Insert(); end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateShowRecords', '', false, false)] - local procedure ShowEntries(TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry") + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] + local procedure ShowEntries(DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry"; var IsHandled: Boolean) var GSTLedgerEntries: Record "GST Ledger Entry"; DetailedGSTLedgerEntries: Record "Detailed GST Ledger Entry"; GSTTDSTCSEntry: Record "GST TDS/TCS Entry"; DetailedGSTLedgerEntryInfo: Record "Detailed GST Ledger Entry Info"; begin - case TableID of + case TempDocumentEntry."Table ID" of Database::"GST Ledger Entry": begin GSTLedgerEntries.Reset(); GSTLedgerEntries.SetRange("Document No.", DocNoFilter); GSTLedgerEntries.SetFilter("Posting Date", PostingDateFilter); Page.Run(0, GSTLedgerEntries); + IsHandled := true; end; Database::"Detailed GST Ledger Entry": begin @@ -161,6 +162,7 @@ codeunit 18003 "GST Preview Handler" DetailedGSTLedgerEntries.SetRange("Document No.", DocNoFilter); DetailedGSTLedgerEntries.SetFilter("Posting Date", PostingDateFilter); Page.Run(0, DetailedGSTLedgerEntries); + IsHandled := true; end; Database::"GST TDS/TCS Entry": begin @@ -168,11 +170,13 @@ codeunit 18003 "GST Preview Handler" GSTTDSTCSEntry.SetRange("Document No.", DocNoFilter); GSTTDSTCSEntry.SetFilter("Posting Date", PostingDateFilter); Page.Run(0, GSTTDSTCSEntry); + IsHandled := true; end; Database::"Detailed GST Ledger Entry Info": begin DetailedGSTLedgerEntryInfo.SetRange("Entry No.", FromDetailedGSTLedgerEntryNo, ToDetailedGSTLedgerEntryNo); Page.Run(0, DetailedGSTLedgerEntryInfo); + IsHandled := true; end; end; end; diff --git a/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTTaxConfiguration.Codeunit.al b/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTTaxConfiguration.Codeunit.al index e4eebec3b1..84071499e2 100644 --- a/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTTaxConfiguration.Codeunit.al +++ b/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTTaxConfiguration.Codeunit.al @@ -959,6 +959,8 @@ codeunit 18017 "GST Tax Configuration" UseCases.Add('{321e0f7b-a15d-4ce6-9c11-bf3fd3dee918}', 1); UseCases.Add('{631DEFA0-165E-4BDC-8F8A-AB2A88DF90AD}', 1); UseCases.Add('{9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}', 1); + UseCases.Add('{E8B90257-9F0D-42F4-A340-13A648D11829}', 1); + UseCases.Add('{874048A6-575B-456F-A2E7-26532DA3F1CA}', 1); end; var diff --git a/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTUseCaseLabels.Codeunit.al b/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTUseCaseLabels.Codeunit.al index 903d17045a..9600836e41 100644 --- a/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTUseCaseLabels.Codeunit.al +++ b/Apps/IN/INGST/app/GSTBase/src/TaxEngineSetup/GSTUseCaseLabels.Codeunit.al @@ -203,6 +203,8 @@ codeunit 18019 "GST Use Case Labels" CaseList.Add('{0ebd8b25-3c27-46ae-8cd7-4e870db1315b}'); CaseList.Add('{97437c0c-3e99-4d15-9378-34ac4b8fd002}'); CaseList.Add('{9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}'); + CaseList.Add('{e8b90257-9f0d-42f4-a340-13a648d11829}'); + CaseList.Add('{874048a6-575b-456f-a2e7-26532da3f1ca}'); end; procedure GetConfig(CaseID: Guid; var Handled: Boolean): Text @@ -349,6 +351,8 @@ codeunit 18019 "GST Use Case Labels" "{0ebd8b25-3c27-46ae-8cd7-4e870db1315b}Lbl": Label 'GST Use Cases'; "{97437c0c-3e99-4d15-9378-34ac4b8fd002}Lbl": Label 'GST Use Cases'; "{9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}Lbl": Label 'GST Use Cases'; + "{e8b90257-9f0d-42f4-a340-13a648d11829}Lbl": Label 'GST Use Cases'; + "{874048a6-575b-456f-a2e7-26532da3f1ca}Lbl": Label 'GST Use Cases'; begin Handled := true; @@ -667,6 +671,10 @@ codeunit 18019 "GST Use Case Labels" exit("{97437c0c-3e99-4d15-9378-34ac4b8fd002}Lbl"); '{9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}': exit("{9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}Lbl"); + '{e8b90257-9f0d-42f4-a340-13a648d11829}': + exit("{e8b90257-9f0d-42f4-a340-13a648d11829}Lbl"); + '{874048a6-575b-456f-a2e7-26532da3f1ca}': + exit("{874048a6-575b-456f-a2e7-26532da3f1ca}Lbl"); end; Handled := false; diff --git a/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchCustomDutyAvailment.Codeunit.al b/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchCustomDutyAvailment.Codeunit.al index 801e13db2b..ec38bcce72 100644 --- a/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchCustomDutyAvailment.Codeunit.al +++ b/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchCustomDutyAvailment.Codeunit.al @@ -109,7 +109,7 @@ codeunit 18253 "GST Purch CustomDuty Availment" GenJnlLine."FA Custom Duty Amount" := InvoicePostBuffer."FA Custom Duty Amount"; end; #else - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPreparePurchase', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch. Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure FillInvoicePostingBufferNonAvailmentFA(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; var PurchaseLine: Record "Purchase Line") var QtyFactor: Decimal; diff --git a/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchaseNonAvailment.Codeunit.al b/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchaseNonAvailment.Codeunit.al index a20f3fc2fa..1ccc5d1c28 100644 --- a/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchaseNonAvailment.Codeunit.al +++ b/Apps/IN/INGST/app/GSTPayments/src/Codeunit/GSTPurchaseNonAvailment.Codeunit.al @@ -49,7 +49,7 @@ codeunit 18251 "GST Purchase Non Availment" end; end; #else - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPreparePurchase', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch. Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure FillInvoicePostingBufferNonAvailmentFA(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; var PurchaseLine: Record "Purchase Line") var QtyFactor: Decimal; diff --git a/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPostBatch.Codeunit.al b/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPostBatch.Codeunit.al index 808740fe6c..6343f957b0 100644 --- a/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPostBatch.Codeunit.al +++ b/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPostBatch.Codeunit.al @@ -13,6 +13,7 @@ using Microsoft.Inventory.Tracking; using Microsoft.Purchases.Document; using Microsoft.Purchases.Posting; using Microsoft.Purchases.Vendor; +using Microsoft.Finance.Currency; codeunit 18467 "Subcontracting Post Batch" { @@ -199,6 +200,7 @@ codeunit 18467 "Subcontracting Post Batch" PurchHeader: Record "Purchase Header"; PurchLine: Record "Purchase Line"; PurchLineToUpdate: Record "Purchase Line"; + Currency: Record Currency; PurchPost: Codeunit "Purch.-Post"; begin if not Confirm(PostConfirmationQst) then @@ -230,6 +232,13 @@ codeunit 18467 "Subcontracting Post Batch" PurchHeader.SetRange("No.", PurchLine."Document No."); PurchHeader.SetRange("Subcon. Multiple Receipt", false); if PurchHeader.FindFirst() then begin + if PurchHeader."Currency Code" = '' then + Currency.InitRoundingPrecision() + else begin + PurchHeader.TestField("Currency Factor"); + Currency.Get(PurchHeader."Currency Code"); + Currency.TestField("Amount Rounding Precision"); + end; PurchHeader."Vendor Shipment No." := MultiSubOrderDet."Vendor Shipment No."; PurchHeader.Receive := true; PurchHeader.Invoice := false; @@ -239,6 +248,11 @@ codeunit 18467 "Subcontracting Post Batch" end; PurchLineToUpdate.Get(PurchLine."Document Type", PurchLine."Document No.", PurchLine."Line No."); PurchLineToUpdate."Applies-to ID (Receipt)" := ''; + PurchLineToUpdate."Line Discount Amount" := Round( + Round(PurchLineToUpdate.Quantity * PurchLineToUpdate."Direct Unit Cost", Currency."Amount Rounding Precision") * + PurchLineToUpdate."Line Discount %" / 100, + Currency."Amount Rounding Precision"); + PurchLineToUpdate.UpdateAmounts(); PurchLineToUpdate.Modify(); until PurchLine.Next() = 0 else diff --git a/Apps/IN/INGST/app/Translations/India GST.en-GB.xlf b/Apps/IN/INGST/app/Translations/India GST.en-GB.xlf index fe5bc75753..036815dc42 100644 --- a/Apps/IN/INGST/app/Translations/India GST.en-GB.xlf +++ b/Apps/IN/INGST/app/Translations/India GST.en-GB.xlf @@ -13401,6 +13401,18 @@ Codeunit GST Use Case Labels - Method GetConfig - NamedType {9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}Lbl + + GST Use Cases + + + Codeunit GST Use Case Labels - Method GetConfig - NamedType {e8b90257-9f0d-42f4-a340-13a648d11829}Lbl + + + GST Use Cases + + + Codeunit GST Use Case Labels - Method GetConfig - NamedType {874048a6-575b-456f-a2e7-26532da3f1ca}Lbl + Company Information must have either GST Registration No. or ARN No. diff --git a/Apps/IN/INGST/app/Translations/India GST.en-US.xlf b/Apps/IN/INGST/app/Translations/India GST.en-US.xlf index 6c7ab1335d..95438e5d73 100644 --- a/Apps/IN/INGST/app/Translations/India GST.en-US.xlf +++ b/Apps/IN/INGST/app/Translations/India GST.en-US.xlf @@ -13401,6 +13401,18 @@ Codeunit GST Use Case Labels - Method GetConfig - NamedType {9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}Lbl + + GST Use Cases + + + Codeunit GST Use Case Labels - Method GetConfig - NamedType {e8b90257-9f0d-42f4-a340-13a648d11829}Lbl + + + GST Use Cases + + + Codeunit GST Use Case Labels - Method GetConfig - NamedType {874048a6-575b-456f-a2e7-26532da3f1ca}Lbl + Company Information must have either GST Registration No. or ARN No. diff --git a/Apps/IN/INReports/app/src/enum/GSTR1CDNRPerQuery.Query.al b/Apps/IN/INReports/app/src/enum/GSTR1CDNRPerQuery.Query.al index d2cfa6b7b6..29e568af67 100644 --- a/Apps/IN/INReports/app/src/enum/GSTR1CDNRPerQuery.Query.al +++ b/Apps/IN/INReports/app/src/enum/GSTR1CDNRPerQuery.Query.al @@ -21,6 +21,9 @@ query 18017 GSTR1CDNRPerQuery column(Document_Type; "Document Type") { } + column(Document_Line_No_; "Document Line No.") + { + } filter(Entry_Type; "Entry Type") { ColumnFilter = Entry_Type = filter(= "Initial Entry"); diff --git a/Apps/IN/INReports/app/src/enum/GSTR1CDNRQuery.Query.al b/Apps/IN/INReports/app/src/enum/GSTR1CDNRQuery.Query.al index 046e74faac..721a9f5d14 100644 --- a/Apps/IN/INReports/app/src/enum/GSTR1CDNRQuery.Query.al +++ b/Apps/IN/INReports/app/src/enum/GSTR1CDNRQuery.Query.al @@ -16,9 +16,13 @@ query 18018 GSTR1CDNRQuery { dataitem(Detailed_GST_Ledger_Entry; "Detailed GST Ledger Entry") { + DataItemTableFilter = "GST Component Code" = filter(<> 'CESS'); column(Document_Type; "Document Type") { } + column(Document_Line_No_; "Document Line No.") + { + } filter(Entry_Type; "Entry Type") { ColumnFilter = Entry_Type = filter(= "Initial Entry"); diff --git a/Apps/IN/INReports/app/src/report/GSTR1FileFormat.Report.al b/Apps/IN/INReports/app/src/report/GSTR1FileFormat.Report.al index f30dcd868b..9e3e94ad97 100644 --- a/Apps/IN/INReports/app/src/report/GSTR1FileFormat.Report.al +++ b/Apps/IN/INReports/app/src/report/GSTR1FileFormat.Report.al @@ -1028,6 +1028,7 @@ report 18049 "GSTR-1 File Format" GSTR1CDNRPerQuery.SetRange(Posting_Date, StartDate, EndDate); GSTR1CDNRPerQuery.SetRange(Document_No_, GSTR1CDNRQuery.Document_No_); GSTR1CDNRPerQuery.SetRange(Document_Type, GSTR1CDNRQuery.Document_Type); + GSTR1CDNRPerQuery.SetRange(Document_Line_No_, GSTR1CDNRQuery.Document_Line_No_); GSTR1CDNRPerQuery.Open(); while GSTR1CDNRPerQuery.Read() do if GSTR1CDNRPerQuery.GST_Jurisdiction_Type = GSTR1CDNRPerQuery.GST_Jurisdiction_Type::Intrastate then @@ -1042,9 +1043,9 @@ report 18049 "GSTR-1 File Format" GSTR1CDNRCess.SetRange(Location__Reg__No_, LocationGSTIN); GSTR1CDNRCess.SetRange(Posting_Date, StartDate, EndDate); - GSTR1CDNRCess.SetRange(GSTR1CDNRCess.Document_No_, GSTR1CDNRQuery.Document_No_); GSTR1CDNRCess.SetRange(Document_No_, GSTR1CDNRQuery.Document_No_); GSTR1CDNRCess.SetRange(Document_Type, GSTR1CDNRQuery.Document_Type); + GSTR1CDNRCess.SetRange(GSTR1CDNRCess.Document_Line_No_, GSTR1CDNRQuery.Document_Line_No_); GSTR1CDNRCess.Open(); if GSTR1CDNRCess.Read() then AddNumberColumn(Abs(GSTR1CDNRCess.GST_Amount)) diff --git a/Apps/IN/INTCS/app/TCSBase/src/codeunit/TCSPostPreview.codeunit.al b/Apps/IN/INTCS/app/TCSBase/src/codeunit/TCSPostPreview.codeunit.al index be0e59868e..44263f64ce 100644 --- a/Apps/IN/INTCS/app/TCSBase/src/codeunit/TCSPostPreview.codeunit.al +++ b/Apps/IN/INTCS/app/TCSBase/src/codeunit/TCSPostPreview.codeunit.al @@ -15,30 +15,31 @@ codeunit 18808 "TCS-Post Preview" PostingDateFilter: Text) var TCSEntry: Record "TCS Entry"; - Navigate: Page Navigate; begin if TCSEntry.ReadPermission() then begin TCSEntry.Reset(); TCSEntry.SetCurrentKey("Document No.", "Posting Date"); TCSEntry.SetFilter("Document No.", DocNoFilter); TCSEntry.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry(DocumentEntry, DATABASE::"TCS Entry", 0, CopyStr(TCSEntry.TableCaption(), 1, 1024), TCSEntry.Count()); + DocumentEntry.InsertIntoDocEntry(DATABASE::"TCS Entry", 0, CopyStr(TCSEntry.TableCaption(), 1, 1024), TCSEntry.Count()); end; end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateShowRecords', '', false, false)] + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] local procedure ShowEntries( - TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; - var TempDocumentEntry: Record "Document Entry") + var TempDocumentEntry: Record "Document Entry"; + var IsHandled: Boolean) var TCSEntry: Record "TCS Entry"; begin - TCSEntry.Reset(); - TCSEntry.SetFilter("Document No.", DocNoFilter); - TCSEntry.SetFilter("Posting Date", PostingDateFilter); - if TableID = Database::"TCS Entry" then + if TempDocumentEntry."Table ID" = Database::"TCS Entry" then begin + TCSEntry.Reset(); + TCSEntry.SetFilter("Document No.", DocNoFilter); + TCSEntry.SetFilter("Posting Date", PostingDateFilter); Page.Run(Page::"TCS Entries", TCSEntry); + IsHandled := true; + end; end; } diff --git a/Apps/IN/INTDS/app/TDSBase/src/codeunit/TDSNavigateHandler.Codeunit.al b/Apps/IN/INTDS/app/TDSBase/src/codeunit/TDSNavigateHandler.Codeunit.al index 98e2645ac3..00433e0a49 100644 --- a/Apps/IN/INTDS/app/TDSBase/src/codeunit/TDSNavigateHandler.Codeunit.al +++ b/Apps/IN/INTDS/app/TDSBase/src/codeunit/TDSNavigateHandler.Codeunit.al @@ -8,8 +8,6 @@ using Microsoft.Foundation.Navigate; codeunit 18686 "TDS Navigate Handler" { - var - Navigate: Page Navigate; [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateFindRecords', '', false, false)] local procedure FindTDSEntries( @@ -23,22 +21,24 @@ codeunit 18686 "TDS Navigate Handler" TDSEntry.SetCurrentKey("Document No.", "Posting Date"); TDSEntry.SetFilter("Document No.", DocNoFilter); TDSEntry.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry(DocumentEntry, Database::"TDS Entry", 0, CopyStr(TDSEntry.TableCaption(), 1, 1024), TDSEntry.Count()); + DocumentEntry.InsertIntoDocEntry(Database::"TDS Entry", 0, CopyStr(TDSEntry.TableCaption(), 1, 1024), TDSEntry.Count()); end; end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterNavigateShowRecords', '', false, false)] + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] local procedure ShowEntries( - TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; - var TempDocumentEntry: Record "Document Entry") + var TempDocumentEntry: Record "Document Entry"; + var IsHandled: Boolean) var TDSEntry: Record "TDS Entry"; begin - TDSEntry.SetRange("Document No.", DocNoFilter); - TDSEntry.SetFilter("Posting Date", PostingDateFilter); - if TableID = Database::"TDS Entry" then + if TempDocumentEntry."Table ID" = Database::"TDS Entry" then begin + TDSEntry.SetRange("Document No.", DocNoFilter); + TDSEntry.SetFilter("Posting Date", PostingDateFilter); Page.Run(Page::"TDS Entries", TDSEntry); + IsHandled := true; + end; end; } diff --git a/Apps/IN/INTDS/app/TDSOnPayments/src/ProvisionalEntry/ProvisionalEntryHandler.Codeunit.al b/Apps/IN/INTDS/app/TDSOnPayments/src/ProvisionalEntry/ProvisionalEntryHandler.Codeunit.al index c848513d41..c0d730c0ed 100644 --- a/Apps/IN/INTDS/app/TDSOnPayments/src/ProvisionalEntry/ProvisionalEntryHandler.Codeunit.al +++ b/Apps/IN/INTDS/app/TDSOnPayments/src/ProvisionalEntry/ProvisionalEntryHandler.Codeunit.al @@ -239,27 +239,28 @@ codeunit 18768 "Provisional Entry Handler" local procedure FindTCSEntries(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text) var ProvisionalEntry: Record "Provisional Entry"; - Navigate: page Navigate; begin if ProvisionalEntry.ReadPermission() then begin ProvisionalEntry.Reset(); ProvisionalEntry.SetCurrentKey("Posted Document No.", "Posting Date"); ProvisionalEntry.SetFilter("Posted Document No.", DocNoFilter); ProvisionalEntry.SetFilter("Posting Date", PostingDateFilter); - Navigate.InsertIntoDocEntry(DocumentEntry, Database::"Provisional Entry", 0, Copystr(ProvisionalEntry.TableCaption(), 1, 1024), ProvisionalEntry.Count()); + DocumentEntry.InsertIntoDocEntry(Database::"Provisional Entry", 0, Copystr(ProvisionalEntry.TableCaption(), 1, 1024), ProvisionalEntry.Count()); end; end; - [EventSubscriber(ObjectType::Page, page::Navigate, 'OnAfterNavigateShowRecords', '', false, false)] - local procedure ShowEntries(TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry") + [EventSubscriber(ObjectType::Page, page::Navigate, 'OnBeforeShowRecords', '', false, false)] + local procedure ShowEntries(DocNoFilter: Text; PostingDateFilter: Text; var TempDocumentEntry: Record "Document Entry"; var IsHandled: Boolean) var ProvisionalEntry: Record "Provisional Entry"; begin - ProvisionalEntry.Reset(); - ProvisionalEntry.SetFilter("Posted Document No.", DocNoFilter); - ProvisionalEntry.SetFilter("Posting Date", PostingDateFilter); - if TableID = Database::"Provisional Entry" then + if TempDocumentEntry."Table ID" = Database::"Provisional Entry" then begin + ProvisionalEntry.Reset(); + ProvisionalEntry.SetFilter("Posted Document No.", DocNoFilter); + ProvisionalEntry.SetFilter("Posting Date", PostingDateFilter); Page.Run(Page::"Provisional Entries Preview", ProvisionalEntry); + IsHandled := true; + end; end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"Gen. Jnl.-Post Line", 'OnAfterRunWithoutCheck', '', false, false)] diff --git a/Apps/IN/INTaxBase/app/Translations/India Tax Base.en-US.xlf b/Apps/IN/INTaxBase/app/Translations/India Tax Base.en-US.xlf index b1b877a1c1..543c54f319 100644 --- a/Apps/IN/INTaxBase/app/Translations/India Tax Base.en-US.xlf +++ b/Apps/IN/INTaxBase/app/Translations/India Tax Base.en-US.xlf @@ -270,7 +270,7 @@ Use Case Tree Place holder - ''),Field18080=1(<>''),Field18096=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000311","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Registered/Unregistered","NodeType":"Use Case","TableID":39,"CaseID":"{F6F63738-94DD-4B0B-BAD6-4EC11668D327}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000312","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8D93354A-64E8-4DA5-A1A7-741A42B80B33}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000313","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{826B72ED-5C21-45CA-A966-8443C38B768A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000314","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{7C64DCF3-718C-405E-A389-582FD1E33E5D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000315","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{71ED6108-7E6C-42E3-BEC8-DF9AD0C7A27E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000316","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{C724AA5A-92F2-4965-957B-C43EEACAABE6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000317","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - G/L Account","NodeType":"Use Case","TableID":39,"CaseID":"{DEEB69C8-EDAA-4A5A-875E-A20DA52008BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000318","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{DE898176-3602-4CBD-BF29-EAF4A9C03987}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000319","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - G/L Account (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{F7192A60-5739-4B72-AB1D-FB48ED3EE0F9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000320","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{3E8E1EDA-828E-40BE-8FD4-3456546F47A6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000321","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{FD3380A2-217C-4059-A344-1D832B755088}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000322","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice- Fixed Asset","NodeType":"Use Case","TableID":39,"CaseID":"{E1914856-FF7A-4B3A-99D5-17190CE10C27}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000323","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8D7FD8C3-FCB1-4968-8FD6-08181778EC29}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000324","Name":"Calculation of Cess where input tax Credit is Not Available for Goods through Purchase Quote/Order/Invoice -(Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{1E087C72-9078-4C31-ABD5-38F01008E508}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000325","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{508FE302-0CAB-41B6-8C43-737EBE931312}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000326","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{68FE3FB0-9F3C-44A6-9686-F37192B1A371}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000327","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{2EA01E14-807E-4CC7-8494-9EAAFBA21709}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000328","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice -Fixed Asset(Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{6ADC0F4A-6D69-4BAE-A94F-7DC0889758DC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000329","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{C9822271-8F51-46B7-B4BD-A2B424B1699B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000330","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{C63F1B6C-96EE-41CB-879B-801CE9C734A6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000331","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{F748E0D1-BC76-4D68-8CBD-FF4189DC3517}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000332","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{AE6444ED-20D1-4E69-A69C-7DCAEC9C4738}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000333","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Fixed Asset from Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{535A4B2C-EEA4-4267-8638-F57DE9153FDD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000340","Name":"End Cess on Purchase","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000350","Name":"Cess on Purchase Return","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(3|5),Field7=1(<>''),Field18080=1(<>''),Field18096=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000351","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Registered/Unregistered","NodeType":"Use Case","TableID":39,"CaseID":"{725E8FB9-C4CC-42B7-B060-5E86614A8168}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000352","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{EFF1E5F5-6CC1-414D-BD1F-1095D42F9A4A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000353","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/ Credit Memo - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8BB1C380-7CFE-4B49-82AD-78BBA652EB5C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000354","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{231587B2-D0BD-4362-9A3B-11839F7BB326}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000355","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{CEAE9F6C-7E67-4347-9E66-A9C6C54E4ECE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000356","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - G/L Account","NodeType":"Use Case","TableID":39,"CaseID":"{F33121DD-68CB-423C-A98B-6FF10BD8CED7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000357","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - G/L Account (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{75A11E67-E9DF-446F-974A-AE9F91D8EA1C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000358","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/Credit Memo - Goods from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{6F2DE875-4569-41DB-A28E-021E4D00378A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000359","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/Credit Memo - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{7D571F8D-B6A0-47E0-B80F-9AC703DF1D3B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000360","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/ Credit Memo - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A622E949-C161-4AE2-B6DB-7D3C16E5D899}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000361","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Fixed Asset","NodeType":"Use Case","TableID":39,"CaseID":"{43F17130-4EA1-48FE-B1A8-716EE5DF7C16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000362","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/ Credit Memo - Fixed Asset from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{3A6F385C-72E7-42C6-A696-47102B270402}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000364","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/ Credit Memo - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{6DEEF440-3A5B-4201-9D1B-59AC37AF4C36}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000365","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/Credit Memo - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{C08A9FD5-5ECC-4BB5-8A19-345060822129}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000366","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Fixed Asset(Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{CBDB09CC-FB6C-4475-89A3-62C04DADFA15}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000367","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo Unregistered Vendor- Item (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{39808C8A-4131-4B49-BF1D-D8FA64667B3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000368","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{812C7B77-0622-4E71-9F4E-261C3874A680}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000369","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{3B82DBC4-FAAE-477D-892C-AD82ECDFEF7E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000370","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo -G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{B4A44DCF-6090-4813-9C09-193AB1A09B93}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000371","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{A79DCE33-C753-4680-A6A3-F824608702B1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000372","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Fixed Asset - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{FBD319E5-BDFD-43E8-B9EB-275F01FA6A40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000380","Name":"End Cess on Purchase Return","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000500","Name":"Cess on Sales","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2|4),Field5=1(1|2|4|3),Field7=1(<>''),Field18142=1(<>''),Field18144=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000501","Name":"Calculation of Cess on sales to Registered/Unregistered Customer through Sales Quote/Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{3D30F63D-D6C1-4B1B-ACFD-E252FAB190E2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000502","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Quote/Order/Invoice with Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{9B4E1225-00F2-4467-BA93-29AD1F2EBD46}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000503","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Quote/Order/Invoice without Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{0F354915-7E17-421B-87D8-7E6C2716E173}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000504","Name":"Calculation of Cess on sales to Registered/Unregistered/Exempted/SEZ/SEZ Development/ Deemed Export Customer through Sales","NodeType":"Use Case","TableID":37,"CaseID":"{33CD3931-0BA0-4358-B808-5C6378CAA489}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000505","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Quote/Order/Invoice with Payment of Duty - Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{37EFA642-056C-45E8-974E-6B41B335FC81}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000506","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Return Order/Credit Memo with Payment of Duty - Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{DE8006B8-CF9F-474A-AE29-C7903A148261}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000600","Name":"End Cess on Sales","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000601","Name":"Cess on Sales Return","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(3|5),Field5=1(2|1|3|4),Field7=1(<>''),Field18142=1(<>''),Field18144=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000602","Name":"Calculation of Cess on sales to Registered/Unregistered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{272FFE9F-A7C9-4AF8-87DD-3EA53BA18511}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000603","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Return Order/Credit Memo with Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{9DB4ECE1-3397-4ADD-9EA8-40A8D82A6A9A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000604","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Return Order/Credit Memo without Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{423BECDD-68DC-4541-9047-8F6B797709E5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000605","Name":"Calculation of Cess on sales to Registered/Unregistered/Exempted/ SEZ/ SEZ Development/ Deemed Export Customer through Sales Return Order/ Credit Memo - Exempted","NodeType":"Use Case","TableID":37,"CaseID":"{ED1E0A5D-C364-4F36-847E-AAE263B34185}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000700","Name":"End Cess on Sales Return","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000701","Name":"Cess on Transfer Order","NodeType":"Begin","TableID":5741,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field3=1(<>''),Field18394=1(<>''),Field18395=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000702","Name":"Calculation of Cess in Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{631DEFA0-165E-4BDC-8F8A-AB2A88DF90AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000750","Name":"End Cess on Transfer Order","NodeType":"End","TableID":5741,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-001000","Name":"End GST Cess","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100001","Name":"GST","NodeType":"Begin","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"GST","IsTaxTypeRoot":true},{"Code":"TE-100011","Name":"Subcontracting GST For Delivery Challan Line","NodeType":"Begin","TableID":18469,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field54,Field55) WHERE(Field46=1(<>''),Field47=1(<>''),Field102=1(<>''),Field103=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100012","Name":"Intra-state Subcontracting GST For Delivery Challan Line for Registered Vendor","NodeType":"Use Case","TableID":18469,"CaseID":"{5388F401-5CDE-4918-A9B0-B7B134235921}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100013","Name":"Inter-state Subcontracting GST For Delivery Challan Line for Registered Vendor","NodeType":"Use Case","TableID":18469,"CaseID":"{6A75BFF5-C880-498F-AC1D-E9CF9BE7F888}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100099","Name":"Subcontracting GST For Delivery Challan Line","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100100","Name":"Subcontracting GST For GST Liability Line","NodeType":"Begin","TableID":18470,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field3,Field4) WHERE(Field46=1(<>''),Field47=1(<>''),Field102=1(<>''),Field103=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100101","Name":"Intra-state Subcontracting GST on GST Liability Line for Registered Vendor","NodeType":"Use Case","TableID":18470,"CaseID":"{81A83FF9-D7EB-4B5F-A2AE-ED346B7A9079}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100102","Name":"Inter-state Subcontracting GST on GST Liability Line for Registered Vendor","NodeType":"Use Case","TableID":18470,"CaseID":"{81A24E9D-52B9-4EFE-A18B-398C6BAD55ED}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100199","Name":"Subcontracting GST For GST Liability Line","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100200","Name":"GST Finance Charge Memo","NodeType":"Begin","TableID":303,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field18142=1(<>''),Field18144=1(<>''))","TaxType":"GST","IsTaxTypeRoot":false},{"Code":"TE-100201","Name":"InterState GST Calculation on Finance Charge Memo For Registered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{10675EE2-5AA7-4D43-8794-03BA8CD85445}","Condition":"VERSION(1) SORTING(Field1,Field2)","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100202","Name":"Intrastate GST Calculation on Finance Charge Memo For Registered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{853FC9A7-4D6E-4511-8207-BB18D1FFC0E8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100203","Name":"InterState GST Calculation on Finance Charge Memo For SEZ Unit/SEZ Development/Deemed Export Customer With Payment of Duty.\n","NodeType":"Use Case","TableID":303,"CaseID":"{CAC3F49D-59DD-4F1A-B0F3-AC28F7552973}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100204","Name":"InterState GST Calculation on Finance Charge Memo For Unregistered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{C4BC4E11-E295-4A20-9F5F-801F2406A610}","Condition":"VERSION(1) SORTING(Field1,Field2)","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100205","Name":"Intrastate GST Calculation on Finance Charge Memo For Unregistered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{34D44752-1655-43CC-8DD8-9CBA775C5554}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100206","Name":"Intrastate GST Calculation on Finance Charge Memo For Exempted Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{4C815B8B-6831-4E19-899D-361FBA9CFC43}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100207","Name":"InterState GST Calculation on Finance Charge Memo For Exempted Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{EC7AE7B0-93FA-42C2-9717-BBD2E8FC4D4C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100208","Name":"InterState GST Calculation on Finance Charge Memo For SEZ Unit/SEZ Development/Deemed Export Customer Without Payment of Duty.\n","NodeType":"Use Case","TableID":303,"CaseID":"{6946230A-A2F4-4E4B-90C6-6C907D010EB5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100300","Name":"GST Finance Charge Memo","NodeType":"End","TableID":303,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110001","Name":"Sales","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field7=1(<>''),Field18142=1(<>''),Field18144=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110501","Name":"Sales Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2|4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110601","Name":"Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110696","Name":"Sales Line No Not Blank","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field6=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110700","Name":"Export to SEZ/ SEZ Development /Deemed Export With Payment of Duty through Sales Order/Invoice - Exempted","NodeType":"Use Case","TableID":37,"CaseID":"{A4C57AB8-DBFF-473C-B2A3-739975737950}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110701","Name":"Intra State Sales of Exempted from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4911101A-A3D1-4596-836C-A9EB2F2CB24C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110702","Name":"Inter State Sales of Exempted from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{CA856646-6B6F-42D2-A4CC-64A8F52DE9F6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110703","Name":"Inter State Sales of Exempted from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{CE4E5351-F5F5-413A-AAF9-6C5EA6530D93}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110704","Name":"Intra State Sales of Exempted from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{887FEE8B-EFB6-4010-B79B-4CDB44F23CC8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110705","Name":"Intra State Exempted Sales for Deemed Export Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{332A3E45-C1C8-423A-9063-B55EFA585045}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110706","Name":"Export and Exempted to Foreign Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{74E6E05F-641D-4857-8F88-C48783B29B3E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110707","Name":"Intra state Sales of Charge Item from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{D2C0BC32-D71C-4FEC-A3FC-63A0586DA3D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110708","Name":"Inter State Sales of Exempted Charge Item from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{8E20FC81-1137-41B3-A90E-AE86CD66F718}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110720","Name":"End Sales Line No Not Blank","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110721","Name":"Type - G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110722","Name":"Intra state Sales of Services from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A9D34135-2984-4C5D-99C0-5563408C59EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110723","Name":"Inter State Sales of Exempted Services from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{E474605D-6956-438B-95F2-DA5BE6A6D741}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110740","Name":"End Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110741","Name":"Begin Type - Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110742","Name":"Inter State Sales of Exempted Goods from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{144DB41F-813A-4EE0-87EC-7082D07652B7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110743","Name":"Intra state Sales of Goods from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{C3901ECF-9316-49A7-9897-B8C52A5A66A0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110760","Name":"End Type - Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110761","Name":"Begin Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110762","Name":"Inter State Exempted Sales of Fixed Assets from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A48A1647-673E-4C77-9997-143963591989}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110763","Name":"Intra state Sales of Fixed Asset from Exempted Customer through Sales Quote/ Order/ Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{26405773-06F9-4F36-B6B1-E80AA9987628}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110780","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110801","Name":"End Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-111001","Name":"Not Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-111950","Name":"Sales Line No Not Blank","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field6=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112001","Name":"Intra-State Sales of Services to Overseas Place of Supply to Registered Customer Through Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{FA5B2691-7B6B-43B4-92F1-9B6D10A216E4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112002","Name":"GST Deemed Exports With Payment of Duty through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{B66179F8-E62E-45F8-9DE3-5351C859F85D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112003","Name":"Intra State Sales for Deemed Export Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{2C82CF3D-40B2-4FCC-8F04-E649DADD1619}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112004","Name":"Intra State Sales for Deemed Export Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{1F930CB5-93A8-4BE9-B412-B9B44F1FBE2B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112005","Name":"Intra State Sales for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{71177393-F102-466E-AC36-1A460BC1C3E9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112010","Name":"End Sales Line No Not Blank","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112051","Name":"Type - Charge Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112052","Name":"Intra State Sales of Charge Item from Registered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{7422E62E-F5A5-46C6-8A2D-9F9F4C082C91}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112053","Name":"Intra State Sales of Charge Item from Unregistered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A9E13C42-F366-4E5F-A057-1E0B4E43D454}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112054","Name":"Inter State Sales of Charge Item from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{F5794DA7-0CC7-42C2-BEA0-18EB8F98BB5A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112075","Name":"Inter State Sales of Charge Item from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{207FA1CE-712A-475E-AC05-B36812DDE2C8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112076","Name":"Export Sales of Charge Item from SEZ Unit / Development through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4083D3D9-1F73-48ED-ABD1-12C0559D270F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112077","Name":"Export Sales of Charge Item from SEZ Unit / Development without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{EFF7E856-EF6B-4EC0-9AAE-C2E07B6CB15B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112078","Name":"Export Sales of Charge Item from SEZ Unit / Development through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{40065229-E7D9-4C0A-A0EB-5DE70DD4E9AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112079","Name":"GST Deemed Exports for Charge Item through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{929EB05F-45B5-4F4F-9DD4-61AFAB36F21B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112080","Name":"GST Deemed Exports for Charge Item Without Payment of Duty through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{A2608A05-D116-4475-B690-A6E26170BC2C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112081","Name":"Export Charge Item to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9D6C4AC2-81D1-47E7-8C7C-494F20F1719F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112082","Name":"Export and Charge Item to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9CBCEC6F-A01B-422B-8AAB-4B6BC90EC959}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112100","Name":"End- Type - Charge Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112101","Name":"Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112102","Name":"Inter State Sales of Fixed Asset from Registered Customer through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{46CB3503-286F-43C3-9B04-FBBD5F2CBAF0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112103","Name":"Intra State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{636979B2-6B57-49C6-B0B8-B306261B3304}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112104","Name":"Intra State Sales of Fixed Asset from Registered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A4044120-D393-4525-88F4-AB1A71F2E49C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112105","Name":"Inter State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{52FD8776-17C2-428A-B747-159404771D07}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112106","Name":"Export Fixed Asset to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{AF5EE023-63DF-4210-AD71-6436230F6DFA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112107","Name":"GST Deemed Exports of Fixed Asset through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{7B9EA3AF-2235-44F9-AE67-E0F9F74740E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112108","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{8E2CB0E2-795D-4DC3-879B-5117E415DFB9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112109","Name":"Export Fixed Asset to SEZ Unit Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{8FDC8D41-E5D7-40D7-B962-80DA519596F3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112110","Name":"Export Fixed Asset to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{C99A231E-6BBF-4982-AEAF-6CAAC7E5BA9B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112111","Name":"Export Fixed Asset to Deemed Export Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4490AC87-E83B-44C4-A6A8-EAF2650E8773}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112112","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice - Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{6EC9FAFD-8029-4B9C-8899-CB3C494682D1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112113","Name":"Export of Fixed Asset to SEZ Development Without Payment of Duty through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{24BF4F23-3693-4E31-ADDA-9D2F91057CA2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112114","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{58789CA5-0F23-4972-B1FE-3EE6E8BC19A1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112115","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{A18E31F4-0E06-42B6-B8E0-282B42CA2A28}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112214","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112249","Name":"Type - G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112250","Name":"Intra State Sales of Services from UnRegistered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{1BAE51D1-AD26-40F8-BFD2-156024A23A7B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112251","Name":"Inter State Sales of Services from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{2E7A7A10-CCD5-4673-AF42-1EF83425931F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112252","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4529A161-49CC-44B6-95BA-CC141FA794B1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112253","Name":"Intra State Sales of Services from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4962D3B9-0349-4BE9-B173-22B456AEE6C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112254","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{BF9D05ED-BF8A-4BC8-9195-D008E4E381FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112255","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice. - POS","NodeType":"Use Case","TableID":37,"CaseID":"{E6D39823-CCCC-43DC-BD7E-CC6EEEBDB5EB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112256","Name":"Export and Service to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{DD3CF85B-64EA-4DD4-A626-C472E3B3B072}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112257","Name":"Export and Service to Foreign Customer With Payment of Duty through Sales Order/Invoice With GST on Assessable value.","NodeType":"Use Case","TableID":37,"CaseID":"{1C9C14DA-22A0-4F6B-968A-1F79BE11B7A1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112258","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{ABD1A54F-36DA-45A7-AFED-451B98434B0C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112259","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B2150DAA-4B46-41F2-89BF-19F5FD89362E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112260","Name":"Export Services to SEZ Development Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{F8591F7C-5D5C-4976-B5F1-E3248733EBC5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112261","Name":"Export Services to Deemed Export Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{21A349A2-B069-4AA5-86B9-34136BE37267}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112262","Name":"Export Service to SEZ Unit Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{512B21D6-5395-499F-A2BE-EF6D24385C89}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112263","Name":"Export Services to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{8638A2E3-3F44-4672-A54D-0D65B1528FF9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112264","Name":"Calculation of GST Services where Unregistered Transporter, TPT Location is different and Pick Up Location and Delivery Location is same through Sale Orders/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{99C83819-83BC-418A-A2A7-26A041F2F99A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112265","Name":"Inter State Sales of Services from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{C6AAB568-68A3-4D8A-A708-ECD7EFD9A3EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112266","Name":"Intra State Sales of Service from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{9666CA08-2C56-43C5-B36F-7FD3745FE832}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112267","Name":"Inter State Sales of Service from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{D9221422-669E-485D-8224-053D641FE4F3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112268","Name":"GST Deemed Exports of Services through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{67F7C66D-5296-4A5F-A85F-D4B91D1DBF97}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112269","Name":"Calculation of Transportation of Services from Registered Vendor, where TPT Location and Pick Up Location is same and Delivery Location is different. through Sales Order","NodeType":"Use Case","TableID":37,"CaseID":"{8D0E6401-974F-4F8E-9254-2AF9067E73DC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112270","Name":"Calculation of Transportation of Services from Un-Registered Vendor, where TPT Location and Pick Up Location is same and Delivery Location is different. through Sales Order","NodeType":"Use Case","TableID":37,"CaseID":"{99F473AC-553E-4032-AEDB-0AE44C871CD2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112271","Name":"Calculation of GST in case of Transportation of Service where Registered Transporter State is different and Pick Up Location State and Delivery Location State is same through Sale Orders","NodeType":"Use Case","TableID":37,"CaseID":"{02B82B77-D7E5-4A49-89A2-6D46EC87AE61}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112272","Name":"Calculation of GST in case of Transportation of Service where Un-Registered Transporter State is different and Pick Up Location State and Delivery Location State is same through Sale Orders","NodeType":"Use Case","TableID":37,"CaseID":"{76F9EC4B-C6F3-4DBE-B1CA-04EFC5AD609E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112273","Name":"Calculation of Transportation of Services from Registered Vendor, , TPT Location is different and Pick Up Location is different and Delivery Location is different through Sale Orders","NodeType":"Use Case","TableID":37,"CaseID":"{CF4626CB-7022-41C6-95C6-E1FE28C8C370}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112274","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice -Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{C447C36E-72FA-4FEA-A49C-F976FE57275D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112275","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice -Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{5043629A-E2D7-4E0D-AD7F-C9D505507D01}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112276","Name":"Intra State Sales of Service from Registered Customer through Sales Order/Invoice For Ship To Address.","NodeType":"Use Case","TableID":37,"CaseID":"{0321474A-ABD0-45DB-8CEA-B586A5CB7F49}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112399","Name":"End Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112400","Name":"Type - Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112401","Name":"Inter State Sales of Goods from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{11160E03-89D0-481D-B2EA-24898F3DB4AB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112402","Name":"Intra State Sales of Goods from UnRegistered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{364EABA8-DF5D-4174-951E-9C9B375830D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112403","Name":"Intra State Sales of Goods from Registered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{A8BF5AD2-5132-40E7-9DF1-893B3940F6EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112404","Name":"Intra State Sales of Goods from Unregistered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{CFE77ACE-1F20-4126-98D9-8D14B18088EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112405","Name":"Inter State Sales of Goods from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B61CB389-28BD-4569-BF95-284B62972B23}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112406","Name":"Intra State Sales of Goods from Registered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{6B464955-261F-4EAF-A749-7807444FC37C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112407","Name":"Export and Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{55AD5167-785F-4CC3-B633-84A8414EE100}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112408","Name":"Export and Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice With GST on Assessable value.","NodeType":"Use Case","TableID":37,"CaseID":"{23C292E2-9704-4112-9AB6-A2FCBDDFFA6A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112409","Name":"Export Goods to SEZ Unit Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{2961B717-F882-4174-A7D0-98737C7F49A2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112410","Name":"Export Goods to SEZ Unit With Price Inclusive of Tax through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112411","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{6621F516-24B5-47CC-AB8B-6EF51F2616E3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112412","Name":"GST Deemed Exports of goods through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{759DC0B3-0697-4262-B0B6-12AA4A6E3822}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112413","Name":"Export Goods to Deemed Export Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{AA3E77B0-A08A-4756-90E5-F6561C7D4B9B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112414","Name":"Export and Goods to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{BAEC40C3-3C56-4B4F-95C9-ED6E1E39A019}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112415","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B618D919-C2A5-4BB8-B7EF-13784A51A6D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112416","Name":"Export Goods to SEZ Development Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{34D0EE0E-FC73-416C-A59C-484107E36965}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112417","Name":"Intra State Sales of Goods from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{74601C3A-21C1-4924-950E-039ADD6086E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112418","Name":"Inter State Sales of Goods from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{E06B429C-0CDD-4F49-9C4D-8546151805AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112419","Name":"Intra State Sales of Goods from Registered Customer through Sales Order/Invoice - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{888E76DA-FA62-4714-83A3-76777E325D84}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112420","Name":"Inter State Sales of Goods from Registered Customer through Sales Order/Invoice - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{277B1053-C551-4BF4-9518-7BFE200A8E18}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112421","Name":"Export Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice with Shipment locally as Intrastate.","NodeType":"Use Case","TableID":37,"CaseID":"{9F7A9C0A-BC4A-45C2-B79B-7D22EDB6ABBB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112422","Name":"Export Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice with Shipment locally as Interstate.","NodeType":"Use Case","TableID":37,"CaseID":"{F69C2334-D38A-4CC1-B701-D7DC4C3B7CA9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112423","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice - Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{13217522-8F07-4C15-9787-8B1840E8CC40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112424","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{FA8E63F5-19A9-4940-AD59-DB7067BE069A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112450","Name":"End Type - Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112500","Name":"Type - Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112501","Name":"Intra State Sales of Resource from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{D1629C9B-AA5B-4237-94CE-5B14BAF756C0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112502","Name":"Intra State Sales of Resource from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9B0FE6DB-6121-44B0-8BD0-08B8060D7A92}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112503","Name":"Inter State Sales of Resource from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{D95F6D4E-EEF5-41B7-8284-694BCBDFEABD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112504","Name":"Export Resource to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{60F5C368-9B10-45CB-BB1B-63DEF7520AB6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112505","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{77D07467-2180-4712-814A-A6292F8D5E59}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112506","Name":"GST Deemed Exports for Resource through Sales Order/ Invoice\n","NodeType":"Use Case","TableID":37,"CaseID":"{BE8902D9-72AA-41C9-BACE-1B781D7C8107}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112507","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{96B76AC2-66FF-4457-9DE3-3F2A3213C3E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112508","Name":"Inter State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{B2047EB4-AD5D-4E8B-BFFC-94FB1C4EED34}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112509","Name":"Inter State Sales of Resources from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{C8652C10-76BA-489E-985D-CFFC24D6276B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112510","Name":"Inter State Sales of Resource from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{149E867B-BE67-4BA4-AE3B-36C10F7552F5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112511","Name":"Inter State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{6F89240D-BBA1-4BB9-85B6-0BE2154EE0B8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112512","Name":"Intra state Sales of Resources from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A1895816-94BF-4F67-819E-D3898920FAF5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112513","Name":"Intra State Calculation of GST on Resource to SEZ Unit / Development Without Payment of Duty through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{969F9BE2-D2C0-4DB5-BD38-F9DAC8AB8173}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112514","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{882CB936-42D9-4C2D-BFD9-028D5F5D3337}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112515","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{4B114178-6589-41CD-907E-8C46CCDFE895}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112516","Name":"Inter State Calculation of GST on Resource to SEZ Unit / Development Without Payment of Duty through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{E28ED0E6-8917-4D81-AD22-29D13FE94091}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112517","Name":"Inter State Calculation of GST on Resource to SEZ Unit / Development through Sales Order/ Invoice-Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{E9ED8CB8-E0BD-4E8A-88A5-1AA7348ACF20}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112518","Name":"GST Deemed Exports for Resource Without Payment of Duty through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{E65CE6AA-C447-466E-A3FE-154D3F5A76DC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112519","Name":"Inter State Sales of Resource from UnRegistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{DF167294-5878-44C6-9220-01D93BEA09FF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112520","Name":"Inter State Sales of Resource from Unregistered Customer through Sales Order/Invoice without FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{C8BA6CA4-7E8C-4053-980D-451FE32D8EFA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112550","Name":"End Type - Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112600","Name":"End -Not Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112601","Name":"Begin FOC","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18157=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112602","Name":"Begin Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112603","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112604","Name":"Intra State Sales for Goods from Registered Customer through Sales Order/Invoice With FOC","NodeType":"Use Case","TableID":37,"CaseID":"{6333F9D2-02B8-4FF1-88EE-386041B7FCA4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112605","Name":"Inter State Sales of Goods from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{C69C8C2B-3445-476C-80ED-776EC67B06D3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112609","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112610","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112611","Name":"Intra State Sales of Goods from Unregistered Customer through Sales Order/Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{A4B4B64C-1D4C-48EE-88E9-4BBC4F05EAE8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112612","Name":"Inter State Sales of Goods from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{E786A7D6-1147-46F6-BB75-1223AAC92007}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112616","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112617","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112618","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{BB38433A-2AE4-492D-8380-D8B5A6F80135}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112619","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{F0E83015-3886-4263-A0B7-A97BA3B7753C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112623","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112624","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112625","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice - Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{BE591554-5098-41FD-A200-5B5B48C19083}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112626","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{CF0F6DEA-A530-45B3-8B1B-CF86879E9EDA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112630","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112631","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112632","Name":"Intra State Sales for Deemed Export Customer for Goods through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{ADF93FBF-84BB-4DC9-8B87-EADDE08829F0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112633","Name":"GST Deemed Exports of goods through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{4116F9D4-1957-46D1-BCED-580BD21C0908}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112634","Name":"Intra State Sales for Goods for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{17DA0FC6-FC3F-4AB5-A2C7-34D00B649941}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112635","Name":"GST Deemed Exports for Goods With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{44130B2E-FBA8-47DE-BF1F-AF9145AC13BD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112637","Name":"EndGST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112638","Name":"End Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112639","Name":"Begin Type- G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112640","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112641","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{03D7D334-04D2-4EC5-AE88-A67C1409C8BE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112642","Name":"Inter State Sales of Services from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{08EACBE7-7B68-4B7B-8BCE-8D5D4FAD80F0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112647","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112648","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112649","Name":"Intra State Sales of Services from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{8D8429D6-2B1A-4081-900E-9D19C312335E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112650","Name":"Inter State Sales of Services from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{EA505D2C-22A0-4B4B-B20F-18A0E1AE2C02}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112653","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112654","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112655","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice -Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{81345EC6-231D-4274-95D2-302FFE85B903}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112656","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{FD5FD103-5251-4063-92C9-CCFE016B971B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112661","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112662","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112663","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice -Post GST to Customer For FOC","NodeType":"Use Case","TableID":37,"CaseID":"{6807FDAC-8BCB-4B1A-84FF-882C6A9C15B7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112664","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{0561985A-B2F9-4C9C-BE39-7D6AE423104E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112669","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112670","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112671","Name":"Intra State Sales for Deemed Export Customer for Services through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{3C1D2A94-CBAE-4190-BE50-AD56CF9218D9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112672","Name":"GST Deemed Exports of Services through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{05CEE5AD-FF50-479C-922C-1C51FE10F724}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112673","Name":"Intra State Sales for Services for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{741172E2-8B2D-461D-9081-71145F1316DF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112674","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112675","Name":"End Type- G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112676","Name":"Begin Type Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112677","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112678","Name":"Intra State Sales of Resource from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{9E8F612A-6306-4CD0-AA63-8F443733B9B5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112679","Name":"Inter State Sales of Resource from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{E8ACBB6B-EAAF-46C6-A4EA-EFB502D8E110}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112684","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112685","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112686","Name":"Intra State Sales of Resource from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{DC79D469-98CD-45FF-ADBB-27DFF74D2672}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112687","Name":"Inter State Sales of Resource from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{13827C55-0612-40EF-BED1-62D7605B9D68}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112692","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112693","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112694","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{747B1A95-DF79-4286-A38B-A6F98F2D2DE1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112695","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{5582B9B9-2C0C-4036-A0E1-ED20495D47AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112701","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112702","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112703","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{8B4B45EC-5B92-4383-935B-DE2E70579CA8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112704","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{51CD0A49-E8DF-42A3-9180-84D1A7076A42}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112710","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112711","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112712","Name":"Intra State Sales for Deemed Export Customer for Resource through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{103E8A37-530C-4FFF-BB01-D298E7DF9FFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112713","Name":"GST Deemed Exports for Resource through Sales Order/ Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{F356E0FE-23C7-4D81-A149-3659F2CEFBB4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112714","Name":"Intra State Sales for Resource for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{29C6FB1D-F01C-426F-AC3E-76E9122FDB69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112715","Name":"GST Deemed Exports for Resource With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{97120CFC-A3A4-4545-8A71-881473ED33C7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112720","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112750","Name":"End Type Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112751","Name":"Begin Type- Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112752","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112753","Name":"Intra State Sales of Fixed Asset from Registered Customer through Sales Order/Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{CF89D22F-0CD8-4E3C-A01C-6C159E03E5E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112754","Name":"Inter State Sales of Fixed Asset from Registered Customer through Sales Quote/Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{5860DC76-AE27-4A12-808D-667172BEF336}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112760","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112761","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112762","Name":"Intra State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{84992760-0362-488C-8D49-0DE8065F945C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112763","Name":"Inter State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{FBBCEAFB-3B22-4D36-969E-84AB2CDC7859}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112769","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112770","Name":"Begin GST Customer Type SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112771","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice - Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{FC888469-0E29-48BA-B417-07D5943D7C45}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112772","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{307349C1-C724-4CB8-8878-7587CC2617EC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112778","Name":"End GST Customer Type SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112779","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112780","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice -Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{A8B33288-CA54-4DC6-B3E4-A14E3CCA4EFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112781","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{DA8695B6-D7D7-41E9-BE59-C26A19D03C2C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112789","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112790","Name":"Begin GST Customer Type - Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112791","Name":"Intra State Sales for Deemed Export Customer for Fixed Assets through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{02A9B37F-66A8-446A-B5B0-703D594FF934}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112792","Name":"GST Deemed Exports of Fixed Asset through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{7E2F85F6-FFBA-45FE-80B5-39B654365ACD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112793","Name":"Intra State Sales for Resource for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{29C6FB1D-F01C-426F-AC3E-76E9122FDB69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112794","Name":"GST Deemed Exports for Fixed Asset With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{23F3D552-5B8B-47A9-B217-903567666BCE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112800","Name":"End GST Customer Type - Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112820","Name":"End Type- Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112821","Name":"Begin Type G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112822","Name":"Begin GST Customer Type Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112823","Name":"GST Deemed Exports for Services With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{53D88A93-5CE2-427C-81F0-6DCFC36F579F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112826","Name":"End GST Customer Type Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112827","Name":"End Type G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112840","Name":"End FOC","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112845","Name":"End Sales Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112848","Name":"Sales Return Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(5|3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112849","Name":"Not Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112850","Name":"Type - G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112851","Name":"Intra-State Sales Return of Services to Overseas Place of Supply to Registered Customer Through Sales Return","NodeType":"Use Case","TableID":37,"CaseID":"{44F4B3DF-4625-4E8F-9BE3-53C61B67463B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112852","Name":"Intra State Sales Return of Services from Registered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{BC238FA9-CAD7-43AB-8E7E-D6FFC7035EE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112853","Name":"Inter State Sales Return of Services from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{693D346E-069E-4306-9F7C-84665CD42141}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112854","Name":"Inter State Sales Return of Services from Registered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{80BC1B3E-DB26-4E90-B780-43C8BA593655}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112855","Name":"Intra State Sales Return of Services from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{8A18FA5B-AD17-43D3-8981-5BB20A04EFA2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112856","Name":"Intra State Sales Return of Services from Registered Customer through Return Order - POS","NodeType":"Use Case","TableID":37,"CaseID":"{1FF813B4-1776-4717-8C56-8F0E684ACE73}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112857","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{DB44587F-08FB-4D5F-96A3-6CD4D4E30300}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112858","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{895C47DF-89E2-4A14-9329-5E260C1DBF05}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112859","Name":"Export Return of Services to SEZ Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{81E2ACA0-D6DD-4B4A-ADEF-60B602660F25}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112860","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{1DE560C5-73C9-4476-9447-80FC42CD492C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112861","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo - POst GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{8139E94E-D43E-4C24-B6B3-C59F55737321}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112862","Name":"Export Return of Goods to Export Customer for item Type GL Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{4738101C-19E3-418C-A19D-61E67100D199}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112890","Name":"End - Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112895","Name":"Type - Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112896","Name":"Intra State Sales Return of Goods from Registered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{26581492-A8D9-41EB-B84E-40671AE8CC3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112897","Name":"Inter State Sales Return of Goods from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{77DC6AF2-5D31-4450-8F78-E2F7383B9EAB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112898","Name":"Intra State Sales Return of Goods from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{08F3F188-43F5-441F-AB95-BE332651AD3D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112899","Name":"Inter State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{2167C0D3-971D-481A-86BA-F45FB92025FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112900","Name":"Intra State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{293882EE-DEB8-47A9-BAF1-9221422B247A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112901","Name":"Inter State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{77D351AF-2B06-49FB-B72A-CF9980E31A43}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112902","Name":"Export Return of Goods to SEZ Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{BCB4C9B2-E212-4971-BE8C-914BC1DAAB1B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112903","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{17ED9604-C26D-496C-B2F4-9124166CF719}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112904","Name":"Export Return of Goods to SEZ Unit Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{A8ED1A73-743C-4D08-98E3-6D85C416E951}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112905","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{06F95F30-2C34-4CD2-9084-0B9101B9455D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112906","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{A744EF89-44A8-4CE0-81F8-3D8094623CD1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112907","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{8153E2CA-FD9A-4A9F-A0E4-A657636F83DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112908","Name":"Export Return of Goods to Export Customer Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{E607F91D-D6E7-459A-801A-CBB9C7F8CE89}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112950","Name":"End - Type - Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113000","Name":"Type - Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113001","Name":"Intra-State Sales Return of Resources from Unregistered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{8F88FDD0-561E-4FEA-A663-4F4BAEC9D009}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113002","Name":"Inter State Sales Return of Resources from Unregistered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{C9854015-8E55-43F1-A5F2-747FC1CF6A0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113003","Name":"Inter State Sales Return of Resources from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{52BFB82F-A54A-4E62-9DC3-2D608D6373B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113004","Name":"Intra-State Sales Return of Resources from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{6856A59C-FE7F-4DDA-B180-391F6E0D0A5F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113005","Name":"Export Return of Resource to Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{AD7D62C2-213F-4288-9506-BE3D205DBB95}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113006","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{FD76EB64-C01A-48C0-9F8E-3EE2E17BE515}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113007","Name":"Export Return of Resources to SEZ Unit / Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{D500E259-42B6-4346-BA2F-D76ECB9AFEE1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113008","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{E62B6029-1BFA-456D-8D43-306AB7C78589}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113105","Name":"End - Type - Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113106","Name":"Type- Charge Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113107","Name":"Intra State Sales Return of Charge Item from Un-Registered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{41F1CFC3-B9F5-464D-9B6D-2C7B6C83186C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113108","Name":"Inter State Return of Charge Item from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B3036F44-2238-4DC9-B250-70AA3FEC7821}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113109","Name":"Intra State Sales Return of Charge Item from Registered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{3835C90E-1BDF-4C46-B50E-C5375ED24ED4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113110","Name":"Inter State Sales Return of Charge Item from Registered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{DBE9B77E-9171-4F5C-A7CA-9156126D34FC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113111","Name":"Export Return of Goods to Export Customer for item Type Charge Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{D8792403-FBC9-455C-8A3A-C67DAFDB6E53}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113112","Name":"Export Return of Charge-Item to SEZ Unit / Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{609F72CC-C49F-43F1-AB52-E56ED173368B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113113","Name":"Export Return of Charge-Item to SEZ Unit / Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{7F8B0021-4099-48C9-80BB-D977917CEA9E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113114","Name":"Export Return of Charge-Item to SEZ Unit / Development With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{57A0B7F8-E6C5-4CC4-89AD-11A14AF3C68B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113125","Name":"End Type- Charge Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113140","Name":"Type- Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113141","Name":"Intra State Sales Return of Fixed Asset from Unregistered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{884574EB-3354-459C-AF96-6EB624CCEFFE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113142","Name":"Intra State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{F7C5C8B6-2EB3-478E-AE6B-66BEEB6A3861}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113143","Name":"Inter State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{C915C6D6-9C5D-4C2F-BAB6-50E13850581E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113144","Name":"Inter State Sales Return of Fixed Asset from UnRegistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{7627B9EF-CB23-4EAB-88D9-3D894B6F6607}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113145","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{24F69259-FD27-49A7-B5E8-3CBF5351132F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113146","Name":"Export Return of Fixed Asset to SEZ Unit Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{200C22B1-5DC0-4A80-B377-B14F9613D061}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113147","Name":"Export Return of Fixed Asset to SEZ Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{E35E188E-728D-42BE-94F0-4B0476315B0B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113148","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo - Post GST To Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{7D7F45D3-E214-47D5-8CD5-ED31E8F4092F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113149","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{1DD8BB1A-1AA9-4B82-9F6A-80F26AA8675D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113150","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{C6AFDFC6-874B-4B14-BCC9-8FC5B4992157}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113151","Name":"Export Return of Goods to Export Customer for item Type FA Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{AA85EF19-5F94-438E-ADC4-A9ACF0DCB0C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113160","Name":"End Type-Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113161","Name":"Begin No. Not Blank","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field6=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113162","Name":"Export Return of Services to Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{BB48AD27-2942-4C4A-B19C-4A7E76E181DA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113163","Name":"Export to SEZ/ SEZ Development /Deemed Export With Payment of Duty through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{D22C3484-E0DE-473F-9D62-2BB1DD4B10B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113164","Name":"Export to SEZ/ SEZ Development /Deemed Export Without Payment of Duty through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{2FF34432-5A9D-4C71-AF8B-6DDDC92F0A85}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113165","Name":"Export Return to Deemed Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{C502F69B-F76D-4D72-B7FC-A272A252590B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113166","Name":"Export Return to Deemed Export Customer Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{7BE46E73-EF21-4766-B4F2-34558460A2C9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113167","Name":"Deemed Export With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{2F7B1F64-56F5-48C9-A6B2-A5F7F2BF8A2F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113168","Name":"Intra-State Sales Return to Deemed Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{5FB236FB-7619-48A1-92D0-BD12F5C8A5C0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113169","Name":"Intra-State Sales Return to Deemed Export Customer Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{A030C0C9-951C-4818-8A68-C6D5917C31BF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113170","Name":"Intra-State Sales Return to Deemed Export Customer With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{0BD7BB2E-38E6-4254-82CB-713F429D787C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113180","Name":"End No. Not Blank","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113205","Name":"End - Not Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113305","Name":"Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113306","Name":"Intra state Sales Return of Exempted Resources from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{99E193A6-6A7C-4035-BCC1-F2BC49DC4F86}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113307","Name":"Inter State Sales Return of Exempted from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{A485DD0E-AB08-49E5-9C7C-1FCA3398AE3F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113308","Name":"Inter State Sales Return of Exempted Resources from Unregistered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{A49C7425-A602-4445-873D-BCA89D3C2330}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113309","Name":"Export to SEZ/ SEZ Development /Deemed Export With Payment of Duty through Sales Return Order/ Credit Memo - Exempted","NodeType":"Use Case","TableID":37,"CaseID":"{D187D562-E011-4879-839D-A3CB824D11EC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113310","Name":"Intra state Sales Return of Exempted Item from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{1A135F44-7A65-49A6-A08A-C87D453E5837}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113350","Name":"Intra state Sales Return of Exempted Resources from Unregistered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{C2730DF7-9769-4732-819E-C39124E5E3F8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113351","Name":"End -Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113380","Name":"Begin Type Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113381","Name":"Intra state Sales Return of Exempted Goods from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{DA8B91D0-1B63-44EE-BA57-0A40B1403080}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113382","Name":"Inter State Sales Return of Exempted Goods from Exempted Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{246B0F60-6CA4-42A1-ACDD-30C38C89D2C4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113400","Name":"Begin Type Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113401","Name":"Begin Type G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113402","Name":"Intra state Sales Return of Exempted Services from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{D2A96240-2F58-406C-8774-03CD60C28E5D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113403","Name":"Inter State Sales Return of Exempted Services from Exempted Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{E9E7486C-DBFB-432C-886F-017AD828CE5E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113420","Name":"End Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113421","Name":"Begin Type - Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113422","Name":"Intra state Sales Return of Resource from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{10E9D621-B3A8-49E2-BAA1-EB7D535C0712}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113430","Name":"End Type - Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113431","Name":"Begin Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113432","Name":"Inter State Exempted Sales Return of Fixed Assets from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{2D2466D5-E651-49FE-A00C-9DE16690874C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113433","Name":"Intra state Sales Return of Exempted Fixed Asset from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{1C2FBFBD-A18B-4A5D-819E-043993E5510C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113440","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113441","Name":"Begin Type - Charge Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113442","Name":"Inter State Sales Return of Exempted Charge Item from Exempted Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{0410BC8A-0231-4947-8ED6-982A68846120}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113443","Name":"Intra state Sales Return of Exempted Charge Item from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{3277542B-B49C-4CCD-B661-F72C71CED698}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113445","Name":"End Type - Charge Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113449","Name":"Begin FOC","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18157=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113450","Name":"Begin Type Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113451","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113452","Name":"Intra State Sales Return of Goods from Registered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{14FC3D2C-3DAF-4C04-AA69-6AE47D0D7552}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113453","Name":"Inter State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{A4A8C87F-D458-4DD2-B8E9-8393220FDD2D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113459","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113460","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113461","Name":"Intra State Sales Return of Goods from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{10CA76A8-8DE4-419A-8220-3DD88D8F8747}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113462","Name":"Inter State Sales Return of Goods from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{92CD1D91-1D76-46D8-B2E1-C62C54E62191}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113469","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113470","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113471","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{31F4991C-5E91-4AF3-B911-39F985BF48C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113472","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{C3755AFF-81D3-4B1A-85B2-B2C8A60F9EAA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113479","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113480","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113481","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo -Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{8E881E89-87C1-4745-9529-B82A784E83BE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113482","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{270F6442-0097-437D-9F91-5C15BD9EAB4D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113489","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113490","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113491","Name":"Intra-State Sales Return to Deemed Export Customer for Goods With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{913AAE94-3AEF-4F6D-80DB-F30FF5E5C067}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113492","Name":"Deemed Export for Goods With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{14586EFF-720D-4670-B023-EA4FBFF96B99}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113493","Name":"Intra-State Sales Return to Deemed Export Customer for Goods With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{9654C77E-D850-4AA2-9A47-FB003B1574B2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113494","Name":"Export Return to Deemed Export Customer With Payment of Duty for Goods through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{88F1A4B3-DCAC-499A-BD7A-A5EBA3EF3CB4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113499","Name":"EndGST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113500","Name":"End Type Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113501","Name":"Begin Type- G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113502","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113503","Name":"Intra State Sales Return of Services from Registered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{59157E34-743F-4293-A662-1A9C3D916178}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113504","Name":"Inter State Sales Return of Services from Registered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{D9AA8D5E-8135-47AA-A722-6356873CF5EF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113507","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113508","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113509","Name":"Intra State Sales Return of Services from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{B8757B78-D36C-4AB7-B532-353006120046}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113510","Name":"Inter State Sales Return of Services from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{EFB5634E-C341-4922-9BC9-1CE76AD61D79}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113512","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113513","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113514","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo - POst GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{3397DBB8-098B-4A52-9BFA-E24A12B5F9E7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113515","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{0E655E71-19D9-4A10-8A28-FE4AFBA2A7C7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113517","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113518","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113519","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{DBA2CAA4-8EE2-4DD0-B413-383101DB034E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113520","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{ABF997C4-D467-4F97-94CD-10AFE3A66B3A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113523","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113524","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113525","Name":"Intra-State Sales Return to Deemed Export Customer for Services With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{6CC7879A-5AF1-4FD6-8713-7ECF54ABC412}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113526","Name":"Deemed Export for Services With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{861E4175-2832-49D7-8AF3-96E6C19F8E68}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113527","Name":"Intra-State Sales Return to Deemed Export Customer for Services With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{6924DAF8-60F6-4C42-9266-200033C6D3F4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113528","Name":"Export Return to Deemed Export Customer With Payment of Duty for Service through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{1F11A81C-0551-4B07-AA30-23DA57E0FE16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113535","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113536","Name":"End Type- G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113537","Name":"Begin Type- Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113538","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113539","Name":"Intra-State Sales Return of Resources from Registered Customer through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{D6D5AACF-3FC9-4E46-AC66-66CB29D5293E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113540","Name":"Inter State Sales Return of Resources from Registered Customer through Sales Return Order/ Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{A0D756A0-DC72-49F9-A1F9-B926242C6AD2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113543","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113544","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113545","Name":"Intra-State Sales Return of Resources from Unregistered Customer through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{5131A9E4-A281-496F-9AF2-E60DC7D88A50}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113546","Name":"Inter State Sales Return of Resources from Unregistered Customer through Sales Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{40C0504C-93D7-4EC1-A4B8-7FE82C224BE4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113549","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113550","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113551","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{1F48109A-8444-4862-B9DA-190182B3FBAC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113552","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{F4C6236C-3805-4826-88FD-EAC2659389B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113557","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113558","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113559","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{6C740BB7-2090-4E02-8611-2FD65CC51465}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113564","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113565","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113566","Name":"Intra-State Sales Return to Deemed Export Customer for Resource With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{858CA47F-FA82-4485-91A5-12B2EBF36D6F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113567","Name":"Deemed Export for Resource With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{220890E5-A6C0-4719-83C5-E2247EF9BEC3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113568","Name":"Intra-State Sales Return to Deemed Export Customer for Resource With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{11D160CF-FD98-4C47-928B-9F4125F584A9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113569","Name":"Export Return to Deemed Export Customer With Payment of Duty for Resource through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{EBFDB89B-5F22-4386-87CA-72157CBF122D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113574","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113575","Name":"End Type- Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113576","Name":"Begin Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113577","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113578","Name":"Intra State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{291465B9-0C22-48B5-9EEA-4006CC372B1A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113579","Name":"Inter State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{BFB628D6-4413-4628-B619-013EF3255CE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113583","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113584","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113585","Name":"Intra State Sales Return of Fixed Asset from Unregistered Customer through Sales Return Order/ Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{7AFF7259-D09B-4C62-8575-34BEDEE4A72C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113586","Name":"Inter State Sales Return of Fixed Asset from UnRegistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{3EAEA83A-B986-4C1E-9231-EDEAC919DE2F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113590","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113591","Name":"Begin GST Customer Type SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113592","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{0DD3F665-8D52-487D-A200-9BD69DB0A4A2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113593","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{10BBEEB9-E622-4899-B4E0-C000CA753E54}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113597","Name":"End GST Customer Type SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113598","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113599","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo - Post GST To Customer For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{3AD6DDBC-A132-4ABA-B216-73133B85604A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113600","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{902158A0-97D5-4075-943E-3B30B800FB78}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113608","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113609","Name":"Begin GST Customer Type - Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113610","Name":"Intra-State Sales Return to Deemed Export Customer for Fixed Asset With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{5629EBAA-46B2-4DD7-9511-1D6E697A6B0A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113611","Name":"Deemed Export for Fixed Asset With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{4BFA98D3-CEF3-4573-B464-9E897EB9D4AE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113612","Name":"Intra-State Sales Return to Deemed Export Customer for Fixed Asset With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{B3793372-9AD2-4F36-BA5C-3AF13BE44F2D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113613","Name":"Export Return to Deemed Export Customer With Payment of Duty for Fixed Asset through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{321E0F7B-A15D-4CE6-9C11-BF3FD3DEE918}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113620","Name":"End GST Customer Type - Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113630","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113635","Name":"End FOC","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113639","Name":"End- Sales Return Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114640","Name":"End Sales","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114645","Name":"Purchase","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field7=1(<>''),Field18080=1(<>''),Field18096=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114650","Name":"Purchase Document","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2|4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114660","Name":"GST Reverse Charge -No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18085=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114670","Name":"Exempted","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114672","Name":"Intra State Purchase of Service from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{536EFB4F-1EBC-4731-861E-433F3BA23A4A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114673","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{93FE03BD-63C7-44B5-B40D-5974C8300527}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114800","Name":"End Exempted","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114850","Name":"Exempted No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114851","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{01C97F7D-4263-4387-84E1-610D2EA4A762}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114853","Name":"Intra State Purchase of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Quote/Order/Invoice.","NodeType":"Use Case","TableID":39,"CaseID":"{78A245B3-3BAB-4347-B09A-FDE73A600BB2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114854","Name":"Inter State Purchase of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Quote/Order/Invoice.","NodeType":"Use Case","TableID":39,"CaseID":"{94FF400C-34A8-4760-A4E5-C4B367739FA3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114855","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{93FE03BD-63C7-44B5-B40D-5974C8300527}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114856","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{51395C06-549D-40B5-98C5-A7F6B73AF427}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114857","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{131AC7D7-6079-4C25-A3A6-CEAC66A6203D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114858","Name":"Intra State Purchase of G/L Account from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{D7A29410-A685-41B6-A8F9-268D65F062B6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114859","Name":"Inter State Purchase of G/L Account from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{4DC1D2DC-A8F8-4443-A563-348B8E8961C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114860","Name":"Inter-State Purchase of Charge Item from Sez Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{85DAE7D1-95AC-4FD1-B1E0-5FFD980481BF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114861","Name":"Inter State Purchase of Charge Item from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{0E1A782B-CF1F-4CF0-8797-A1310519B1DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114862","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{3E14881B-DB97-473E-9A0B-C8A0A2D604C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115000","Name":"End Exempted No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115100","Name":"End GST Reverse Charge -No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115150","Name":"GST Reverse Charge","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18085=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115151","Name":"Exempted No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115152","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice Type-Debit Note","NodeType":"Use Case","TableID":39,"CaseID":"{2AB850AD-528A-498A-9E23-65E396AC61A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115153","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice Type-Debit Note","NodeType":"Use Case","TableID":39,"CaseID":"{B064E1CD-DB51-456E-AE19-7F2AC8C9DC11}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115154","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{89071509-BF13-4ED5-A45D-8D938DFEF265}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115200","Name":"End Exempted No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115201","Name":"Exempted Yes","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115202","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice for Exempted Goods","NodeType":"Use Case","TableID":39,"CaseID":"{700CF31E-E4A1-4183-AEF6-7C572C34C8AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115203","Name":"Inter State Purchase of Exempted Goods for Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{DF5E22A4-BD3C-4C80-B6D3-9F667C8037DD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115205","Name":"End Exempted Yes","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115250","Name":"GST Credit-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115300","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115301","Name":"Import of Services from Foreign Vendor where Input Tax Credit is Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{118F40D5-2D0E-45D6-B458-52D6BF00A035}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115302","Name":"Import of Services from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{8D8A9485-D248-4B9B-AB8C-EEDB746B190C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115350","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115351","Name":"Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115352","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{20913086-F0CD-4AC8-AF0A-755723E44946}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115353","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{71EC1D59-01EC-4486-8CB4-0957D4ADF38B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115354","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice - For GST Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{D279BE29-1CB8-4F96-BA2C-0348368D0879}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115400","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115401","Name":"Begin Type Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115402","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FB4C68ED-BD93-4229-B1BB-91163250C066}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115403","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote With Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{9154D0D0-5D85-40BE-889D-764E65F8691C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115404","Name":"Import of Service from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice for Charge (Item)","NodeType":"Use Case","TableID":39,"CaseID":"{B8A8C947-5BA0-45B4-B8A4-33088F25782F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115415","Name":"End Type Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115450","Name":"End GST Credit-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115451","Name":"GST Credit-Non Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115452","Name":"Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115453","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Not Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{AE939960-28B0-426C-B5D7-D8535B9AE3C9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115454","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Not Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{27255CC6-70FC-4D33-91F1-5B83F03CE33E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115500","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115501","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115502","Name":"Import of Services from Foreign Vendor where Input Tax Credit is not available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{9167AE32-6B66-48FB-AF03-35D261A7C5BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115503","Name":"Import of Services without Input Tax Credit available from Foreign Vendor.","NodeType":"Use Case","TableID":39,"CaseID":"{F1AFD035-5F0A-4DD2-B15E-E0EEF0BA43D7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115506","Name":"Import of Services from Foreign Vendor where Input Tax Credit is not available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{387B69F6-70EC-4BCC-A4C0-AA1CFAB0D356}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115507","Name":"Inter-State Purchase of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{62A4192A-86D8-4431-A641-78EF2F348546}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115550","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115551","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115552","Name":"Intra-State Purchase of Resource from Registered Vendor where Input Tax Credit Not Available - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{A0CED092-3AAD-4121-A5A2-F4DEAC316621}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115553","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{FED218A8-8C3F-43D9-BBD5-E8BCBB30D8BD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115554","Name":"Inter-State Purchase of Resource from UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{C340D02B-697D-414F-9082-E4CC9B4B2A3B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115555","Name":"Intra-State Purchase of Resource from Unregistered Vendor where Input Tax Credit Not Available - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{0EE4D825-CC7B-458D-9165-D32635F56F41}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115556","Name":"Intra-State Purchase of Resource From UnRegistered Vendor where Input Tax Credit Not Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{38BC1AAB-3066-483F-811E-E147662D48C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115580","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115581","Name":"Begin Type-Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115582","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{1C3087C6-66E1-4D66-8133-DF7F13FDB0D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115583","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C7BA99E0-7A62-41C9-93C4-36BDAD52C328}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115584","Name":"Import of Charge from Foreign Vendor where Input Tax Credit is Not Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{BFCC5C7F-F391-44D5-84F1-1D72DC7A9DEC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115595","Name":"End Type-Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115649","Name":"End GST Credit-Non Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115650","Name":"End GST Reverse Charge","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115651","Name":"Extempted -No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115652","Name":"GST Credit-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115653","Name":"Type-Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115654","Name":"Import of goods with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{4D6EF305-AE45-4735-9E9A-C9428D139D38}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115655","Name":"Import of goods with Input Tax Credit available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{24E498DD-9DFB-4097-9F32-C8EBD49B8D22}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115659","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{2C80FA78-CBBE-45E7-8C62-5010B692AC9C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115660","Name":"Inter-State Purchase of Goods from UnRegistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{FF5D43D6-C93E-42D5-9CD3-E3FCA99E77DD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115661","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{94D31994-F430-4825-A72E-D41F51F63952}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115662","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{53AA1183-8DEC-4542-A708-317C5CD7BDA9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115663","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available with Bill to Location(POS) through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{E75A7A67-D332-41BE-B7EA-61C8BF69E9F7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115664","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Bill to Location(POS) Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{1440B152-A710-4982-86C0-5C27FEF4A7D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115665","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{A8B3F6FB-A42D-4767-BD3D-D4C9BB11AEAA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115666","Name":"Inter-State Purchase of Goods from UnRegistered Vendor where Input Tax Credit is available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{B86AA24C-78CF-4F29-BD88-E17580D6992B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115667","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{7BDD3EE0-29AE-4C15-A879-1DBF13ADA019}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115668","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{9FE211A9-770A-4396-BE84-B9625D975180}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115669","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{B7A4D05E-75C4-47F5-B502-9510B13E2DEA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115700","Name":"End Type-Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115701","Name":"Type-GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115702","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is Available.","NodeType":"Use Case","TableID":39,"CaseID":"{BACBB54A-0D30-4206-AA6A-5CF48A744D5E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115703","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{9568C93C-FC46-477D-B554-A8EACAEAF21A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115704","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{F85B9211-93F9-4443-9784-BE52C220CE24}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115705","Name":"ISD - Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote ","NodeType":"Use Case","TableID":39,"CaseID":"{EF5146EB-771F-4DCE-80E7-ACC0B606829F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115706","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{0027CF9D-DA15-43A2-83D4-5CD214E0278B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115707","Name":"ISD-Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{700AF8A2-1315-41BC-9FE9-E00FB826DC80}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115708","Name":"Inter-State Purchase of Services from Unregistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{8A057230-A2A9-4E59-8101-9A947A8D8B91}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115709","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FC1AEFDA-0537-4D94-A576-F542B6710B71}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115710","Name":"Inter-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{5F9FDC49-A99D-4F72-AA5F-4E0BF5B3AC34}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115711","Name":"Intra-State Purchase of Services from Unregistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{31C539BE-990C-4E00-AF1A-6BFA1333ED7E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115712","Name":"Import of Services with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{B03B25F1-806F-4CE3-86A2-A65BBE1F8360}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115713","Name":"Import of Services with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry and GST Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C2D132AB-4A23-47FC-9A25-EEB973689456}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115714","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{04BA2F8D-9562-4551-8A98-C61CE5509B47}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115715","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{19625BAB-02B9-42E1-80EF-FED88D13FF40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115750","Name":"End Type-GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115751","Name":"Type-Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115752","Name":"Import of Fixed Asset with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{E076372D-BFB5-4911-B6EE-85F1F71B1569}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115753","Name":"Import of Fixed Asset with Input Tax Credit available from Import Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{7E44665E-5E48-4F98-8E9A-135669D3E75B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115754","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{C02EF3F0-A659-4762-854B-830A8D59B371}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115755","Name":"Intra State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted (Availment) goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{4753502A-0359-4A8C-A37C-4DB4B6FCD790}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115756","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{4852FE50-F64A-454F-B43F-D46FE4BABECB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115757","Name":"Inter State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted goods(Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{7C939AC1-1919-4919-A0D0-B62E3C72B382}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115758","Name":"Intra State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted (Availment) goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{975372FC-F93D-4E8B-81EA-57B6751B9F94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115759","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted goods(Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{B69B4BDA-5CAC-4C9C-B4DB-211912D30EF2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115760","Name":"Inter-State Purchase of Fixed Asset from UnRegistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{F3E7CEF3-5437-42EC-9DED-FE81F994FFCB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115761","Name":"Intra-State Purchase of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{B83A838B-C0A8-4E69-B735-86D011229B1C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115762","Name":"Import of Fixed Asset with Input Tax Credit available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A7ED2E31-2CA7-4D60-A415-31A78736388D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115763","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available Bill to Location(POS) Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{8B96F1E1-FC2C-48FD-AD1E-62986961AC0D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115764","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available with Bill to Location(POS) through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{FCC8AA84-E16B-4D3F-A139-946089738FB0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115765","Name":"Inter-State Purchase of Fixed Asset from UnRegistered Vendor where Input Tax Credit is available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{E246F7FE-DE34-4E3C-BD3B-D8943D9B966C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115766","Name":"Intra-State Purchase of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{E365B9AF-953A-462B-A562-9B494D0B84B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115767","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted fixed asset with no GST Impact through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{DA3FC765-67AA-4232-8C30-6CE3E6E6DFDC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115768","Name":"Import of Goods with Fixed Asset from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{D9172942-78EB-4305-950C-C9DEC70F16E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115769","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{F7997B96-631E-456D-9FA2-028ADEC745C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115770","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{5E2D969D-2A4B-4288-900B-7D1527F80A8E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115800","Name":"End Type-Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115801","Name":"Type-Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115802","Name":"Inter-State Purchase of Charge Item from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{21957E13-9751-40A2-B591-67ADE93573E7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115803","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{4F234B8B-1B95-4938-B3DF-3D96784EAC77}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115804","Name":"Inter-State Purchase of Charge Item from UnRegistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{AB0E6CA2-960E-4D6F-A7C6-D461F268627F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115805","Name":"Intra-State Purchase of Charge Item from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{72511E89-CA1E-4749-8648-F1EFD6F61D44}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115806","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Bill to Location(POS) Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{0ABF122D-4ED5-4820-8411-7C39147B2819}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115807","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available with Bill to Location(POS) through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{CD837506-8D55-4E71-8576-FA6B9934A6BB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115808","Name":"Inter-State Purchase of Charge Item from UnRegistered Vendor where Input Tax Credit is available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{1DD024D8-C5D0-44DC-BD2E-3B4A395F33FE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115809","Name":"Intra-State Purchase of Charge Item from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8EE30985-1662-4A16-B9B1-2C36589F4F94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115810","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted (Availment) goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{2A0E0C4E-331F-42B3-96D2-F9CFF01E6FC1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115811","Name":"Inter State Purchase of Charge Item from Composite Vendor/Supplier of exempted charge item with no GST Impact through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{714E77D3-C569-418A-A932-DBFF272D3B92}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115812","Name":"Import of Charge Item with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{B95176D6-58FF-487C-A25B-26E433D85356}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115813","Name":"Import with Input Tax Credit for Charge Item available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{13E5D66F-422B-4830-992B-39C740D6D560}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115814","Name":"Import of Charge with Input Tax Credit available from SEZ Vendor with Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8E537871-C8F7-4E07-8B32-84411C668443}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115815","Name":"Inter-State Purchase of Charge Item from Sez Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{05312E80-BE4E-4EB1-9A1E-AF55EA4D8E3D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115850","Name":"End Type-Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115851","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115852","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{EC4815D3-A78F-4C4F-8C64-8FE9AF09050C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115853","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{4AC1A712-CC9B-4CB7-91EA-05245C1D7211}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115854","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{F5EA246D-523F-4FFA-B316-967933F01C16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115855","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{7342ECF9-7916-4923-AC4C-71E973942346}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115856","Name":"Intra-State Purchase of Resource from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{0FD2A76A-DECB-4FAC-8008-10D6762CDAFE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115857","Name":"Inter-State Purchase of Resource from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{20C477FD-F60A-4D5C-B919-BF3082993511}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115858","Name":"Import of Resource with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A106F715-2EC1-43B7-B0AE-33F6AEEF3B2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115859","Name":"Import of Resource from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{45189151-3ACF-421C-8984-C932DC8A3A2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115860","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{FEC46768-8566-4C39-AE1D-62B0FD83D5D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115861","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{56966B10-DE93-4980-A9FE-1CBB5DE6359B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115870","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115900","Name":"End GST Credit-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115901","Name":"GST Credit-Non Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115902","Name":"Type-Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115903","Name":"Import of goods without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A7619228-F860-4E03-B21E-E0F01EFF6C52}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115904","Name":"Import of goods without Input Tax Credit Not available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{ABA6F00E-B423-49DF-8DF5-F74950011703}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115905","Name":"Import of goods without Input Tax Credit available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{C57B60DB-22D0-43D5-8460-B47D9F11AFC2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115906","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{E277B92E-D047-425F-B44D-E8EA58FAEE5C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115908","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{09CD7163-15FB-4340-82BF-57373BE3E206}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115909","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{F4B17FC7-3605-47DD-804E-4573BCB3FAC7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115910","Name":"Inter-State Purchase of Goods from Unregistered Vendor where Input Tax Credit is Not-Available","NodeType":"Use Case","TableID":39,"CaseID":"{9E59D4DD-C975-4F42-B5A2-AA98AC93FB7F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115911","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available With Bill to-Location purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{5577B8ED-6471-4480-AD5A-63BA31696AB7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115912","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available with Bill to-Location","NodeType":"Use Case","TableID":39,"CaseID":"{A274F11C-332F-4EE3-AC91-2E2D95E9E2B6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115913","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{679E7F9F-9AAC-4CC5-A263-904ECC708057}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115914","Name":"Inter-State Purchase of Goods from Unregistered Vendor where Input Tax Credit is Not-Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{1B2046C2-4264-4272-A998-085B20832B87}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115915","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit isNon-Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{F4F11B85-700B-4880-9A73-740FF36C4160}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115916","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{CE65AEFF-0248-437E-B8A6-87C60E49EFD4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115917","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{55BEA8B4-15ED-47B2-AD24-157BA39467EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115918","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{CCD1BD07-0A33-4DAB-9A3E-E66956E0F98B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115950","Name":"End Type-Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115951","Name":"Type-GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115952","Name":"Intra-State Purchase of Services From Registered Vendor where Input Tax Credit Not Available through Purchase Quote- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{EB169AE5-8DE0-4490-8DFD-46CEE05AA5C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115953","Name":"Inter-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{67527223-25F5-48B0-A0C2-F0064BD92F18}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115954","Name":"Intra-State Purchase of Services from Registered Vendor where Input Tax Credit Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{46AD3622-5D72-4048-9FAC-3C31077C2DF0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115955","Name":"Intra-State Purchase of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FEE41ACD-C7C4-4653-9A34-15F7F0B70663}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115956","Name":"ISD-Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{EC905260-0D39-42CD-ADAE-27F4E74CE267}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115957","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is Not available","NodeType":"Use Case","TableID":39,"CaseID":"{6A72F56C-CA49-4D53-939A-4FABC050BFB3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115958","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{0C3618F6-08BD-417F-8744-94A415595940}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115959","Name":"ISD - Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{61FB3B94-A2C7-4F3F-B4A8-801D842328E1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115960","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{BE0C902C-E9FC-4548-B8C7-AB70E21388BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115961","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{36A5E0EC-E197-4102-8FF0-F6DC9B4A47C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115962","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is not available.","NodeType":"Use Case","TableID":39,"CaseID":"{62216594-6660-492B-ACA0-F8BD3893DE49}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115963","Name":"Intra-State Purchase of Services from POS as vendor state Registered Vendor where Input Tax Credit is Not available","NodeType":"Use Case","TableID":39,"CaseID":"{A52E9652-EFC8-4950-B8C1-A41D887AF962}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115964","Name":"Import of Services without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{C07C2110-2740-4FAD-975B-293FAAD86247}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115965","Name":"Intra-State Purchase of Services from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{D2457D2F-2B0E-4F56-BF93-007E245C4FF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115966","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{0C6EE2B8-335F-4420-9B76-AEBF773BB40C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115967","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{7642FECB-8BEE-4127-9523-47ECB7D29DC4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116000","Name":"End Type-GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116001","Name":"Type-Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116002","Name":"Import of Fixed Asset from Foreign Vendor where Input Tax Credit is Not Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{7307BDA2-283F-4094-82E0-41EC241CE177}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116003","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{47F223C1-06BE-4BD6-A98A-E001F8CE436E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116004","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is not available through Purchase Order/ Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{1A8DCBD9-6A50-4C2F-9364-9DB967B50A24}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116005","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted goods(Non-Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{2E369D91-2885-47EB-886E-7AD35816B42E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116006","Name":"Intra State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted (Non Availment)goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{5DC7836A-BA61-4738-8506-BA91EC982903}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116007","Name":"Inter State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted goods(Non-Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{62AD7817-C30F-4EC6-B68C-AC4828B07DF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116008","Name":"Intra State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted (Non Availment)goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{64233AA2-2DB0-4AC9-8078-0755AB5DA89D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116009","Name":"Intra-State Purchase of Fixed Asset from UnRegistered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{DB7C51C1-1F9F-40F2-82C2-82D59793413C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116010","Name":"Inter-State Purchase of Fixed Asset from Unregistered Vendor where Input Tax Credit is not available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{F8D35423-18AA-4916-A10C-3DC5A6F80CB0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116011","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available With Bill to-Location purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{4FA8A9F3-D8C5-4B20-ACB0-F52BFE013A01}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116012","Name":"Inter-State Purchase of Fixed Asset from Unregistered Vendor where Input Tax Credit is Not-Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{718C2339-648B-4FC6-A496-737B12176D01}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116013","Name":"Intra-State Purchase of Fixed Asset from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{679F358F-4DB0-4587-9F0C-CE643B16A152}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116014","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is not available with Bill to-Location","NodeType":"Use Case","TableID":39,"CaseID":"{AFCCC11E-97B1-4627-8DFD-4184537E2509}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116015","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted fixed asset for Non-Availment through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{D50E350F-963C-4C3C-9E78-08F12AB7D8F0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116016","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice For FOC","NodeType":"Use Case","TableID":39,"CaseID":"{7E48E18F-D907-423A-BC62-256D7CFAA089}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116017","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is not available through Purchase Order/ Invoice for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{65746F4E-A835-4278-98CA-B6AB0D0CBF6B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116050","Name":"End Type-Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116051","Name":"Type-Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116052","Name":"Intra-State Purchase of Charge Item from UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{97664A61-096E-43D9-BF55-2D5672F02F7F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116053","Name":"Inter-State Purchase of Charge Item from UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{F4A8CF06-D6CE-4263-ACF3-F1FBB744FBFB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116054","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{101CAF41-34AB-4EA1-9277-166954A7FF94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116055","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{64F0C586-3993-4F05-A127-332E7E46802D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116056","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available With Bill to-Location purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{666A5198-99BA-4EC0-A89A-C991109BBC0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116057","Name":"Inter-State Purchase of Charge Item from Unregistered Vendor where Input Tax Credit is Not-Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{66A099C8-9660-498E-9BEB-61296A76CFAF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116058","Name":"Intra-State Purchase of Charge Item from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8A58255B-97C9-4691-9DBF-1C041D4433DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116059","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted (Non Availment)goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{C4DD33B4-D4DB-4F30-8C86-E2045B473C57}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116060","Name":"Inter-State Purchase of Charge Item from Registered Vendor where Input Tax Credit is not available with Bill to-Location","NodeType":"Use Case","TableID":39,"CaseID":"{CCE6E98E-5330-48BA-B42E-70E2BDE3E45B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116061","Name":"Inter State Purchase of Charge Item from Composite Vendor/Supplier of exempted charge item for Non-Availment through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{FFCC9396-D3C4-4A81-BDE8-23070BF8976F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116100","Name":"End Type-Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116101","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116102","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order.","NodeType":"Use Case","TableID":39,"CaseID":"{DBD883FC-4DD3-4C9C-B9AC-AAAF07FF4F3E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116103","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice.","NodeType":"Use Case","TableID":39,"CaseID":"{073D94DC-E7F0-4535-B269-7C36C626FD96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116104","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{B33DCDC5-21C3-4019-96E3-EF513EAED95E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116105","Name":"Import of Resource without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{B12DD0D6-A87C-4A8C-AE71-746B26156893}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116106","Name":"Import of Resource from Foreign Vendor where Input Tax Credit is not available through Purchase Order/Invoice/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{5D419270-CBAE-42FB-A135-DC1693C77985}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116107","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{10D6A0FE-F802-4235-B438-3A29B7C853ED}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116108","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{F1A5130E-021A-40F9-8282-82CBFEE3FF07}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116130","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116150","Name":"End GST Credit-Non Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116200","Name":"End Exempted -No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116201","Name":"Exempted","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116202","Name":"Inter-State Purchase of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{1FFB6082-63D3-4AF8-A83B-9AE92D2010E2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116203","Name":"Intra State Purchase of Exempted Fixed Asset from Registered Vendor (Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{C7563021-CD85-4519-ADFB-BA848CA3022F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116204","Name":"Inter State Purchase of Exempted Goods-SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{97856AB0-DAB0-4CF3-B1B1-3A6EB1524E0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116205","Name":"Intra State Purchase of Exempted Goods and Services.","NodeType":"Use Case","TableID":39,"CaseID":"{2ED393A6-3B1D-49AC-9DBB-D5836930F61C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116206","Name":"Inter-State Purchase of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{AB2BDB68-471C-4EC0-B43A-92920239FBF9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116207","Name":"Intra State Purchase of Exempted Fixed Asset from Registered Vendor (Non-Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{F67095C1-F610-4B59-A1E5-7B58D83A6CF5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116208","Name":"Inter State Purchase of Exempted Goods for Registered/Exempted/Composite Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{07AC553C-0E84-41E3-B04A-19B63C3BCF75}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116250","Name":"End Exempted","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116251","Name":"Begin Type Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116252","Name":"Import of Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, without cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{A43577AE-11F7-4DF9-9EEF-F317ED83ADD4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116253","Name":"Import of Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{B45F2436-2E00-4A49-9A8E-7B9202FE0F0A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116260","Name":"End Type Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116300","Name":"End Purchase Document","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116301","Name":"Purchase Return Document","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(5|3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116302","Name":"Exempted No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116303","Name":"GST Credit Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116304","Name":"Type-Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116305","Name":"Return of Import of goods with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{15A78CF5-A4CC-4804-95DA-6FB3DCBF2DBF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116306","Name":"Intra-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{BB9814B7-D039-49BC-BF5D-F80127620CAE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116307","Name":"Purchase Credit Memo/Return Order for Imported Goods where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{48C973FB-77C2-476C-AB39-0E61F0F76F0D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116308","Name":"Intra-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{D0059E3B-4B5F-44E3-B2AD-B3DB74C1CEC4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116309","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{BC7B8A8E-B343-439B-B240-B5D7D0253CC7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116310","Name":"Inter-State Purchase Return of Goods from UnRegistered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{CFC3D6F5-144A-4731-8658-BA626457624A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116311","Name":"Intra-State Purchase Return of Goods from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{2E358EDE-097D-4846-A45B-BC2C1AE07FE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116312","Name":"Intra-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available with Bill To-Loc Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{F6EB6D82-74A5-413E-BE36-9308F41811A3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116313","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available with Bill to-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{7759D07C-F691-4738-8FB8-F682B03DA922}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116314","Name":"Intra-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{998A15E8-B4E6-460E-A89C-239F276E9B3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116315","Name":"Inter-State Purchase Return of Goods from UnRegistered Vendor when Input Tax Credit is Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{FFBADC05-CF47-4787-B31A-EB85F88CACE8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116316","Name":"Intra-State Purchase Return of Goods from Registered Vendor where Input Tax Credit is available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FBEDC063-63EA-4FED-A3DD-8B5E175031CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116317","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{055AEE33-1301-4B59-BA0D-E76D2D542B34}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116318","Name":"Intra-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{C9F94259-EA6B-481B-AAF1-8D8F9F025902}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116319","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{90643BB8-1BEB-40C8-81B3-E6A3C5075C45}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116350","Name":"End Type-Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116351","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116352","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is available through Return Order.","NodeType":"Use Case","TableID":39,"CaseID":"{AF13E308-74EA-4A38-86B9-B0EA0DCE1972}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116353","Name":"Inter-State Purchase Return of Service from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{0CCFD5FB-95C8-4189-ACFF-E7D9AE1DB368}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116354","Name":"ISD - Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{137A0843-A280-441F-8D87-5639EDB2B01E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116355","Name":"ISD-Inter-State Purchase Return of Service from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{2A733D02-2125-4EA9-97E3-2068E5708A94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116356","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{710042C6-833D-4CF4-B943-47CF6691F7DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116357","Name":"Intra-State Purchase Return of Services from Registered Vendor where Input Tax Credit is available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{D2E1CF7B-EA38-4EB3-82C3-E2E6949625D3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116358","Name":"Intra-State Purchase Return of Services from Unregistered Vendor when Input Tax Credit is Available (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{AEDED96A-9927-4DF4-B89B-22FA7C77C19F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116360","Name":"Inter-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{64A2BCC0-3E88-4613-B91D-540FF4977F86}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116361","Name":"Inter-State Purchase of Return of Services from Unregistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{6510FF1C-A0A5-4C52-8DE5-836BE2536650}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116362","Name":"Return of Import of Services with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{36710BC3-FED5-4726-8AB5-1DC108CF23AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116363","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{47AA3C60-6575-4F87-8022-29790BB97A11}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116400","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116401","Name":"Type Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116402","Name":"Return of Import Fixed Asset with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{1201ECAE-F4F2-43D7-938E-15F5361C2062}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116403","Name":"Return of Import of Fixed Asset with Input Tax Credit available from Import Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8EECE1FD-4BDB-4A37-92ED-00380C170CFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116404","Name":"Inter State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted goods(Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{A8A42D6F-2A47-4175-8ED8-F482D64554C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116405","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{CCF91681-45AA-45DC-94A6-52DBBF199CF5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116406","Name":"Intra State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted (Availment) goods with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{4E53918C-16B7-4834-86DE-E7422FC21E83}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116407","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{57322220-978A-459E-8EC5-05AB66E6B362}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116408","Name":"Intra-State Purchase Return of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{F37442C1-AB50-445F-A7C3-8DCA84931B69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116409","Name":"Inter-State Purchase Return of Fixed Asset from Unregistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{B5669E1C-A496-431B-A29F-69E527E37AA0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116410","Name":"Inter-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Available with Bill to-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{E6B10245-E536-41CF-A9CC-AA043113F6F4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116411","Name":"Inter-State Purchase Return of Fixed Asset from UnRegistered Vendor when Input Tax Credit is Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{38583B1E-682C-4B06-BB69-005849014E82}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116412","Name":"Intra-State Purchase Return of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{1EB264E9-24DD-43EC-A17F-E623BF565203}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116413","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{8E9E924F-0BE8-4862-BDFE-39CB23848B3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116414","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is available through Purchase Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{B4B3EE78-57EC-4EE8-8F51-E7B868CF34B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116450","Name":"End Type Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116451","Name":"Type Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116452","Name":"Intra-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available through purchase return order/Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{9A744701-39FF-4CFF-AA72-F5856E82FBF4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116453","Name":"Intra-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{142D2618-98AC-4DD8-922F-11CF063DD8D8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116454","Name":"Inter-State Purchase Return of Charge Item to Unregistered Vendor when Input Tax Credit is Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{8B75A47C-8DD2-45C8-99D9-B04E18C531D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116455","Name":"Inter-State Purchase Return of Charge Item to Registered Vendor when Input Tax Credit is Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{06A818C9-817D-4983-B8D9-D96759380A68}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116456","Name":"Intra-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{4934B903-2938-4ED9-994C-36F89B08E352}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116457","Name":"Inter-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8F83C983-4368-45FF-9319-952826F72162}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116458","Name":"Inter-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available with Bill to-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{478E0789-2184-4644-8165-3B5169084277}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116459","Name":"Inter-State Purchase Return of Charge Item from UnRegistered Vendor when Input Tax Credit is Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{0E9F08C2-7CF2-4AC1-AFB4-57AC8383E732}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116460","Name":"Intra-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{03418FFD-0AF9-48F5-A500-EC48BF9DE4E5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116465","Name":"End Type Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116466","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116467","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available through Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{A8C8864E-5E75-431A-90D6-9AAB47623BA6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116468","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C6FDF908-18DE-47B6-ADED-1E654C153D2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116469","Name":"Inter-State Purchase Return of Resource from Unregistered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{D8632F51-FEDB-4AF9-8A25-CFE374BD12BA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116470","Name":"Return of Import of Resource with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{62CA4077-63DB-4812-8DBA-369BDD0A5A63}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116471","Name":"Intra-State Purchase Return of Resource from Unregistered Vendor when Input Tax Credit is Available Through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{C9ED5F18-07B9-43AF-9221-448B962EC9CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116472","Name":"Intra-State Purchase Return of Resources from Registered Vendor where Input Tax Credit is available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{04F944A1-EF9C-440F-A89B-654782D13EAA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116473","Name":"Purchase Credit Memo/Return Order for Resource where Input Tax Credit is available.","NodeType":"Use Case","TableID":39,"CaseID":"{4001BD59-B35E-4BBC-B7AD-464FBB21E54A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116474","Name":"Intra-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{EE5198CD-9648-49CF-97C5-E71A9843EE27}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116475","Name":"Intra-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{21A2DFFA-DF09-4531-BE3F-DFC7E50F3D1E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116476","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available through Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{2E66DC31-92BB-4928-83E5-6F87FC544A85}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116490","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116500","Name":"End GST Credit Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116501","Name":"GST Credit Non-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116502","Name":"Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116503","Name":"Return of Import of goods where Input Tax Credit Not available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{D66CD2EC-C8A4-48B9-A634-B14161E0E03B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116504","Name":"Return of Import goods without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A4A0C6C8-FE70-4DA2-9E3D-E5F0CCA93A22}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116505","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{4684DF92-D578-4978-B4EC-04ACC07C8206}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116506","Name":"Intra-State Purchase Return of Goods to Registered Vendor when Input Tax Credit is Not Available purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{C8AEE991-4EDD-4562-BCE7-3DFA3502C8D2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116507","Name":"Intra-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available through Return Order","NodeType":"Use Case","TableID":39,"CaseID":"{0120B543-BBCA-433A-B84D-3A07CA4BD763}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116508","Name":"Intra-State Purchase Return of Goods to UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{5F7E0B6C-3D83-418C-9829-C5E5E52460C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116509","Name":"Intra-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{EB39C2FC-37D8-4778-8B44-9A45DDA46B2E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116510","Name":"Inter-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{938B00CD-0C55-4E7E-9E88-9D26724E10E2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116511","Name":"Intra-State Purchase Return of Goods to Registered Vendor when Input Tax Credit is Not Available with Bill To-Loc purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{65C755B4-E396-453F-9425-896AFF64D1B3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116512","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{0D76D452-CCE9-473B-998A-71EDADD459AE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116513","Name":"Intra-State Purchase Return of Goods to UnRegistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{35C8BFED-ED88-46B7-AFE8-9F2C58421857}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116514","Name":"Inter-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{E0AA74AA-F401-4115-B768-D41BB661B532}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116515","Name":"Intra-State Purchase Return of Goods to Registered Vendor when Input Tax Credit is Not Available purchase Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{A515D68A-A496-4A81-8F4E-EC21F207D5FF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116516","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{040A5713-75A6-4FD3-BCA9-7A335D697933}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116550","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116551","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116552","Name":"Purchase Credit Memo/Return Order for Imported Services from Import Associate Vendor where Input Tax Credit is Not Available.","NodeType":"Use Case","TableID":39,"CaseID":"{F14B809C-31CA-4B7D-989E-419B00D35F8F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116553","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is not available Through Return Order ","NodeType":"Use Case","TableID":39,"CaseID":"{C6B64855-0CA9-4749-B21E-AF9FA0AB33D4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116554","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{2CEB6A3E-11E4-420F-A3C6-886B920BEC29}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116555","Name":"ISD-Inter-State Purchase Return of Service from Registered Vendor when Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{78DCCF81-7548-4028-A6AF-31AEB633FC3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116556","Name":"ISD - Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{BD845B37-5E0F-4EF3-94CB-ED972B71A3C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116557","Name":"Inter-State Purchase Return of Service to Registered Vendor where Input Tax Credit is Non-available through Purchase Return Orders/Purchase Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{E6B27281-EC3F-4040-B035-4179D33884CE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116558","Name":"Intra-State Purchase Return of Services from Registered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{58CCF42B-75BE-422F-90A5-93E52B2CC817}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116559","Name":"Intra-State/Intra-Union Territory Purchase Return of Services from Registered Vendor where Input Tax Credit Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{A7F8D194-33DA-472D-87CB-693FB589CD45}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116560","Name":"Intra-State Purchase Return of Services from Registered Vendor where Input Tax Credit Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{A4461039-C91C-4102-9438-866AF5607096}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116561","Name":"Intra-State Purchase Return of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{F7D97DC6-CF0E-4248-95A3-3C7189BF844D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116562","Name":"Intra-State Purchase Return of Services from UnRegistered Vendor where Input Tax Credit Not Available (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{01289E18-40A0-4AC7-92DA-601F5AF77AA0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116563","Name":"Inter-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{7EE4EB63-5718-4880-80D7-DC82790F804D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116564","Name":"Inter-State Purchase Return of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{6FB5A46A-83C0-495F-9495-7365027603EA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116565","Name":"Return of Import of Services without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{7DBFAC05-5315-4A5F-B5BE-962A065F7D93}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116566","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available Purchase Return Order/Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{79A59A19-401F-444F-A3C4-F8CBBA06D4B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116567","Name":"Inter-State Purchase Return of Service to Registered Vendor where Input Tax Credit is Non-available through Purchase Return Orders/Purchase Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{4B185DAB-793D-4C0A-A303-417A61AC9B96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116600","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116601","Name":"Type Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116602","Name":"Purchase Return of Imported Fixed Asset from Foreign Vendor where Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{21811F58-E56B-4A1B-B6DA-C9BD8EECC3AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116603","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is not available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{11784DD8-7EF0-42CF-9A18-401A9ABC6466}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116604","Name":"Intra State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted (Non-Availment) goods with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{12EFA340-BD17-487B-A7CC-F23993B289CF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116605","Name":"Inter State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted goods(Non-Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{8E46C7A8-FFB5-40D2-8DBB-26E9FEDDF17D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116606","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{079237F7-FA64-40B5-8BE7-A92428550117}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116607","Name":"Intra-State Purchase Return of Fixed Asset to Unregistered Vendor when Input Tax Credit is Not Available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{8EC585FC-1F0E-4A31-A28A-463F3239EB57}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116608","Name":"Inter-State Purchase Return of Fixed Asset to Unregistered Vendor where Input Tax Credit is not available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{028465BA-B14C-4266-9D47-75A8087EE299}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116609","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is not available with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{BFB5B4F3-BBC1-4A5B-9B7C-C3572578CD78}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116610","Name":"Inter-State Purchase Return of Fixed Asset from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{3A542488-E9A7-41E5-BF0B-C73F9C82A8DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116611","Name":"Intra-State Purchase Return of Fixed Asset to UnRegistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{6A0A47A2-4A0F-4CCD-AC63-A70C76E05091}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116612","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{7601E944-F060-482E-B620-CF8555D00BB9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116613","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is not available with Bill To-Loc for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{BC63870D-585E-4C07-A6A6-44DE28F260BE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116650","Name":"End Type Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116661","Name":"Type Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116662","Name":"Intra-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Not Available purchase return order/Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{2653A4AF-CD57-4A29-B4C2-4FE3749AC4AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116663","Name":"Inter-State Purchase Return of Charge Item to Registered Vendor when Input Tax Credit is Not Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{87FB95AD-905D-4832-9EC3-0330B674D601}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116664","Name":"Intra-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{1B728E5D-4A32-4E32-A2AA-FE3673AFC2CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116665","Name":"Inter-State Purchase Return of Charge Item to Unregistered Vendor when Input Tax Credit is not Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{79839F30-7F44-4411-BB2D-07FFA294A38D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116666","Name":"Intra-State Purchase Return of Charge Item to Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{7E781F55-9A83-4206-B18A-46C2CA5E8573}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116667","Name":"Inter-State Purchase Return of Charge Item from Registered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{4F6B53B9-9961-4F29-8151-33C5D413CF58}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116668","Name":"Inter-State Purchase Return of Charge Item to Registered Vendor where Input Tax Credit is not available with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{38F58D78-84D4-40D9-BE77-CD33C02B49AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116669","Name":"Inter-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C85088E3-672F-4F2E-B1EF-19CBDFA5460B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116670","Name":"Intra-State Purchase Return of Charge Item to UnRegistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{E5053EEB-44D1-4552-8084-67D72A90CECB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116675","Name":"End Type Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116685","Name":"Type Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116686","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{40E9E837-E785-42A1-B8ED-9B27D43D1FFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116687","Name":"Return of Import Resource without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{5C3AA147-EDD0-4271-9CB8-4A6F6C98962A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116688","Name":"Inter-State Purchase Return of Resource from Unregistered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{43D94D4C-82EA-4A44-B80F-E297292CAA10}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116689","Name":"Intra-State Purchase Return of Resources from Registered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{A170BEEF-350A-4B43-B333-CBEA1D197E1B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116690","Name":"Purchase Credit Memo/Return Order for Resource where Input Tax Credit is not available.","NodeType":"Use Case","TableID":39,"CaseID":"{7C3076A9-460B-41BC-AED8-6B615E4835D2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116691","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{545DC1C5-C848-43B9-BFCE-72C3A45C94BA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116692","Name":"Intra-State Purchase Return of Resource from Registered Vendor where Input Tax Credit Not Available through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{7B096619-70FB-4622-9E57-8EAE58DC1AB1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116693","Name":"Intra-State Purchase Return of Resource from Unregistered Vendor where Input Tax Credit Not Available through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{A2153C07-E791-4821-9542-F9C6C3737BAF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116694","Name":"Intra-State Purchase Return of Resource from Registered Vendor where Input Tax Credit Not Available through Purchase Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{8B9B630B-1AC7-49A1-BA60-3A415B97C2BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116695","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{4FD977C3-86DB-46A1-AEEF-A0A176F23BE1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116697","Name":"End Type Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116700","Name":"End GST Credit Non-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116701","Name":"Begin Type Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116702","Name":"Inter State Purchase Return of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{F0453435-C2EF-43BB-BC81-39454E1DE4B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116703","Name":"Intra State Purchase Return of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Credit Memo/Return order.","NodeType":"Use Case","TableID":39,"CaseID":"{28E2DDFD-2F63-47CB-986C-8E6F5D2356F3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116715","Name":"End Type Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116750","Name":"End Exempted No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116751","Name":"Exempted","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116752","Name":"Intra State Purchase Return of Exempted Fixed Asset from Registered Vendor (Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{26260269-B2BE-4D01-AF43-91BCE15FFF05}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116753","Name":"Inter-State Purchase Return of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{8314CDF7-853B-4DEA-A6DF-CE478FB1D3BD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116754","Name":"Intra State Purchase Return of Exempted Fixed Asset from Registered Vendor (Non-Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{739B3C04-8659-438B-B9D5-EB62435B9025}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116755","Name":"Inter-State Purchase Return of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{43228213-4CEA-41C4-B28B-170B00BC81A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116756","Name":"Intra State Purchase Return of Service from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Credit Memo/Return order","NodeType":"Use Case","TableID":39,"CaseID":"{5E1C6C44-CCBA-49ED-AD64-54D360467B0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116757","Name":"Intra-State Purchase Return of Goods from Registered Exempted Vendor when Input Tax Credit is Available Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{8FCF5988-06C7-44E2-A7BD-A5A9B40CDEF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116758","Name":"Inter-State Purchase Return of Goods from Registered Exempted Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{67FECB97-A3FA-4FC9-8A80-E214C3DF4CA9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116759","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{4F992CE7-BB8C-4129-923A-F53A771DF231}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116760","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{0371699B-6B05-4B16-99FB-604F142308AA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116800","Name":"End Exempted","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116901","Name":"GST Reverse Charge -No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18085=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116902","Name":"GST Credit-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116903","Name":"Type -GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116904","Name":"(POS) Intra-State Purchase Return of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{3F057D29-C926-453B-8B17-6B5E431A20B4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116950","Name":"End Type -GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117000","Name":"End GST Credit-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117001","Name":"Begin Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117002","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{2BF5B2FE-2191-416D-B63F-47052716FC1B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117003","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{F759EFFB-61F9-4B84-B9CD-01E2616A7B85}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117004","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{F023887D-C599-4FE6-89E7-49C257DC208C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117005","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{13352A4D-EEAB-4FEA-A778-0BDAD73B550C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117015","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117016","Name":"Begin Type - Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117017","Name":"Inter State Purchase of Charge from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{0CF4326B-FD68-4AE6-B52A-CD2AA2F2A788}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117020","Name":"End Type - Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117021","Name":"Inter State Purchase of other types except good from Composite Vendor/Supplier of exempted not goods with no GST Impact through Purchase Return Order/Credit Memo With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{21E3248F-92C2-444C-B7E9-B48218AD918A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117022","Name":"Intra State Purchase of other types from Composite Vendor/Supplier of exempted not goods with no GST Impact through Purchase Return Order/Credit Memo with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{1988B611-ABD4-44C4-9CB5-67BB88E0002C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117023","Name":"Inter State Purchase of Service from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{BC9A772F-DBF9-4F4F-8607-212DC829C005}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117050","Name":"End GST Reverse Charge -No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117051","Name":"GST Credit Non-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117052","Name":"Return of Import Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{047704F8-A619-401F-9653-12103103E14A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117053","Name":"Purchase Credit Memo/Return Order for Imported Goods where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{DA972CCF-D97D-4379-9704-AB397FA9E08F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117054","Name":"Purchase Credit Memo/Return Order for Imported Services where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{1005E09C-7F65-4E7A-AC0C-B071C455A412}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117055","Name":"(POS) Intra-State Return of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is not available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{8B6ADE91-D482-4071-B431-C299292EF2BF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117056","Name":"Return of Import Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, without cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{B5C09EE0-1CF9-4818-AADB-AC5E95626AE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117057","Name":"Intra-State Purchase Return of Goods from Registered Vendor where Input Tax Credit is not available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{0EBD8B25-3C27-46AE-8CD7-4E870DB1315B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117058","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{97437C0C-3E99-4D15-9378-34AC4B8FD002}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117100","Name":"End GST Credit Non-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117101","Name":"Begin Type G/L Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117102","Name":"Purchase Credit Memo/Return Order for Imported Services where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{AA1B2E3A-4149-4352-B081-2A869CDE5353}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117120","Name":"End Type G/L Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117121","Name":"Begin Type - Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117122","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{55B6317F-25F3-4C73-8AA5-AFA3EC519C88}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117125","Name":"End Type - Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117150","Name":"End Purchase Return Document","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117200","Name":"End Purchase","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117201","Name":"Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18543=1(<>''),Field18001=1(<>''),Field18009=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117202","Name":"Account Type-Customer","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117203","Name":"Document Type- Invoice","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117204","Name":"GST Customer Type- Registered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18007=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117205","Name":"Intra-State Sales of Goods to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{3335E143-1F90-4E63-B6E7-5A4897019FFA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117206","Name":"Inter-State Sales of Goods to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{38C5A554-206D-44A5-9090-86CAC52A7715}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117207","Name":"Intra-State Sales of Service to Registered Customer through Sales Journal/Journal/General Journal - Kerala Cess","NodeType":"Use Case","TableID":81,"CaseID":"{C89845E0-C8B1-45B1-9C1B-04EC264B7AC7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117208","Name":"Intra-State Sales of Service to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{BBD37D0A-E328-4544-B5E1-03FCF65399D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117209","Name":"Inter-State Sales of Services to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{CF221DCD-487C-4B3C-BBC4-FE16B6667E76}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117210","Name":"Intra-State Sales of Exempted Service to Registered Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{B0D75B5B-C42D-4381-80D8-B312BD2360AE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117250","Name":"End GST Customer type- Registered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117251","Name":"GST Customer Type- Others","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18007=1(2|3|4|5|6|7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117252","Name":"Inter-State Sales of Service to UnRegistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{F56F247A-8E36-496E-8672-C6FE2C81CE7B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117253","Name":"Intra-State Sales of Service to UnRegistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{F719A304-09CF-479B-A123-2A4E34ED3133}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117254","Name":"Export Sales of Service to Export Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{F807C5DC-40B1-4E22-AB49-06BC54A22558}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117255","Name":"IntraState - Export Sales of Service to Deemed Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{005ED1ED-F66A-4A08-8647-0554154F0DF2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117256","Name":"Export Sales of Service to SEZ Development Customer with payment of duty through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{3DC33AD0-69AB-4B36-B58D-7C409957507C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117257","Name":"Export of Service to SEZ Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{6F745F19-1955-4DAA-A3C4-BAC6D6326232}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117258","Name":"Inter State - Export Sales of Service to Deemed Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{FCB154BF-A72A-43A0-87AB-DF80DEAB4F1C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117300","Name":"End GST Customer Type- Others","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117350","Name":"End Document Type- Invoice","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117351","Name":"Document Type- Credit Memo","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117352","Name":"Inter-State Sales Return of Service to UnRegistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{CCF41113-DC62-47E2-B45B-87AF0248AF65}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117353","Name":"Inter-State Sales Return of Goods to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{674E08E2-EB2A-4C3D-924B-9370C6ED3DBF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117354","Name":"Intra-State Sales Return of Service to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{6C9258C7-AF9C-43E4-A015-C4253265F37E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117355","Name":"Intra-State Sales Return of Service to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{6C9258C7-AF9C-43E4-A015-C4253265F37E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117356","Name":"(POS) Intra-State Sales Return/Credit Note of Services for Overseas Place of Supply from Registered Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{DF8067FF-2F97-485F-8364-3AC5536AD82D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117357","Name":"Export Sales Return of Service to Export Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{B8EE2ED8-F29F-465D-B6DC-A3A2A4BB1B3D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117358","Name":"Intra-State Sales Return of Service from Deemed Export Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{4BFBD63E-F561-4C68-AB29-BF4139D24F49}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117359","Name":"InterState Sales Return of Service to SEZ Development Customer with payment of duty through Sales Journal/Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{68AE0437-E71F-4AC5-8729-DDD40410D69D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117360","Name":"Sales Return of Service to SEZ Unit Customer with payment of duty through Sales Journal/Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{960BC8FC-FF34-4E46-A6A0-6FD2CB7BBDA2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117361","Name":"Inter State - Export Sales Return of Service to Deemed Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{FFBBBCDE-50F5-4D02-8B40-DAD63ED1491E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117362","Name":"Intra-State Sales Return of Goods to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{DF783FC9-39C3-492B-B94F-90BCF26C04E5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117363","Name":"Inter-State Sales Return of Service to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{4E1D5479-C527-4295-A0C1-7D82D94860F6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117400","Name":"End Document Type- Credit Memo","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117401","Name":"Document Type- Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117402","Name":"Inter-State GST on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{287ED69D-1488-4A48-BA50-E063EC8EF915}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117403","Name":"Intra-State GST on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{18F45902-76C4-4B57-AF7F-7D9B3A76D51F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117404","Name":"Export of Goods and Services to SEZ Development, through Sales Journal/Journal/General Journal With Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{0B9F94CE-1C82-4FF7-9EF7-D51E156A0286}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117405","Name":"Export of Goods and Services to Foreign Customer through Sales Journal/Journal/General Journal Without Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{2E85F2F7-2ED8-42CC-95F5-B20D32DB41AC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117406","Name":"GST Deemed Exports through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{AE574FA3-E537-4FC1-9F8D-E16EF5D7A40E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117407","Name":"Export of Goods and Services to SEZ Unit through Sales Journal/Journal/General Journal Without Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{B7D173ED-4B8F-4F13-95B8-B7C4890B3623}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117408","Name":"Export of Goods and Services to SEZ Unit through Sales Journal/Journal/General Journal With Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{B8ACD224-FC70-4037-86AD-C18AA5DA085F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117409","Name":"Export of Goods and Services to SEZ Development through Sales Journal/Journal/General Journal Without Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{C9CE4C92-F6CD-4B97-BD13-D8EE824D7D66}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117410","Name":"Export of Goods and Services to Foreign Customer through Sales Journal/Journal/General Journal With Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{DAC31111-29F4-4C8F-BEEC-C3B31668DAF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117450","Name":"End Document Type-Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117451","Name":"Document Type-Refund","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117453","Name":"Intra-State GST Refund on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{0628D305-F863-48E9-986E-0570995F7002}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117454","Name":"Inter-State GST Refund on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{F643A772-5CA6-4CC5-913C-9188C52DF8E0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117499","Name":"End Document Type-Refund","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117500","Name":"End Account Type- Customer","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117501","Name":"Account Type-Vendor","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117502","Name":"Document Type- Invoice","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117503","Name":"GST Credit -Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117504","Name":"GST Reverse Charge -Yes","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18023=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117505","Name":"Intra-State/Intra-Union Territory Purchase of Service from Unregistered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{3C23CDAC-6995-4B6C-9E4B-708B540C413B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117506","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{744B47C3-E4C1-4AC4-A37E-CBA3102A59A1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117507","Name":"Purchase of Services from SEZ Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{7E182C87-669C-4CD8-8336-41C2ABE6144C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117508","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{B8F32E0D-5D5E-4B84-AE3A-C0D4520470D3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117509","Name":"Inter-State Purchase of Services from Unregistered/Registered Vendor where Input Tax Credit is available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{819CADCF-BE64-4BC6-93BA-59EDE239EB54}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117511","Name":"Interstate GST Calculation on Reverse Charge Exempt Transactions through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{25E8E204-2E63-4B79-824C-3C1185D6467C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117513","Name":"Intrastate GST Calculation on Reverse Charge Exempt Transactions through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{DF134523-53D1-4137-B091-D9C5E1DB8D64}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117550","Name":"End GST Reverse Charge -Yes","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117551","Name":"Begin Vendor Type - Composite","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117552","Name":"Inter-State Purchase of Service from Composite Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F3CD2FC6-4CEE-47EF-B0F5-9EB3E46CE74B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117553","Name":"Intra-State/Intra-Union Territory Purchase of Service from Composite Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B68BAE5C-F887-46E8-9B4C-7333EB6152E0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117558","Name":"End Vendor Type - Composite","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117571","Name":"Begin Vendor type - Registered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117572","Name":"Intra-State/Intra-Union Territory Purchase of Goods from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{66A65EDD-B06A-4817-84C4-B61B035AC7EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117573","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{C2FE3376-EDB2-4C3E-A82D-F49D27D292DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117574","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{36017702-208F-4E8C-A75E-8872EA7D1205}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117575","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{26B7CC70-0C7D-4FD2-B00A-B7845C289215}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117576","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{02670909-9C35-49DA-B64F-E5EA4602693E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117577","Name":"ISD-Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{FA492219-9C2F-4986-B773-DAA35CA74796}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117578","Name":"ISD - Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{E73369B2-7A52-46D6-909F-BA116399AF39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117579","Name":"ISD - Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{E73369B2-7A52-46D6-909F-BA116399AF39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117580","Name":"(POS) Intra-State Sales of Services for Overseas Place of Supply from Registered Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{5DAE448C-0BD5-4DC3-9BF9-B846921D2C71}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117581","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available through Purchase Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{2341D31D-659B-4C70-B0FD-20C4494A4F1F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117585","Name":"End Vendor type - Registered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117586","Name":"Begin Vendor type - Import","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117587","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal-","NodeType":"Use Case","TableID":81,"CaseID":"{F6DED4E3-7405-4E6E-B0DF-1320041F130A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117588","Name":"Import of Purchase of Service from Import Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B4662B2E-9E63-4BA7-A683-248E5811B566}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117589","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{6D031AA1-2009-4D4A-A8E7-01D9116EDC5C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117592","Name":"End Vendor type - Import","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117593","Name":"Begin Vendor Type- SEZ","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117594","Name":"SEZ of Purchase of Service from SEZ Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{AB179237-EF7C-4BB1-9406-46B7B6DD1449}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117599","Name":"End Vendor Type-SEZ","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117600","Name":"End GST Credit-Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117601","Name":"GST Credit- Non Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117602","Name":"GST Reverse Charge-Yes","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18023=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117603","Name":"Intra-State/Intra-Union Territory Purchase of Service from UnRegistered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{4CB6ACCD-BD47-4485-A757-62924EA09524}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117604","Name":"Purchase of Services from SEZ Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{B2CD61FA-9C30-4FE5-B5C5-5B535BA6DF96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117605","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{4D9AEA2D-B94B-40CC-B9D9-BC8D6FA19425}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117606","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{580975ED-52DE-4EF9-BD94-99425C52B570}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117607","Name":"Intra-State Purchase of Services from Unregistered/Registered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0751F148-5E1D-4EFB-9008-ECB2F2F6704D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117608","Name":"Inter-State Purchase of Services from Unregistered/Registered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{4D947EDC-3710-49D2-91D5-6446978D43EC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117650","Name":"End GST Reverse Charge -Yes","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117651","Name":"GST Input Service Distribution -Yes","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18022=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117652","Name":"ISD - Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{9639222B-DFA8-4F14-9A72-24E994C1C7DA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117653","Name":"ISD-Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{19FC1701-0FE4-4ED3-83B8-07DAB075A043}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117700","Name":"End GST Input Service Distribution -Yes","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117701","Name":"GST Input Service Distribution -No","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18022=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117702","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{E530DADD-215F-47FF-8A84-46A1E62353CF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117703","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{5305AA1D-CF40-43CC-B9E3-B9471E33DCB3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117750","Name":"End GST Input Service Distribution -No","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117751","Name":"Begin Vendor Type - Import","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117752","Name":"Import of Services from Foreign Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{774A6E80-FBB4-4413-9144-6ACA8C6546D2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117753","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{9236A009-169D-4464-8B2C-62C94B782C26}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117754","Name":"Import of Services from Associate Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{54CB1855-9AD0-4A47-9777-D811C7FA1FDE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117759","Name":"End Vendor Type - Import","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117760","Name":"Begin Vendor Type - Unregistered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117761","Name":"IGST on Transportation of Goods through Purchase Journal/Journal/General Journal for Unregistered Vendor with Non-Availment.","NodeType":"Use Case","TableID":81,"CaseID":"{26ED31B0-75B8-439C-8E16-56518665184F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117764","Name":"End Vendor Type - Unregistered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117765","Name":"Begin Vendor Type - Registered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117766","Name":"Intra-State/ Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{15E17CFF-8262-4E83-8FD4-3EC012EEA465}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117767","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{A734B9DD-A4C1-427E-AF18-6A8B27474F50}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117768","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{DA8551C9-79B9-423C-801E-A8C868788300}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117769","Name":"Intra-State/ Intra-Union Territory Purchase of Goods from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{547DDC98-8D3C-46A0-84BE-03E71BA135DA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117770","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is not available through Purchase Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{997C3EE3-8453-43F1-A179-A32B19EFD8B8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117771","Name":"IGST on Transportation of Goods through Purchase Journal/Journal/General Journal for Registered Vendor with Non-Availment.","NodeType":"Use Case","TableID":81,"CaseID":"{4A025601-FF3D-4BA6-A567-0C31785D0D36}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117772","Name":"Place of supply as Vendors State in Purchase Transactions through Purchase Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{7ABC67E5-F6F0-4ECB-9634-55258429DFD8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117780","Name":"End Vendor Type - Registered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117781","Name":"Begin Vendor Type-SEZ","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117782","Name":"SEZ of Services from SEZ Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{8DF66C94-890C-4007-9341-18D0565000FE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117799","Name":"End Vendor Type- SEZ","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117800","Name":"End GST Credit -Non Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117850","Name":"End Document Type-Invoice","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117851","Name":"Document Type-Credit Memo","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117852","Name":"GST Credit -Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117853","Name":"Purchase return of Imported Goods where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{7B91DD35-F410-4971-A2BC-DBCB67520105}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117854","Name":"Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{BBBBD283-C64C-4AFE-A14E-950791E18CF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117856","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{9DFF9CBE-B1A5-4D28-A855-8783315A87D0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117857","Name":"Intra-State/ Intra-Union Territory Purchase Return of Goods to Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{85D7B57B-6657-4C5B-889D-282A48B9D0FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117858","Name":"Purchase Credit Memo/Return Order for Imported Services where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{C97F63C3-79EB-44D6-8AEA-B1710A9BBCE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117859","Name":"Purchase Credit Memo/Return Order for Imported Services from Import Associate Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{D0EADC0B-CBC1-4E07-8ADF-5AE168893B04}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117860","Name":"Intra-State Purchase Return of Service from Unregistered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{789CE492-C2BE-4EEC-8E98-740310FDD0E3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117861","Name":"Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0AAD1908-46DC-4370-8A8D-77096D9B30B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117862","Name":"Intra-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F857355F-9134-460C-89C8-FB0845206988}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117863","Name":"Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0AAD1908-46DC-4370-8A8D-77096D9B30B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117864","Name":"Inter-State Purchase Return of Services to Registered Vendor where Input Tax Credit is available (Reverse Charge) through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{DA389E3B-A6C3-4DE1-9843-807B2161B9DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117865","Name":"ISD-Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{812E9032-CA16-4FAB-A80B-94CD7BC5EB8D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117866","Name":"(POS) Intra-State Return/Credit Note of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F9A5047E-5B27-41E4-AF68-9497E3B52FAE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117867","Name":"Inter-State Purchase Return of Service from Unregistered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B5A9628F-46F5-48C4-9CC0-09CBAE26D7EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117868","Name":"Intra-State Purchase Return from Composite Vendor where Input Tax Credit is available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{AFA9BC82-6757-44E3-B5E4-00029DACDA64}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117869","Name":"Intra-State Purchase Return of Services from SEZ Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B053F5FC-CD93-4EA7-AC71-1590E006FAAE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117870","Name":"Intra-State Return of Services to Registered/ Unregistered Vendor where Input Tax Credit is available through Purchase Journal/General Journal (Reverse Charge)","NodeType":"Use Case","TableID":81,"CaseID":"{4C68E757-379A-4FD3-A58A-91F57954A9FC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117871","Name":"ISD - Intra-State/Intra-Union Territory Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{783D79C8-B103-439F-9F75-9CB53B347C73}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117900","Name":"End GST Credit- Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117901","Name":"GST Credit Non-Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117902","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is Not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{CB0F4A5D-EE91-402C-AA30-C8B724D7DCC5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117903","Name":"Intra-State/ Intra-Union Territory Return of Goods from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{8E0D2716-6C6D-4CDF-863F-1E043223D7DF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117905","Name":"Inter-State Purchase Return of Service to Registered Vendor where Input Tax Credit is not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F6932043-6A5A-4F55-B06A-DD7F76AFB52B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117906","Name":"Purchase return of Imported Goods where Input Tax Credit is Not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{8503C963-7C87-45CD-8543-607AE516F9F8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117907","Name":"Purchase Credit Memo for Imported Services where Input Tax Credit is not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{A6239FAB-E9D2-4FFC-90CC-A5D7858C4CD8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117908","Name":"Purchase Credit Memo/Return Order for Imported Services from Import Associate Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{CF175943-0F1A-4814-BF17-756FB88F497C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117909","Name":"Inter-State Purchase Return of Services to Unregistered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0C04EF8F-6F19-4C41-928B-9F32605898A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117910","Name":"ISD - Intra-State/Intra-Union Territory Purchase Return of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{00B59093-4DB8-4152-99DB-7F9368A143A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117911","Name":"(POS) Intra-State Return/Credit Note of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{75C41C76-22FC-479E-836E-E9C838FF3320}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117912","Name":"Inter-State Purchase Return of Services to Registered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{AE2974C0-8A1D-4821-8999-7617690C41FC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117913","Name":"Intra-State Return of Services to Registered/Unregistered Vendor where Input Tax Credit is not available through Purchase Journal and General Journal (Reverse charge)","NodeType":"Use Case","TableID":81,"CaseID":"{56D375F9-6B43-4460-B0F6-CAB18F44DE92}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117914","Name":"Intra-State Purchase Return of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{62275F50-6F85-4EA6-AA4F-0BACF20CF65E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117950","Name":"End GST Credit Non-Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118000","Name":"End Document Type-Credit Memo","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118001","Name":"Document Type-Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118002","Name":"GST on Advance for Import Payment.","NodeType":"Use Case","TableID":81,"CaseID":"{7859624E-8AFD-4A64-B361-900053C11266}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118003","Name":"GST on Advance payment from SEZ Vendor.","NodeType":"Use Case","TableID":81,"CaseID":"{041E1938-9B6A-4173-937C-FF0FDC0E7309}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118004","Name":"Inter State GST on Advance Payment made to Registered/Unregistered Vendor.","NodeType":"Use Case","TableID":81,"CaseID":"{E411752D-2CC4-4CD4-9D35-1AE651319762}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118005","Name":"Intra State GST on Advance Payment made to Registered/Unregistered Vendor.","NodeType":"Use Case","TableID":81,"CaseID":"{0686E40E-9643-42C8-B4D1-7587447E98E0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118006","Name":"GST on Advance Payment made to Vendor through General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{C60D4ED2-E3FC-41BC-BB8D-F1B521984712}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118050","Name":"End Document Type-Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118080","Name":"End Account Type- Vendor","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118090","Name":"GST Credit","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(0),Field18014=1(4|5|6|7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118091","Name":"GST Opening Liability IGST","NodeType":"Use Case","TableID":81,"CaseID":"{BE4AF8DF-BB6D-432C-B598-B7B481D8D826}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118092","Name":"GST Opening Liability CGST","NodeType":"Use Case","TableID":81,"CaseID":"{5B85FA47-8603-4A7F-9B76-4A5AD999CA81}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118093","Name":"GST Opening TDS Credit - CGST","NodeType":"Use Case","TableID":81,"CaseID":"{7FD02BAE-DA8D-4100-962E-6A8F7FDE823C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118094","Name":"GST Opening TDS Credit - IGST","NodeType":"Use Case","TableID":81,"CaseID":"{09E58D68-C9B5-4A27-B4FE-3BCA8B383E14}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118095","Name":"GST Opening TDS Credit - SGST","NodeType":"Use Case","TableID":81,"CaseID":"{851F544F-7349-4E29-AF19-A0B3B72AB0AC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118096","Name":"GST Opening TCS Credit - CGST","NodeType":"Use Case","TableID":81,"CaseID":"{AF9D718A-2832-4D92-A195-4D7DD81E2029}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118097","Name":"GST Opening TCS Credit - IGST","NodeType":"Use Case","TableID":81,"CaseID":"{33896D17-0F26-4376-8304-7BA20BE4E6D4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118098","Name":"GST Opening TCS Credit - SGST","NodeType":"Use Case","TableID":81,"CaseID":"{36207D8F-34B2-4AF3-83EC-96642DA44DFB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118103","Name":"GST Opening IGST","NodeType":"Use Case","TableID":81,"CaseID":"{325D0E84-286F-437E-BFE1-EBB6F575AD39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118104","Name":"GST Opening CGST","NodeType":"Use Case","TableID":81,"CaseID":"{34A74D02-F64A-4329-B0B3-B20E07D5A79A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118105","Name":"GST Opening SGST","NodeType":"Use Case","TableID":81,"CaseID":"{BBA0DF22-691B-46EB-8500-8B270596F2E9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118106","Name":"GST Opening Liability SGST","NodeType":"Use Case","TableID":81,"CaseID":"{97CF7642-AB0E-4686-A5CE-3D7C7C641E7E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118108","Name":"Account Type - G/L * Tax Type End","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118110","Name":"Account Type - G/L Account","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118111","Name":"Intra-state purchase of services where Services is paid directly and service provider is registered and GST Credit is Not Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{77160361-37A9-43BD-A71B-BFA6853D1CFB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118112","Name":"Inter-state purchase of services where Services is paid directly and service provider is registered and GST Credit is Not Available on Purchase Journal and Gen. Journals","NodeType":"Use Case","TableID":81,"CaseID":"{869FF9BE-3EA8-424B-973E-E27D6E370807}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118113","Name":"Intra-state purchase of services where Services is paid directly through bank and service provider is registered and GST Credit is Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{2D1A7414-2844-4128-B026-CA683BCEA058}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118114","Name":"Inter-state purchase of services where Services is paid directly through bank and service provider is registered and GST Credit is Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{5265955A-2DE6-49CD-AFBE-D314E2D049FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118115","Name":"Inter-state purchase of services where Services is paid directly and service provider is Unregistered and GST Credit is Not Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{2A85CD62-7897-47FF-808B-E0A11131071F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118116","Name":"Intra-state purchase of services where Services is paid directly and service provider is Unregistered and GST Credit is Not Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{EAD964E4-7CD1-4462-96B3-78A3FA9DE087}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118117","Name":"Inter-state purchase of services where Services is paid directly through bank and service provider is Unregistered and GST Credit is Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{99AB0C39-33A7-47F5-8659-968DBAEEA2F2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118125","Name":"End - Account Type - G/L Account","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118150","Name":"End Payment","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118151","Name":"Service Transfer","NodeType":"Begin","TableID":18351,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field11=1(<>''),Field12=1(<>''),Field20=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118152","Name":"Interstate Service Transfer Order","NodeType":"Use Case","TableID":18351,"CaseID":"{FEB751CF-3E8D-42AB-965E-51097FF60E64}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118153","Name":"IntraState Service Transfer Order","NodeType":"Use Case","TableID":18351,"CaseID":"{D68B3FE8-78C6-492D-AC1A-FFA29F17A50D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118200","Name":"End Service Transfer","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118201","Name":"Stock Transfer","NodeType":"Begin","TableID":5741,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field18394=1(<>''),Field18395=1(<>''),Field18396=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118202","Name":"IntraState Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{A59206F4-476D-4ED9-8665-08535755BB5E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118203","Name":"InterState Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{E52D7679-7E9C-4623-9CA7-AB704EF2465C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118204","Name":"Bonded Inter-State Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{AECAE480-71C8-41C4-B247-FB33DFC9C039}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118205","Name":"Bonded Intra-State Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{C215F153-718E-4936-BA99-ACB4E2F2BBC4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118250","Name":"End Stock Transfer","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118251","Name":"Journal Bank Charges","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field13=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118252","Name":"Document Type-Invoice","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field9=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118253","Name":"GST on Bank Charges against Customer Receipt (Intra Sate)","NodeType":"Use Case","TableID":18247,"CaseID":"{46054EB7-3CE7-421C-B047-00658AC5C150}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118254","Name":"Intra-State Bank Payment with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{7AC16E57-E977-41B3-9338-1399811A688B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118255","Name":"GST on Bank Charges against Customer Receipt (Inter State)","NodeType":"Use Case","TableID":18247,"CaseID":"{668C2032-DD90-4A23-8F30-04B69FE7C99E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118256","Name":"Inter-State Bank Payment with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{98A43A23-24F8-4FC2-9D4E-6B45D74B02FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118300","Name":"End Document Type-Invoice","NodeType":"End","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118301","Name":"Document Type-Credit Memo","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field9=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118302","Name":"GST on Bank Charges against Customer Refund (Inter State)","NodeType":"Use Case","TableID":18247,"CaseID":"{2026E996-050E-4647-8D77-9B2E8FF1B068}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118303","Name":"Inter State GST Refund on Bank Charges.","NodeType":"Use Case","TableID":18247,"CaseID":"{4CB74CDB-63C8-492B-8819-BA937750388D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118304","Name":"Intra State Refund GST on Bank Charges.","NodeType":"Use Case","TableID":18247,"CaseID":"{7E6E164B-CB38-4B5A-ADAA-BB51CAEEA5A7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118305","Name":"Inter-State Bank Payment for Credit Memo with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{429F37B1-0D9F-4B5A-BC3F-AC53F994BC32}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118306","Name":"Intra-State Bank Payment for Credit Memo with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{A26AB5CA-52E6-4626-A426-C656627502E4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118350","Name":"End Document Type-Credit Memo","NodeType":"End","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118351","Name":"Document Type - Blank","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field9=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118352","Name":"Intra-State Bank charges on bank Payment with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{F230C59A-547E-41CA-B6B9-5E8BE22A1BEF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118353","Name":"Inter-State Bank charges on bank Payment with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{50157D1D-C080-4AF0-8C63-0B5E918F5AF2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118375","Name":"End Document Type - Blank","NodeType":"End","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118400","Name":"End Journal Bank Charges","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119000","Name":"GST Service Management","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field7=1(<>''),Field18441=1(<>''),Field18443=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119001","Name":"Service Document","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119002","Name":"Intra State Service to Registered/Unregistered Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{B90130D9-0471-4034-8687-11B04ABDCE72}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119003","Name":"Inter State Service to Registered/Unregistered Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{4DD701D1-41A9-432E-9E95-8F8D08AB2C67}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119004","Name":"Inter State Service to SEZ Unit Customer through Service Quote/ Order/ Invoice.","NodeType":"Use Case","TableID":5902,"CaseID":"{5CB02A72-982F-4AD6-A762-CE881DC52ACC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119005","Name":"Inter State Service to SEZ Development Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{0282EB09-4676-4A39-B2EC-EDC9568BA92B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119006","Name":"Intra State Service to Deemed Export Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{ADF43278-38CD-463B-8E08-DD604EC3C50C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE119007","Name":"Inter State Service to Export Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{1CB4368B-D6AF-4B89-AFEB-8641B0152451}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119008","Name":"Inter State Service to SEZ Unit Customer through Service Quote/ Order/ Invoice without payment of Duty.","NodeType":"Use Case","TableID":5902,"CaseID":"{EC2138A1-46D7-430B-B335-F8D6C345BB16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119010","Name":"Intra State Service to SEZ Development Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{4C0ECC95-F5CD-46B2-B302-84C3A5AD7D4E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119011","Name":"Inter State Service to Deemed Export Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{135115A7-1D82-4528-959B-9A35775455CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119200","Name":"End Service Document","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119201","Name":"Service Return","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119202","Name":"Inter State Return of Service to Registered/Unregistered Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{AA215442-D318-4160-A666-57E3FBE06CDD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119203","Name":"Intra State Return of Service to Registered/Unregistered Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{C0774889-632D-4799-AA04-DA25EB643832}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119204","Name":"Inter State Service to SEZ Development Customer through Service Credit Memo\n","NodeType":"Use Case","TableID":5902,"CaseID":"{95551286-5BF2-42D5-895A-4A4F450A424B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119205","Name":"Intra State Return of Service to Deemed Export Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{DD75810D-2D5B-438A-A3AB-079E1B1D7AB9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119206","Name":"Inter State Service to Deemed Export Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{C211C520-8428-4E89-8A9A-446A5EC41D39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119207","Name":"Inter State Return of Service to SEZ Unit Customer through Service Credit Memo with payment of duty","NodeType":"Use Case","TableID":5902,"CaseID":"{6CFFB9A1-521E-4D60-AAFB-BDB044405A2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119208","Name":"Inter State Service to Export Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{0A055D50-A23B-48A5-BADA-9D00D97EED3B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119400","Name":"End Service Return","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119401","Name":"Begin Exempeted","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18446=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119402","Name":"Intra State Service to Registered/Unregistered/Exempted Customer through Service Quote/ Order/ Invoice/ Credit Memo - Exempted","NodeType":"Use Case","TableID":5902,"CaseID":"{D460C15F-47A6-41A4-9B9F-8EA3738C2E40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119403","Name":"Inter State Service to Registered/Unregistered/Exempted Customer through Service Quote/ Order/ Invoice/ Credit Memo - Exempted","NodeType":"Use Case","TableID":5902,"CaseID":"{990AEEEE-91BD-4C0E-8346-897F141E4EDB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119410","Name":"End Exempeted","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119800","Name":"End GST Service Management","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119999","Name":"End - GST","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200001","Name":"TDS","NodeType":"Begin","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"TDS","IsTaxTypeRoot":true},{"Code":"TE-200002","Name":"Purchase","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(1|2),Field18716=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200003","Name":"Domestic Vendor","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field91=1(''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200004","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{DB230097-4AA7-44E2-9373-02A467DC95AC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200005","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{A8E114BF-F8CD-44DB-A2B3-614BC18F4442}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200006","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":39,"CaseID":"{F39A0864-D2E7-40A5-9633-B6680CD3EC6F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200007","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{1E42FDF3-1868-4205-A6D6-D2FC67BD132F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200008","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified with Concessional Codes and Posting Date is greater than Start Date","NodeType":"Use Case","TableID":39,"CaseID":"{F8BF58D9-7681-458D-9DFC-71EA23A9F853}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200009","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where no PAN No. is specified along with Concessional Codes and Posting Date is greater then Start Date","NodeType":"Use Case","TableID":39,"CaseID":"{1ABE2C56-9700-4A30-A14A-5E8ECC2F32DD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200010","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified without Concessional Codes with Applies-to ID.","NodeType":"Use Case","TableID":39,"CaseID":"{B8A33720-278B-45B4-8465-2D9FA273D813}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200015","Name":"End Domestic Vendor","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200050","Name":"NRI Vendor","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field91=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200051","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{5D4C69D3-E776-4E9D-B397-09336BFDC884}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200052","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{FEE5DFFF-0BC1-4246-AD90-6CB3DC44A451}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200053","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{487C3669-B12A-42C0-9FEA-D23AB1426BF6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200054","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":39,"CaseID":"{75222E87-A1A0-48EE-9211-D3F59009C287}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200100","Name":"End NRI Vendor","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200150","Name":"End Purchase","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200151","Name":"Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field30=1(0),Field18544=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200152","Name":"NRI Vendor","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(2),Field12=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200153","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":81,"CaseID":"{271D5BC6-17E8-424E-9E34-3BEE548F938F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200154","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{D9B47164-1681-4C6F-A746-8D710E5F103D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200155","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{25C2D9C3-2A87-41A6-9AB9-DC76E818DF0C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200156","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{08737F79-35F1-4670-BD1D-E41764E3A9DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200200","Name":"End NRI Vendor","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200201","Name":"Domestic Vendor","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(2),Field12=1(''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200202","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":81,"CaseID":"{B0C259BC-64CC-4818-887A-3337D357CDFF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200203","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{33BFBE99-9140-4112-A55B-35EC0D9B61B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200204","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{FA0E357D-1AC0-42AA-94DE-6DACA521D38E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200205","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{0CDED40A-A359-45E0-AAEC-AFE7BBCFBC96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200250","Name":"End Domestic Vendor","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200251","Name":"Customer","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200252","Name":"Calculation of Tax Deducted at Source through Bank Receipt Voucher/Cash Receipt Voucher/General Journal/Cash Receipt Journal for Customers with PAN and without Concessional Code.\n","NodeType":"Use Case","TableID":81,"CaseID":"{C1C8C9A9-1AE8-48D7-AB60-9EA08AA0AF21}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200253","Name":"Calculation of Tax Deducted at Source through Bank Receipt Voucher/Cash Receipt Voucher/General Journal/Cash Receipt Journal for Customers with PAN and Concessional Code.\n","NodeType":"Use Case","TableID":81,"CaseID":"{98E3D17E-B644-4DBA-836C-CF26A20EDD3F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200300","Name":"End Customer","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200301","Name":"Provisional Entry","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200302","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{7D508D37-53AC-4E44-9669-743A8BA82A3F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200303","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":81,"CaseID":"{25EADDE7-E634-4A01-9E4B-74E7C9D5AA62}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200304","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{9E57C058-0570-4828-B24A-760D35A38D19}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200305","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where PAN No. is specified without Concessional Codes.","NodeType":"Use Case","TableID":81,"CaseID":"{61ED733A-A96B-45ED-BE21-A98A8B65566B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200350","Name":"End Provisional Entry","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200400","Name":"End Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-299991","Name":"End TDS","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300001","Name":"TCS","NodeType":"Begin","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"TCS","IsTaxTypeRoot":true},{"Code":"TE-300002","Name":"Sales","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18838=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300003","Name":"Sales Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(1|0|2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300004","Name":"TCS to be calculated on Customer Invoice with PAN and without Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{BC834CD9-7782-4B77-8D0E-0D7EF1679775}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300005","Name":"PAN No. Validations (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{E696BECA-20A6-498E-9615-114585216ABA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300006","Name":"TCS to be calculated on Customer Invoice without PAN and without Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{91492C74-9837-4256-8B07-1BA40247EA73}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300007","Name":"TCS to be calculated on Customer Invoice with PAN and with Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{4DC37F56-3558-400D-ABB1-5573CCC0FD30}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300008","Name":"TCS to be calculated on Customer Invoice with Resource and Fixed Asset (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{B8AC2649-DEA6-42B1-BF69-62A706C6DC40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300009","Name":"TCS to be calculated on Customer Invoice without PAN and with Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{C8358DF6-AC70-4AB2-94E4-D609ADC635CA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300050","Name":"End Sales Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300051","Name":"Sales Return Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(5|3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300052","Name":"TCS to be calculated on Customer Invoice without PAN and without Concessional (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{B3983817-AAEE-4AD8-97D8-16A875361BA7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300053","Name":"PAN No Validations (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{800AD5B2-89E5-4616-8281-37DDEC382E76}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300054","Name":"TCS to be calculated on Customer Invoice with Resource and Fixed Asset (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{F687A3C1-9192-42D2-A042-39C2B63B35D7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300055","Name":"TCS to be calculated on Customer Invoice with PAN and without Concessional (Through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{B1B995F9-C500-4846-9FE8-833A900F0846}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300056","Name":"TCS to be calculated on Customer Invoice with PAN and with Concessional (Through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{77DE8E48-908D-4E7E-9FBE-98B9EFCB7AE5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300057","Name":"TCS to be calculated on Customer Invoice without PAN and with Concessional (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{5E2AC8E9-8A09-4BA9-8C30-C1CD27CAA214}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300100","Name":"End Sales Retun Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300150","Name":"End Sales","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300151","Name":"Receipt","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(1),Field6=1(1|2|3),Field30=1(0),Field18807=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300152","Name":"Invoice and Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(2|1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300153","Name":"TCS to be calculated on Customer Invoice and Payment with PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{593E67FC-EACA-4C9B-8F95-4A1D3D1712E4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300154","Name":"TCS to be calculated on Customer Invoice and Payment without PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{DA63D636-4773-418A-8123-6522A7867E5F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300155","Name":"TCS to be calculated on Customer Invoice and Payment with PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{6B7BF4A0-0250-4480-9482-733992652D29}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300156","Name":"TCS to be calculated on Customer Invoice and Payment without PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{D9843455-A721-409B-8A37-D111331A8024}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300157","Name":"PAN No. Validations through General journal","NodeType":"Use Case","TableID":81,"CaseID":"{CB9FAD0D-74A9-4DD5-A83A-E2F6A1FABA06}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300158","Name":"TCS to be calculated on Receipt of Payment with PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{42747DC4-6388-459E-9D2E-103F3F4E2AB0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300159","Name":"TCS to be calculated on Receipt of Payment without PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{82174562-748D-4C6F-AE37-852C7CCEFEAC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300160","Name":"TCS to be calculated on Receipt of Payment without PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{1E2CC6D7-1793-4F6E-BF59-A79A941FD309}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300161","Name":"TCS to be calculated on Receipt of Payment with PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{6F4B6558-D97D-463E-BCC2-A8AE3C7EB872}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300200","Name":"End Invoice and Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300201","Name":"Credit Memo","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300202","Name":"TCS to be calculated on Customer Credit Memo without PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{4BC77C19-4CA3-4913-8EB5-11EDAE308A25}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300203","Name":"TCS to be calculated on Customer Credit Memo without PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{3ED702E0-AFA2-4771-AD1F-8FBEF7383436}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300204","Name":"TCS to be calculated on Customer Credit Memo with PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{088AD93D-6264-4C00-8E0D-F15F40E5E4F6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300205","Name":"TCS to be calculated on Customer Credit Memo with PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{994E3FD7-2FE1-4B6D-AC06-F819F8B94F07}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300250","Name":"End Credit Memo","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300300","Name":"End Receipt","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-399991","Name":"END TCS","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-999999","Name":"End Tax Engine","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false}]]]> + ''),Field18080=1(<>''),Field18096=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000311","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Registered/Unregistered","NodeType":"Use Case","TableID":39,"CaseID":"{F6F63738-94DD-4B0B-BAD6-4EC11668D327}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000312","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8D93354A-64E8-4DA5-A1A7-741A42B80B33}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000313","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{826B72ED-5C21-45CA-A966-8443C38B768A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000314","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{7C64DCF3-718C-405E-A389-582FD1E33E5D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000315","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{71ED6108-7E6C-42E3-BEC8-DF9AD0C7A27E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000316","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{C724AA5A-92F2-4965-957B-C43EEACAABE6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000317","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - G/L Account","NodeType":"Use Case","TableID":39,"CaseID":"{DEEB69C8-EDAA-4A5A-875E-A20DA52008BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000318","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{DE898176-3602-4CBD-BF29-EAF4A9C03987}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000319","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - G/L Account (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{F7192A60-5739-4B72-AB1D-FB48ED3EE0F9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000320","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{3E8E1EDA-828E-40BE-8FD4-3456546F47A6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000321","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{FD3380A2-217C-4059-A344-1D832B755088}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000322","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice- Fixed Asset","NodeType":"Use Case","TableID":39,"CaseID":"{E1914856-FF7A-4B3A-99D5-17190CE10C27}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000323","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8D7FD8C3-FCB1-4968-8FD6-08181778EC29}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000324","Name":"Calculation of Cess where input tax Credit is Not Available for Goods through Purchase Quote/Order/Invoice -(Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{1E087C72-9078-4C31-ABD5-38F01008E508}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000325","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{508FE302-0CAB-41B6-8C43-737EBE931312}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000326","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{68FE3FB0-9F3C-44A6-9686-F37192B1A371}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000327","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Fixed Asset from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{2EA01E14-807E-4CC7-8494-9EAAFBA21709}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000328","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice -Fixed Asset(Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{6ADC0F4A-6D69-4BAE-A94F-7DC0889758DC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000329","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{C9822271-8F51-46B7-B4BD-A2B424B1699B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000330","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{C63F1B6C-96EE-41CB-879B-801CE9C734A6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000331","Name":"Calculation of Cess where input tax Credit is available through Purchase Quote/Order/Invoice - G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{F748E0D1-BC76-4D68-8CBD-FF4189DC3517}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000332","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Quote/Order/Invoice - G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{AE6444ED-20D1-4E69-A69C-7DCAEC9C4738}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000333","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Quote/Order/Invoice - Fixed Asset from Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{535A4B2C-EEA4-4267-8638-F57DE9153FDD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000340","Name":"End Cess on Purchase","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000350","Name":"Cess on Purchase Return","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(3|5),Field7=1(<>''),Field18080=1(<>''),Field18096=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000351","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Registered/Unregistered","NodeType":"Use Case","TableID":39,"CaseID":"{725E8FB9-C4CC-42B7-B060-5E86614A8168}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000352","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{EFF1E5F5-6CC1-414D-BD1F-1095D42F9A4A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000353","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/ Credit Memo - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8BB1C380-7CFE-4B49-82AD-78BBA652EB5C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000354","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{231587B2-D0BD-4362-9A3B-11839F7BB326}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000355","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{CEAE9F6C-7E67-4347-9E66-A9C6C54E4ECE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000356","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - G/L Account","NodeType":"Use Case","TableID":39,"CaseID":"{F33121DD-68CB-423C-A98B-6FF10BD8CED7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000357","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - G/L Account (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{75A11E67-E9DF-446F-974A-AE9F91D8EA1C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000358","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/Credit Memo - Goods from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{6F2DE875-4569-41DB-A28E-021E4D00378A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000359","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/Credit Memo - Service from SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{7D571F8D-B6A0-47E0-B80F-9AC703DF1D3B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000360","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/ Credit Memo - Goods from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A622E949-C161-4AE2-B6DB-7D3C16E5D899}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000361","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Fixed Asset","NodeType":"Use Case","TableID":39,"CaseID":"{43F17130-4EA1-48FE-B1A8-716EE5DF7C16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000362","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/ Credit Memo - Fixed Asset from SEZ Vendor With Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{3A6F385C-72E7-42C6-A696-47102B270402}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000364","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/ Credit Memo - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{6DEEF440-3A5B-4201-9D1B-59AC37AF4C36}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000365","Name":"Calculation of Cess where input tax Credit is Not available through Purchase Return Order/Credit Memo - Fixed Asset from SEZ Vendor Without Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{C08A9FD5-5ECC-4BB5-8A19-345060822129}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000366","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Fixed Asset(Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{CBDB09CC-FB6C-4475-89A3-62C04DADFA15}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000367","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo Unregistered Vendor- Item (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{39808C8A-4131-4B49-BF1D-D8FA64667B3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000368","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{812C7B77-0622-4E71-9F4E-261C3874A680}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000369","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{3B82DBC4-FAAE-477D-892C-AD82ECDFEF7E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000370","Name":"Calculation of Cess where input tax Credit is available through Purchase Return Order/Credit Memo -G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{B4A44DCF-6090-4813-9C09-193AB1A09B93}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000371","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - G/L Account- Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{A79DCE33-C753-4680-A6A3-F824608702B1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000372","Name":"Calculation of Cess where input tax Credit is Not Available through Purchase Return Order/Credit Memo - Fixed Asset - Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{FBD319E5-BDFD-43E8-B9EB-275F01FA6A40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000380","Name":"End Cess on Purchase Return","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000500","Name":"Cess on Sales","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2|4),Field5=1(1|2|4|3),Field7=1(<>''),Field18142=1(<>''),Field18144=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000501","Name":"Calculation of Cess on sales to Registered/Unregistered Customer through Sales Quote/Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{3D30F63D-D6C1-4B1B-ACFD-E252FAB190E2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000502","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Quote/Order/Invoice with Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{9B4E1225-00F2-4467-BA93-29AD1F2EBD46}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000503","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Quote/Order/Invoice without Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{0F354915-7E17-421B-87D8-7E6C2716E173}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000504","Name":"Calculation of Cess on sales to Registered/Unregistered/Exempted/SEZ/SEZ Development/ Deemed Export Customer through Sales","NodeType":"Use Case","TableID":37,"CaseID":"{33CD3931-0BA0-4358-B808-5C6378CAA489}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000505","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Quote/Order/Invoice with Payment of Duty - Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{37EFA642-056C-45E8-974E-6B41B335FC81}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000506","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Return Order/Credit Memo with Payment of Duty - Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{DE8006B8-CF9F-474A-AE29-C7903A148261}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000600","Name":"End Cess on Sales","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000601","Name":"Cess on Sales Return","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(3|5),Field5=1(2|1|3|4),Field7=1(<>''),Field18142=1(<>''),Field18144=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000602","Name":"Calculation of Cess on sales to Registered/Unregistered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{272FFE9F-A7C9-4AF8-87DD-3EA53BA18511}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000603","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Return Order/Credit Memo with Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{9DB4ECE1-3397-4ADD-9EA8-40A8D82A6A9A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000604","Name":"Calculation of Cess on sales to SEZ Development/SEZ Unit Customer through Sales Return Order/Credit Memo without Payment of Duty","NodeType":"Use Case","TableID":37,"CaseID":"{423BECDD-68DC-4541-9047-8F6B797709E5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000605","Name":"Calculation of Cess on sales to Registered/Unregistered/Exempted/ SEZ/ SEZ Development/ Deemed Export Customer through Sales Return Order/ Credit Memo - Exempted","NodeType":"Use Case","TableID":37,"CaseID":"{ED1E0A5D-C364-4F36-847E-AAE263B34185}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000700","Name":"End Cess on Sales Return","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000701","Name":"Cess on Transfer Order","NodeType":"Begin","TableID":5741,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field3=1(<>''),Field18394=1(<>''),Field18395=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000702","Name":"Calculation of Cess in Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{631DEFA0-165E-4BDC-8F8A-AB2A88DF90AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-000750","Name":"End Cess on Transfer Order","NodeType":"End","TableID":5741,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-001000","Name":"End GST Cess","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100001","Name":"GST","NodeType":"Begin","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"GST","IsTaxTypeRoot":true},{"Code":"TE-100011","Name":"Subcontracting GST For Delivery Challan Line","NodeType":"Begin","TableID":18469,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field54,Field55) WHERE(Field46=1(<>''),Field47=1(<>''),Field102=1(<>''),Field103=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100012","Name":"Intra-state Subcontracting GST For Delivery Challan Line for Registered Vendor","NodeType":"Use Case","TableID":18469,"CaseID":"{5388F401-5CDE-4918-A9B0-B7B134235921}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100013","Name":"Inter-state Subcontracting GST For Delivery Challan Line for Registered Vendor","NodeType":"Use Case","TableID":18469,"CaseID":"{6A75BFF5-C880-498F-AC1D-E9CF9BE7F888}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100099","Name":"Subcontracting GST For Delivery Challan Line","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100100","Name":"Subcontracting GST For GST Liability Line","NodeType":"Begin","TableID":18470,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field3,Field4) WHERE(Field46=1(<>''),Field47=1(<>''),Field102=1(<>''),Field103=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100101","Name":"Intra-state Subcontracting GST on GST Liability Line for Registered Vendor","NodeType":"Use Case","TableID":18470,"CaseID":"{81A83FF9-D7EB-4B5F-A2AE-ED346B7A9079}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100102","Name":"Inter-state Subcontracting GST on GST Liability Line for Registered Vendor","NodeType":"Use Case","TableID":18470,"CaseID":"{81A24E9D-52B9-4EFE-A18B-398C6BAD55ED}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100199","Name":"Subcontracting GST For GST Liability Line","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100200","Name":"GST Finance Charge Memo","NodeType":"Begin","TableID":303,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field18142=1(<>''),Field18144=1(<>''))","TaxType":"GST","IsTaxTypeRoot":false},{"Code":"TE-100201","Name":"InterState GST Calculation on Finance Charge Memo For Registered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{10675EE2-5AA7-4D43-8794-03BA8CD85445}","Condition":"VERSION(1) SORTING(Field1,Field2)","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100202","Name":"Intrastate GST Calculation on Finance Charge Memo For Registered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{853FC9A7-4D6E-4511-8207-BB18D1FFC0E8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100203","Name":"InterState GST Calculation on Finance Charge Memo For SEZ Unit/SEZ Development/Deemed Export Customer With Payment of Duty.\n","NodeType":"Use Case","TableID":303,"CaseID":"{CAC3F49D-59DD-4F1A-B0F3-AC28F7552973}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100204","Name":"InterState GST Calculation on Finance Charge Memo For Unregistered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{C4BC4E11-E295-4A20-9F5F-801F2406A610}","Condition":"VERSION(1) SORTING(Field1,Field2)","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100205","Name":"Intrastate GST Calculation on Finance Charge Memo For Unregistered Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{34D44752-1655-43CC-8DD8-9CBA775C5554}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100206","Name":"Intrastate GST Calculation on Finance Charge Memo For Exempted Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{4C815B8B-6831-4E19-899D-361FBA9CFC43}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100207","Name":"InterState GST Calculation on Finance Charge Memo For Exempted Customer.\n","NodeType":"Use Case","TableID":303,"CaseID":"{EC7AE7B0-93FA-42C2-9717-BBD2E8FC4D4C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100208","Name":"InterState GST Calculation on Finance Charge Memo For SEZ Unit/SEZ Development/Deemed Export Customer Without Payment of Duty.\n","NodeType":"Use Case","TableID":303,"CaseID":"{6946230A-A2F4-4E4B-90C6-6C907D010EB5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-100300","Name":"GST Finance Charge Memo","NodeType":"End","TableID":303,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110001","Name":"Sales","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field7=1(<>''),Field18142=1(<>''),Field18144=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110501","Name":"Sales Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2|4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110601","Name":"Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110696","Name":"Sales Line No Not Blank","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field6=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110700","Name":"Export to SEZ/ SEZ Development /Deemed Export With Payment of Duty through Sales Order/Invoice - Exempted","NodeType":"Use Case","TableID":37,"CaseID":"{A4C57AB8-DBFF-473C-B2A3-739975737950}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110701","Name":"Intra State Sales of Exempted from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4911101A-A3D1-4596-836C-A9EB2F2CB24C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110702","Name":"Inter State Sales of Exempted from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{CA856646-6B6F-42D2-A4CC-64A8F52DE9F6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110703","Name":"Inter State Sales of Exempted from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{CE4E5351-F5F5-413A-AAF9-6C5EA6530D93}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110704","Name":"Intra State Sales of Exempted from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{887FEE8B-EFB6-4010-B79B-4CDB44F23CC8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110705","Name":"Intra State Exempted Sales for Deemed Export Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{332A3E45-C1C8-423A-9063-B55EFA585045}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110706","Name":"Export and Exempted to Foreign Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{74E6E05F-641D-4857-8F88-C48783B29B3E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110707","Name":"Intra state Sales of Charge Item from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{D2C0BC32-D71C-4FEC-A3FC-63A0586DA3D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110708","Name":"Inter State Sales of Exempted Charge Item from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{8E20FC81-1137-41B3-A90E-AE86CD66F718}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110720","Name":"End Sales Line No Not Blank","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110721","Name":"Type - G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110722","Name":"Intra state Sales of Services from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A9D34135-2984-4C5D-99C0-5563408C59EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110723","Name":"Inter State Sales of Exempted Services from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{E474605D-6956-438B-95F2-DA5BE6A6D741}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110740","Name":"End Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110741","Name":"Begin Type - Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110742","Name":"Inter State Sales of Exempted Goods from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{144DB41F-813A-4EE0-87EC-7082D07652B7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110743","Name":"Intra state Sales of Goods from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{C3901ECF-9316-49A7-9897-B8C52A5A66A0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110760","Name":"End Type - Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110761","Name":"Begin Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110762","Name":"Inter State Exempted Sales of Fixed Assets from Exempted Customer through Sales Quote/ Sales Order/ Sales Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A48A1647-673E-4C77-9997-143963591989}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110763","Name":"Intra state Sales of Fixed Asset from Exempted Customer through Sales Quote/ Order/ Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{26405773-06F9-4F36-B6B1-E80AA9987628}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110780","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-110801","Name":"End Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-111001","Name":"Not Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-111950","Name":"Sales Line No Not Blank","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field6=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112001","Name":"Intra-State Sales of Services to Overseas Place of Supply to Registered Customer Through Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{FA5B2691-7B6B-43B4-92F1-9B6D10A216E4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112002","Name":"GST Deemed Exports With Payment of Duty through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{B66179F8-E62E-45F8-9DE3-5351C859F85D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112003","Name":"Intra State Sales for Deemed Export Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{2C82CF3D-40B2-4FCC-8F04-E649DADD1619}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112004","Name":"Intra State Sales for Deemed Export Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{1F930CB5-93A8-4BE9-B412-B9B44F1FBE2B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112005","Name":"Intra State Sales for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{71177393-F102-466E-AC36-1A460BC1C3E9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112010","Name":"End Sales Line No Not Blank","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112051","Name":"Type - Charge Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112052","Name":"Intra State Sales of Charge Item from Registered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{7422E62E-F5A5-46C6-8A2D-9F9F4C082C91}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112053","Name":"Intra State Sales of Charge Item from Unregistered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A9E13C42-F366-4E5F-A057-1E0B4E43D454}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112054","Name":"Inter State Sales of Charge Item from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{F5794DA7-0CC7-42C2-BEA0-18EB8F98BB5A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112075","Name":"Inter State Sales of Charge Item from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{207FA1CE-712A-475E-AC05-B36812DDE2C8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112076","Name":"Export Sales of Charge Item from SEZ Unit / Development through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4083D3D9-1F73-48ED-ABD1-12C0559D270F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112077","Name":"Export Sales of Charge Item from SEZ Unit / Development without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{EFF7E856-EF6B-4EC0-9AAE-C2E07B6CB15B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112078","Name":"Export Sales of Charge Item from SEZ Unit / Development through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{40065229-E7D9-4C0A-A0EB-5DE70DD4E9AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112079","Name":"GST Deemed Exports for Charge Item through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{929EB05F-45B5-4F4F-9DD4-61AFAB36F21B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112080","Name":"GST Deemed Exports for Charge Item Without Payment of Duty through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{A2608A05-D116-4475-B690-A6E26170BC2C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112081","Name":"Export Charge Item to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9D6C4AC2-81D1-47E7-8C7C-494F20F1719F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112082","Name":"Export and Charge Item to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9CBCEC6F-A01B-422B-8AAB-4B6BC90EC959}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112100","Name":"End- Type - Charge Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112101","Name":"Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112102","Name":"Inter State Sales of Fixed Asset from Registered Customer through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{46CB3503-286F-43C3-9B04-FBBD5F2CBAF0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112103","Name":"Intra State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{636979B2-6B57-49C6-B0B8-B306261B3304}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112104","Name":"Intra State Sales of Fixed Asset from Registered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A4044120-D393-4525-88F4-AB1A71F2E49C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112105","Name":"Inter State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{52FD8776-17C2-428A-B747-159404771D07}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112106","Name":"Export Fixed Asset to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{AF5EE023-63DF-4210-AD71-6436230F6DFA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112107","Name":"GST Deemed Exports of Fixed Asset through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{7B9EA3AF-2235-44F9-AE67-E0F9F74740E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112108","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{8E2CB0E2-795D-4DC3-879B-5117E415DFB9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112109","Name":"Export Fixed Asset to SEZ Unit Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{8FDC8D41-E5D7-40D7-B962-80DA519596F3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112110","Name":"Export Fixed Asset to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{C99A231E-6BBF-4982-AEAF-6CAAC7E5BA9B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112111","Name":"Export Fixed Asset to Deemed Export Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4490AC87-E83B-44C4-A6A8-EAF2650E8773}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112112","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice - Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{6EC9FAFD-8029-4B9C-8899-CB3C494682D1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112113","Name":"Export of Fixed Asset to SEZ Development Without Payment of Duty through Sales Quote/Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{24BF4F23-3693-4E31-ADDA-9D2F91057CA2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112114","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{58789CA5-0F23-4972-B1FE-3EE6E8BC19A1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112115","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{A18E31F4-0E06-42B6-B8E0-282B42CA2A28}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112214","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112249","Name":"Type - G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112250","Name":"Intra State Sales of Services from UnRegistered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{1BAE51D1-AD26-40F8-BFD2-156024A23A7B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112251","Name":"Inter State Sales of Services from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{2E7A7A10-CCD5-4673-AF42-1EF83425931F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112252","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4529A161-49CC-44B6-95BA-CC141FA794B1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112253","Name":"Intra State Sales of Services from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{4962D3B9-0349-4BE9-B173-22B456AEE6C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112254","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{BF9D05ED-BF8A-4BC8-9195-D008E4E381FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112255","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice. - POS","NodeType":"Use Case","TableID":37,"CaseID":"{E6D39823-CCCC-43DC-BD7E-CC6EEEBDB5EB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112256","Name":"Export and Service to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{DD3CF85B-64EA-4DD4-A626-C472E3B3B072}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112257","Name":"Export and Service to Foreign Customer With Payment of Duty through Sales Order/Invoice With GST on Assessable value.","NodeType":"Use Case","TableID":37,"CaseID":"{1C9C14DA-22A0-4F6B-968A-1F79BE11B7A1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112258","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{ABD1A54F-36DA-45A7-AFED-451B98434B0C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112259","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B2150DAA-4B46-41F2-89BF-19F5FD89362E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112260","Name":"Export Services to SEZ Development Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{F8591F7C-5D5C-4976-B5F1-E3248733EBC5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112261","Name":"Export Services to Deemed Export Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{21A349A2-B069-4AA5-86B9-34136BE37267}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112262","Name":"Export Service to SEZ Unit Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{512B21D6-5395-499F-A2BE-EF6D24385C89}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112263","Name":"Export Services to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{8638A2E3-3F44-4672-A54D-0D65B1528FF9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112264","Name":"Calculation of GST Services where Unregistered Transporter, TPT Location is different and Pick Up Location and Delivery Location is same through Sale Orders/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{99C83819-83BC-418A-A2A7-26A041F2F99A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112265","Name":"Inter State Sales of Services from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{C6AAB568-68A3-4D8A-A708-ECD7EFD9A3EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112266","Name":"Intra State Sales of Service from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{9666CA08-2C56-43C5-B36F-7FD3745FE832}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112267","Name":"Inter State Sales of Service from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{D9221422-669E-485D-8224-053D641FE4F3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112268","Name":"GST Deemed Exports of Services through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{67F7C66D-5296-4A5F-A85F-D4B91D1DBF97}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112269","Name":"Calculation of Transportation of Services from Registered Vendor, where TPT Location and Pick Up Location is same and Delivery Location is different. through Sales Order","NodeType":"Use Case","TableID":37,"CaseID":"{8D0E6401-974F-4F8E-9254-2AF9067E73DC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112270","Name":"Calculation of Transportation of Services from Un-Registered Vendor, where TPT Location and Pick Up Location is same and Delivery Location is different. through Sales Order","NodeType":"Use Case","TableID":37,"CaseID":"{99F473AC-553E-4032-AEDB-0AE44C871CD2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112271","Name":"Calculation of GST in case of Transportation of Service where Registered Transporter State is different and Pick Up Location State and Delivery Location State is same through Sale Orders","NodeType":"Use Case","TableID":37,"CaseID":"{02B82B77-D7E5-4A49-89A2-6D46EC87AE61}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112272","Name":"Calculation of GST in case of Transportation of Service where Un-Registered Transporter State is different and Pick Up Location State and Delivery Location State is same through Sale Orders","NodeType":"Use Case","TableID":37,"CaseID":"{76F9EC4B-C6F3-4DBE-B1CA-04EFC5AD609E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112273","Name":"Calculation of Transportation of Services from Registered Vendor, , TPT Location is different and Pick Up Location is different and Delivery Location is different through Sale Orders","NodeType":"Use Case","TableID":37,"CaseID":"{CF4626CB-7022-41C6-95C6-E1FE28C8C370}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112274","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice -Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{C447C36E-72FA-4FEA-A49C-F976FE57275D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112275","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice -Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{5043629A-E2D7-4E0D-AD7F-C9D505507D01}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112276","Name":"Intra State Sales of Service from Registered Customer through Sales Order/Invoice For Ship To Address.","NodeType":"Use Case","TableID":37,"CaseID":"{0321474A-ABD0-45DB-8CEA-B586A5CB7F49}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112399","Name":"End Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112400","Name":"Type - Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112401","Name":"Inter State Sales of Goods from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{11160E03-89D0-481D-B2EA-24898F3DB4AB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112402","Name":"Intra State Sales of Goods from UnRegistered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{364EABA8-DF5D-4174-951E-9C9B375830D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112403","Name":"Intra State Sales of Goods from Registered Customer through Sales Order/Invoice - Kerala Food Cess","NodeType":"Use Case","TableID":37,"CaseID":"{A8BF5AD2-5132-40E7-9DF1-893B3940F6EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112404","Name":"Intra State Sales of Goods from Unregistered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{CFE77ACE-1F20-4126-98D9-8D14B18088EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112405","Name":"Inter State Sales of Goods from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B61CB389-28BD-4569-BF95-284B62972B23}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112406","Name":"Intra State Sales of Goods from Registered Customer through Sales Order/Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{6B464955-261F-4EAF-A749-7807444FC37C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112407","Name":"Export and Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{55AD5167-785F-4CC3-B633-84A8414EE100}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112408","Name":"Export and Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice With GST on Assessable value.","NodeType":"Use Case","TableID":37,"CaseID":"{23C292E2-9704-4112-9AB6-A2FCBDDFFA6A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112409","Name":"Export Goods to SEZ Unit Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{2961B717-F882-4174-A7D0-98737C7F49A2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112410","Name":"Export Goods to SEZ Unit With Price Inclusive of Tax through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9CF523A9-24DB-4928-A3CB-8DC5FCA4AF69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112411","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{6621F516-24B5-47CC-AB8B-6EF51F2616E3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112412","Name":"GST Deemed Exports of goods through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{759DC0B3-0697-4262-B0B6-12AA4A6E3822}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112413","Name":"Export Goods to Deemed Export Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{AA3E77B0-A08A-4756-90E5-F6561C7D4B9B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112414","Name":"Export and Goods to Foreign Customer Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{BAEC40C3-3C56-4B4F-95C9-ED6E1E39A019}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112415","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B618D919-C2A5-4BB8-B7EF-13784A51A6D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112416","Name":"Export Goods to SEZ Development Without Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{34D0EE0E-FC73-416C-A59C-484107E36965}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112417","Name":"Intra State Sales of Goods from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{74601C3A-21C1-4924-950E-039ADD6086E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112418","Name":"Inter State Sales of Goods from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{E06B429C-0CDD-4F49-9C4D-8546151805AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112419","Name":"Intra State Sales of Goods from Registered Customer through Sales Order/Invoice - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{888E76DA-FA62-4714-83A3-76777E325D84}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112420","Name":"Inter State Sales of Goods from Registered Customer through Sales Order/Invoice - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{277B1053-C551-4BF4-9518-7BFE200A8E18}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112421","Name":"Export Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice with Shipment locally as Intrastate.","NodeType":"Use Case","TableID":37,"CaseID":"{9F7A9C0A-BC4A-45C2-B79B-7D22EDB6ABBB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112422","Name":"Export Goods to Foreign Customer With Payment of Duty through Sales Order/Invoice with Shipment locally as Interstate.","NodeType":"Use Case","TableID":37,"CaseID":"{F69C2334-D38A-4CC1-B701-D7DC4C3B7CA9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112423","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice - Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{13217522-8F07-4C15-9787-8B1840E8CC40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112424","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{FA8E63F5-19A9-4940-AD59-DB7067BE069A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112450","Name":"End Type - Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112500","Name":"Type - Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112501","Name":"Intra State Sales of Resource from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{D1629C9B-AA5B-4237-94CE-5B14BAF756C0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112502","Name":"Intra State Sales of Resource from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{9B0FE6DB-6121-44B0-8BD0-08B8060D7A92}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112503","Name":"Inter State Sales of Resource from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{D95F6D4E-EEF5-41B7-8284-694BCBDFEABD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112504","Name":"Export Resource to Foreign Customer With Payment of Duty through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{60F5C368-9B10-45CB-BB1B-63DEF7520AB6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112505","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{77D07467-2180-4712-814A-A6292F8D5E59}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112506","Name":"GST Deemed Exports for Resource through Sales Order/ Invoice\n","NodeType":"Use Case","TableID":37,"CaseID":"{BE8902D9-72AA-41C9-BACE-1B781D7C8107}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112507","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{96B76AC2-66FF-4457-9DE3-3F2A3213C3E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112508","Name":"Inter State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{B2047EB4-AD5D-4E8B-BFFC-94FB1C4EED34}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112509","Name":"Inter State Sales of Resources from Registered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{C8652C10-76BA-489E-985D-CFFC24D6276B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112510","Name":"Inter State Sales of Resource from Registered/Unregistered Customer through Sales Quote","NodeType":"Use Case","TableID":37,"CaseID":"{149E867B-BE67-4BA4-AE3B-36C10F7552F5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112511","Name":"Inter State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{6F89240D-BBA1-4BB9-85B6-0BE2154EE0B8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112512","Name":"Intra state Sales of Resources from Exempted Customer through Sales Quote/ Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{A1895816-94BF-4F67-819E-D3898920FAF5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112513","Name":"Intra State Calculation of GST on Resource to SEZ Unit / Development Without Payment of Duty through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{969F9BE2-D2C0-4DB5-BD38-F9DAC8AB8173}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112514","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{882CB936-42D9-4C2D-BFD9-028D5F5D3337}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112515","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{4B114178-6589-41CD-907E-8C46CCDFE895}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112516","Name":"Inter State Calculation of GST on Resource to SEZ Unit / Development Without Payment of Duty through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{E28ED0E6-8917-4D81-AD22-29D13FE94091}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112517","Name":"Inter State Calculation of GST on Resource to SEZ Unit / Development through Sales Order/ Invoice-Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{E9ED8CB8-E0BD-4E8A-88A5-1AA7348ACF20}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112518","Name":"GST Deemed Exports for Resource Without Payment of Duty through Sales Order/ Invoice","NodeType":"Use Case","TableID":37,"CaseID":"{E65CE6AA-C447-466E-A3FE-154D3F5A76DC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112519","Name":"Inter State Sales of Resource from UnRegistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{DF167294-5878-44C6-9220-01D93BEA09FF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112520","Name":"Inter State Sales of Resource from Unregistered Customer through Sales Order/Invoice without FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{C8BA6CA4-7E8C-4053-980D-451FE32D8EFA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112550","Name":"End Type - Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112600","Name":"End -Not Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112601","Name":"Begin FOC","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18157=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112602","Name":"Begin Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112603","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112604","Name":"Intra State Sales for Goods from Registered Customer through Sales Order/Invoice With FOC","NodeType":"Use Case","TableID":37,"CaseID":"{6333F9D2-02B8-4FF1-88EE-386041B7FCA4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112605","Name":"Inter State Sales of Goods from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{C69C8C2B-3445-476C-80ED-776EC67B06D3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112609","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112610","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112611","Name":"Intra State Sales of Goods from Unregistered Customer through Sales Order/Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{A4B4B64C-1D4C-48EE-88E9-4BBC4F05EAE8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112612","Name":"Inter State Sales of Goods from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{E786A7D6-1147-46F6-BB75-1223AAC92007}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112616","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112617","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112618","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{BB38433A-2AE4-492D-8380-D8B5A6F80135}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112619","Name":"Export Goods to SEZ Unit With Payment of Duty through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{F0E83015-3886-4263-A0B7-A97BA3B7753C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112623","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112624","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112625","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice - Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{BE591554-5098-41FD-A200-5B5B48C19083}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112626","Name":"Export Goods to SEZ Development With Payment of Duty through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{CF0F6DEA-A530-45B3-8B1B-CF86879E9EDA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112630","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112631","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112632","Name":"Intra State Sales for Deemed Export Customer for Goods through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{ADF93FBF-84BB-4DC9-8B87-EADDE08829F0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112633","Name":"GST Deemed Exports of goods through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{4116F9D4-1957-46D1-BCED-580BD21C0908}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112634","Name":"Intra State Sales for Goods for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{17DA0FC6-FC3F-4AB5-A2C7-34D00B649941}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112635","Name":"GST Deemed Exports for Goods With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{44130B2E-FBA8-47DE-BF1F-AF9145AC13BD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112637","Name":"EndGST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112638","Name":"End Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112639","Name":"Begin Type- G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112640","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112641","Name":"Intra State Sales of Services from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{03D7D334-04D2-4EC5-AE88-A67C1409C8BE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112642","Name":"Inter State Sales of Services from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{08EACBE7-7B68-4B7B-8BCE-8D5D4FAD80F0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112647","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112648","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112649","Name":"Intra State Sales of Services from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{8D8429D6-2B1A-4081-900E-9D19C312335E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112650","Name":"Inter State Sales of Services from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{EA505D2C-22A0-4B4B-B20F-18A0E1AE2C02}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112653","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112654","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112655","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice -Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{81345EC6-231D-4274-95D2-302FFE85B903}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112656","Name":"Export Services to SEZ Unit With Payment of Duty through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{FD5FD103-5251-4063-92C9-CCFE016B971B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112661","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112662","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112663","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice -Post GST to Customer For FOC","NodeType":"Use Case","TableID":37,"CaseID":"{6807FDAC-8BCB-4B1A-84FF-882C6A9C15B7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112664","Name":"Export Services to SEZ Development With Payment of Duty through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{0561985A-B2F9-4C9C-BE39-7D6AE423104E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112669","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112670","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112671","Name":"Intra State Sales for Deemed Export Customer for Services through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{3C1D2A94-CBAE-4190-BE50-AD56CF9218D9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112672","Name":"GST Deemed Exports of Services through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{05CEE5AD-FF50-479C-922C-1C51FE10F724}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112673","Name":"Intra State Sales for Services for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{741172E2-8B2D-461D-9081-71145F1316DF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112674","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112675","Name":"End Type- G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112676","Name":"Begin Type Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112677","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112678","Name":"Intra State Sales of Resource from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{9E8F612A-6306-4CD0-AA63-8F443733B9B5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112679","Name":"Inter State Sales of Resource from Registered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{E8ACBB6B-EAAF-46C6-A4EA-EFB502D8E110}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112684","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112685","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112686","Name":"Intra State Sales of Resource from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{DC79D469-98CD-45FF-ADBB-27DFF74D2672}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112687","Name":"Inter State Sales of Resource from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{13827C55-0612-40EF-BED1-62D7605B9D68}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112692","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112693","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112694","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{747B1A95-DF79-4286-A38B-A6F98F2D2DE1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112695","Name":"Intra State Calculation of GST on Resource to SEZ Unit through Sales Order/ Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{5582B9B9-2C0C-4036-A0E1-ED20495D47AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112701","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112702","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112703","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{8B4B45EC-5B92-4383-935B-DE2E70579CA8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112704","Name":"Intra State Calculation of GST on Resource to SEZ Development through Sales Order/ Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{51CD0A49-E8DF-42A3-9180-84D1A7076A42}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112710","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112711","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112712","Name":"Intra State Sales for Deemed Export Customer for Resource through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{103E8A37-530C-4FFF-BB01-D298E7DF9FFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112713","Name":"GST Deemed Exports for Resource through Sales Order/ Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{F356E0FE-23C7-4D81-A149-3659F2CEFBB4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112714","Name":"Intra State Sales for Resource for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{29C6FB1D-F01C-426F-AC3E-76E9122FDB69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112715","Name":"GST Deemed Exports for Resource With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{97120CFC-A3A4-4545-8A71-881473ED33C7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112720","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112750","Name":"End Type Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112751","Name":"Begin Type- Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112752","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112753","Name":"Intra State Sales of Fixed Asset from Registered Customer through Sales Order/Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{CF89D22F-0CD8-4E3C-A01C-6C159E03E5E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112754","Name":"Inter State Sales of Fixed Asset from Registered Customer through Sales Quote/Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{5860DC76-AE27-4A12-808D-667172BEF336}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112760","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112761","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112762","Name":"Intra State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{84992760-0362-488C-8D49-0DE8065F945C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112763","Name":"Inter State Sales of Fixed Asset from Unregistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{FBBCEAFB-3B22-4D36-969E-84AB2CDC7859}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112769","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112770","Name":"Begin GST Customer Type SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112771","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice - Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{FC888469-0E29-48BA-B417-07D5943D7C45}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112772","Name":"Export Fixed Asset to SEZ Unit With Payment of Duty through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{307349C1-C724-4CB8-8878-7587CC2617EC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112778","Name":"End GST Customer Type SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112779","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112780","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice -Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{A8B33288-CA54-4DC6-B3E4-A14E3CCA4EFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112781","Name":"Export Fixed Asset to SEZ Development With Payment of Duty through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{DA8695B6-D7D7-41E9-BE59-C26A19D03C2C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112789","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112790","Name":"Begin GST Customer Type - Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112791","Name":"Intra State Sales for Deemed Export Customer for Fixed Assets through Sales Order/Invoice For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{02A9B37F-66A8-446A-B5B0-703D594FF934}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112792","Name":"GST Deemed Exports of Fixed Asset through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{7E2F85F6-FFBA-45FE-80B5-39B654365ACD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112793","Name":"Intra State Sales for Resource for Deemed Export Customer through Sales Order/Invoice-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{29C6FB1D-F01C-426F-AC3E-76E9122FDB69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112794","Name":"GST Deemed Exports for Fixed Asset With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{23F3D552-5B8B-47A9-B217-903567666BCE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112800","Name":"End GST Customer Type - Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112820","Name":"End Type- Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112821","Name":"Begin Type G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112822","Name":"Begin GST Customer Type Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112823","Name":"GST Deemed Exports for Services With Payment of Duty through Sales Order/Invoice-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{53D88A93-5CE2-427C-81F0-6DCFC36F579F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112826","Name":"End GST Customer Type Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112827","Name":"End Type G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112840","Name":"End FOC","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112845","Name":"End Sales Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112848","Name":"Sales Return Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(5|3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112849","Name":"Not Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112850","Name":"Type - G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112851","Name":"Intra-State Sales Return of Services to Overseas Place of Supply to Registered Customer Through Sales Return","NodeType":"Use Case","TableID":37,"CaseID":"{44F4B3DF-4625-4E8F-9BE3-53C61B67463B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112852","Name":"Intra State Sales Return of Services from Registered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{BC238FA9-CAD7-43AB-8E7E-D6FFC7035EE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112853","Name":"Inter State Sales Return of Services from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{693D346E-069E-4306-9F7C-84665CD42141}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112854","Name":"Inter State Sales Return of Services from Registered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{80BC1B3E-DB26-4E90-B780-43C8BA593655}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112855","Name":"Intra State Sales Return of Services from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{8A18FA5B-AD17-43D3-8981-5BB20A04EFA2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112856","Name":"Intra State Sales Return of Services from Registered Customer through Return Order - POS","NodeType":"Use Case","TableID":37,"CaseID":"{1FF813B4-1776-4717-8C56-8F0E684ACE73}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112857","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{DB44587F-08FB-4D5F-96A3-6CD4D4E30300}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112858","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{895C47DF-89E2-4A14-9329-5E260C1DBF05}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112859","Name":"Export Return of Services to SEZ Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{81E2ACA0-D6DD-4B4A-ADEF-60B602660F25}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112860","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{1DE560C5-73C9-4476-9447-80FC42CD492C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112861","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo - POst GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{8139E94E-D43E-4C24-B6B3-C59F55737321}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112862","Name":"Export Return of Goods to Export Customer for item Type GL Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{4738101C-19E3-418C-A19D-61E67100D199}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112890","Name":"End - Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112895","Name":"Type - Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112896","Name":"Intra State Sales Return of Goods from Registered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{26581492-A8D9-41EB-B84E-40671AE8CC3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112897","Name":"Inter State Sales Return of Goods from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{77DC6AF2-5D31-4450-8F78-E2F7383B9EAB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112898","Name":"Intra State Sales Return of Goods from Unregistered Customer through Return Order.","NodeType":"Use Case","TableID":37,"CaseID":"{08F3F188-43F5-441F-AB95-BE332651AD3D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112899","Name":"Inter State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{2167C0D3-971D-481A-86BA-F45FB92025FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112900","Name":"Intra State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{293882EE-DEB8-47A9-BAF1-9221422B247A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112901","Name":"Inter State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo - Price Including of Tax","NodeType":"Use Case","TableID":37,"CaseID":"{77D351AF-2B06-49FB-B72A-CF9980E31A43}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112902","Name":"Export Return of Goods to SEZ Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{BCB4C9B2-E212-4971-BE8C-914BC1DAAB1B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112903","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{17ED9604-C26D-496C-B2F4-9124166CF719}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112904","Name":"Export Return of Goods to SEZ Unit Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{A8ED1A73-743C-4D08-98E3-6D85C416E951}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112905","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{06F95F30-2C34-4CD2-9084-0B9101B9455D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112906","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{A744EF89-44A8-4CE0-81F8-3D8094623CD1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112907","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{8153E2CA-FD9A-4A9F-A0E4-A657636F83DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112908","Name":"Export Return of Goods to Export Customer Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{E607F91D-D6E7-459A-801A-CBB9C7F8CE89}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-112950","Name":"End - Type - Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113000","Name":"Type - Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113001","Name":"Intra-State Sales Return of Resources from Unregistered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{8F88FDD0-561E-4FEA-A663-4F4BAEC9D009}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113002","Name":"Inter State Sales Return of Resources from Unregistered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{C9854015-8E55-43F1-A5F2-747FC1CF6A0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113003","Name":"Inter State Sales Return of Resources from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{52BFB82F-A54A-4E62-9DC3-2D608D6373B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113004","Name":"Intra-State Sales Return of Resources from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{6856A59C-FE7F-4DDA-B180-391F6E0D0A5F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113005","Name":"Export Return of Resource to Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{AD7D62C2-213F-4288-9506-BE3D205DBB95}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113006","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{FD76EB64-C01A-48C0-9F8E-3EE2E17BE515}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113007","Name":"Export Return of Resources to SEZ Unit / Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{D500E259-42B6-4346-BA2F-D76ECB9AFEE1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113008","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{E62B6029-1BFA-456D-8D43-306AB7C78589}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113105","Name":"End - Type - Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113106","Name":"Type- Charge Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113107","Name":"Intra State Sales Return of Charge Item from Un-Registered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{41F1CFC3-B9F5-464D-9B6D-2C7B6C83186C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113108","Name":"Inter State Return of Charge Item from Unregistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{B3036F44-2238-4DC9-B250-70AA3FEC7821}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113109","Name":"Intra State Sales Return of Charge Item from Registered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{3835C90E-1BDF-4C46-B50E-C5375ED24ED4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113110","Name":"Inter State Sales Return of Charge Item from Registered Customer through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{DBE9B77E-9171-4F5C-A7CA-9156126D34FC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113111","Name":"Export Return of Goods to Export Customer for item Type Charge Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{D8792403-FBC9-455C-8A3A-C67DAFDB6E53}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113112","Name":"Export Return of Charge-Item to SEZ Unit / Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{609F72CC-C49F-43F1-AB52-E56ED173368B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113113","Name":"Export Return of Charge-Item to SEZ Unit / Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{7F8B0021-4099-48C9-80BB-D977917CEA9E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113114","Name":"Export Return of Charge-Item to SEZ Unit / Development With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{57A0B7F8-E6C5-4CC4-89AD-11A14AF3C68B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113125","Name":"End Type- Charge Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113140","Name":"Type- Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113141","Name":"Intra State Sales Return of Fixed Asset from Unregistered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{884574EB-3354-459C-AF96-6EB624CCEFFE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113142","Name":"Intra State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{F7C5C8B6-2EB3-478E-AE6B-66BEEB6A3861}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113143","Name":"Inter State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{C915C6D6-9C5D-4C2F-BAB6-50E13850581E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113144","Name":"Inter State Sales Return of Fixed Asset from UnRegistered Customer through Sales Order/Invoice.","NodeType":"Use Case","TableID":37,"CaseID":"{7627B9EF-CB23-4EAB-88D9-3D894B6F6607}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113145","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{24F69259-FD27-49A7-B5E8-3CBF5351132F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113146","Name":"Export Return of Fixed Asset to SEZ Unit Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{200C22B1-5DC0-4A80-B377-B14F9613D061}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113147","Name":"Export Return of Fixed Asset to SEZ Development Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{E35E188E-728D-42BE-94F0-4B0476315B0B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113148","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo - Post GST To Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{7D7F45D3-E214-47D5-8CD5-ED31E8F4092F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113149","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{1DD8BB1A-1AA9-4B82-9F6A-80F26AA8675D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113150","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{C6AFDFC6-874B-4B14-BCC9-8FC5B4992157}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113151","Name":"Export Return of Goods to Export Customer for item Type FA Without Payment of Duty through Sales Return Order/Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{AA85EF19-5F94-438E-ADC4-A9ACF0DCB0C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113160","Name":"End Type-Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113161","Name":"Begin No. Not Blank","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field6=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113162","Name":"Export Return of Services to Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{BB48AD27-2942-4C4A-B19C-4A7E76E181DA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113163","Name":"Export to SEZ/ SEZ Development /Deemed Export With Payment of Duty through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{D22C3484-E0DE-473F-9D62-2BB1DD4B10B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113164","Name":"Export to SEZ/ SEZ Development /Deemed Export Without Payment of Duty through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{2FF34432-5A9D-4C71-AF8B-6DDDC92F0A85}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113165","Name":"Export Return to Deemed Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{C502F69B-F76D-4D72-B7FC-A272A252590B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113166","Name":"Export Return to Deemed Export Customer Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{7BE46E73-EF21-4766-B4F2-34558460A2C9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113167","Name":"Deemed Export With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer.","NodeType":"Use Case","TableID":37,"CaseID":"{2F7B1F64-56F5-48C9-A6B2-A5F7F2BF8A2F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113168","Name":"Intra-State Sales Return to Deemed Export Customer With Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{5FB236FB-7619-48A1-92D0-BD12F5C8A5C0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113169","Name":"Intra-State Sales Return to Deemed Export Customer Without Payment of Duty through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{A030C0C9-951C-4818-8A68-C6D5917C31BF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113170","Name":"Intra-State Sales Return to Deemed Export Customer With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer","NodeType":"Use Case","TableID":37,"CaseID":"{0BD7BB2E-38E6-4254-82CB-713F429D787C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113180","Name":"End No. Not Blank","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113205","Name":"End - Not Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113305","Name":"Exempted","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18147=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113306","Name":"Intra state Sales Return of Exempted Resources from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{99E193A6-6A7C-4035-BCC1-F2BC49DC4F86}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113307","Name":"Inter State Sales Return of Exempted from Registered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{A485DD0E-AB08-49E5-9C7C-1FCA3398AE3F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113308","Name":"Inter State Sales Return of Exempted Resources from Unregistered Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{A49C7425-A602-4445-873D-BCA89D3C2330}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113309","Name":"Export to SEZ/ SEZ Development /Deemed Export With Payment of Duty through Sales Return Order/ Credit Memo - Exempted","NodeType":"Use Case","TableID":37,"CaseID":"{D187D562-E011-4879-839D-A3CB824D11EC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113310","Name":"Intra state Sales Return of Exempted Item from Registered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{1A135F44-7A65-49A6-A08A-C87D453E5837}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113350","Name":"Intra state Sales Return of Exempted Resources from Unregistered Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{C2730DF7-9769-4732-819E-C39124E5E3F8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113351","Name":"End -Exempted","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113380","Name":"Begin Type Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113381","Name":"Intra state Sales Return of Exempted Goods from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{DA8B91D0-1B63-44EE-BA57-0A40B1403080}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113382","Name":"Inter State Sales Return of Exempted Goods from Exempted Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{246B0F60-6CA4-42A1-ACDD-30C38C89D2C4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113400","Name":"Begin Type Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113401","Name":"Begin Type G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113402","Name":"Intra state Sales Return of Exempted Services from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{D2A96240-2F58-406C-8774-03CD60C28E5D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113403","Name":"Inter State Sales Return of Exempted Services from Exempted Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{E9E7486C-DBFB-432C-886F-017AD828CE5E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113420","Name":"End Type - G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113421","Name":"Begin Type - Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113422","Name":"Intra state Sales Return of Resource from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{10E9D621-B3A8-49E2-BAA1-EB7D535C0712}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113430","Name":"End Type - Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113431","Name":"Begin Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113432","Name":"Inter State Exempted Sales Return of Fixed Assets from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{2D2466D5-E651-49FE-A00C-9DE16690874C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113433","Name":"Intra state Sales Return of Exempted Fixed Asset from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{1C2FBFBD-A18B-4A5D-819E-043993E5510C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113440","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113441","Name":"Begin Type - Charge Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113442","Name":"Inter State Sales Return of Exempted Charge Item from Exempted Customer through Sales Return Order/ Credit Memo","NodeType":"Use Case","TableID":37,"CaseID":"{0410BC8A-0231-4947-8ED6-982A68846120}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113443","Name":"Intra state Sales Return of Exempted Charge Item from Exempted Customer through Sales Return Order/Credit Memo.","NodeType":"Use Case","TableID":37,"CaseID":"{3277542B-B49C-4CCD-B661-F72C71CED698}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113445","Name":"End Type - Charge Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113449","Name":"Begin FOC","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18157=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113450","Name":"Begin Type Item","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113451","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113452","Name":"Intra State Sales Return of Goods from Registered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{14FC3D2C-3DAF-4C04-AA69-6AE47D0D7552}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113453","Name":"Inter State Sales Return of Goods from Registered Customer through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{A4A8C87F-D458-4DD2-B8E9-8393220FDD2D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113459","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113460","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113461","Name":"Intra State Sales Return of Goods from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{10CA76A8-8DE4-419A-8220-3DD88D8F8747}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113462","Name":"Inter State Sales Return of Goods from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{92CD1D91-1D76-46D8-B2E1-C62C54E62191}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113469","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113470","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113471","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{31F4991C-5E91-4AF3-B911-39F985BF48C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113472","Name":"Export Return of Goods to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{C3755AFF-81D3-4B1A-85B2-B2C8A60F9EAA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113479","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113480","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113481","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo -Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{8E881E89-87C1-4745-9529-B82A784E83BE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113482","Name":"Export Return of Goods to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{270F6442-0097-437D-9F91-5C15BD9EAB4D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113489","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113490","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113491","Name":"Intra-State Sales Return to Deemed Export Customer for Goods With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{913AAE94-3AEF-4F6D-80DB-F30FF5E5C067}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113492","Name":"Deemed Export for Goods With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{14586EFF-720D-4670-B023-EA4FBFF96B99}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113493","Name":"Intra-State Sales Return to Deemed Export Customer for Goods With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{9654C77E-D850-4AA2-9A47-FB003B1574B2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113494","Name":"Export Return to Deemed Export Customer With Payment of Duty for Goods through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{88F1A4B3-DCAC-499A-BD7A-A5EBA3EF3CB4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113499","Name":"EndGST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113500","Name":"End Type Item","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113501","Name":"Begin Type- G/L Account","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113502","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113503","Name":"Intra State Sales Return of Services from Registered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{59157E34-743F-4293-A662-1A9C3D916178}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113504","Name":"Inter State Sales Return of Services from Registered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{D9AA8D5E-8135-47AA-A722-6356873CF5EF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113507","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113508","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113509","Name":"Intra State Sales Return of Services from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{B8757B78-D36C-4AB7-B532-353006120046}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113510","Name":"Inter State Sales Return of Services from Unregistered Customer through Return Order for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{EFB5634E-C341-4922-9BC9-1CE76AD61D79}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113512","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113513","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113514","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo - POst GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{3397DBB8-098B-4A52-9BFA-E24A12B5F9E7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113515","Name":"Export Return of Services to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{0E655E71-19D9-4A10-8A28-FE4AFBA2A7C7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113517","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113518","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113519","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{DBA2CAA4-8EE2-4DD0-B413-383101DB034E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113520","Name":"Export Return of Services to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{ABF997C4-D467-4F97-94CD-10AFE3A66B3A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113523","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113524","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113525","Name":"Intra-State Sales Return to Deemed Export Customer for Services With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{6CC7879A-5AF1-4FD6-8713-7ECF54ABC412}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113526","Name":"Deemed Export for Services With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{861E4175-2832-49D7-8AF3-96E6C19F8E68}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113527","Name":"Intra-State Sales Return to Deemed Export Customer for Services With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{6924DAF8-60F6-4C42-9266-200033C6D3F4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113528","Name":"Export Return to Deemed Export Customer With Payment of Duty for Service through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{1F11A81C-0551-4B07-AA30-23DA57E0FE16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113535","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113536","Name":"End Type- G/L Account","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113537","Name":"Begin Type- Resource","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113538","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113539","Name":"Intra-State Sales Return of Resources from Registered Customer through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{D6D5AACF-3FC9-4E46-AC66-66CB29D5293E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113540","Name":"Inter State Sales Return of Resources from Registered Customer through Sales Return Order/ Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{A0D756A0-DC72-49F9-A1F9-B926242C6AD2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113543","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113544","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113545","Name":"Intra-State Sales Return of Resources from Unregistered Customer through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{5131A9E4-A281-496F-9AF2-E60DC7D88A50}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113546","Name":"Inter State Sales Return of Resources from Unregistered Customer through Sales Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{40C0504C-93D7-4EC1-A4B8-7FE82C224BE4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113549","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113550","Name":"Begin GST Customer Type- SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113551","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{1F48109A-8444-4862-B9DA-190182B3FBAC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113552","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{F4C6236C-3805-4826-88FD-EAC2659389B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113557","Name":"End GST Customer Type- SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113558","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113559","Name":"Export Return of Resource to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{6C740BB7-2090-4E02-8611-2FD65CC51465}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113564","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113565","Name":"Begin GST Customer Type- Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113566","Name":"Intra-State Sales Return to Deemed Export Customer for Resource With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{858CA47F-FA82-4485-91A5-12B2EBF36D6F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113567","Name":"Deemed Export for Resource With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{220890E5-A6C0-4719-83C5-E2247EF9BEC3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113568","Name":"Intra-State Sales Return to Deemed Export Customer for Resource With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{11D160CF-FD98-4C47-928B-9F4125F584A9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113569","Name":"Export Return to Deemed Export Customer With Payment of Duty for Resource through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{EBFDB89B-5F22-4386-87CA-72157CBF122D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113574","Name":"End GST Customer Type- Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113575","Name":"End Type- Resource","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113576","Name":"Begin Type - Fixed Asset","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113577","Name":"Begin GST Customer Type- Registered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113578","Name":"Intra State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{291465B9-0C22-48B5-9EEA-4006CC372B1A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113579","Name":"Inter State Sales Return of Fixed Asset from Registered Customer through Sales Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{BFB628D6-4413-4628-B619-013EF3255CE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113583","Name":"End GST Customer Type- Registered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113584","Name":"Begin GST Customer Type- Unregistered","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113585","Name":"Intra State Sales Return of Fixed Asset from Unregistered Customer through Sales Return Order/ Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{7AFF7259-D09B-4C62-8575-34BEDEE4A72C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113586","Name":"Inter State Sales Return of Fixed Asset from UnRegistered Customer through Sales Order/Invoice for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{3EAEA83A-B986-4C1E-9231-EDEAC919DE2F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113590","Name":"End GST Customer Type- Unregistered","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113591","Name":"Begin GST Customer Type SEZ Unit","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113592","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo- Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{0DD3F665-8D52-487D-A200-9BD69DB0A4A2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113593","Name":"Export Return of Fixed Asset to SEZ Unit With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{10BBEEB9-E622-4899-B4E0-C000CA753E54}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113597","Name":"End GST Customer Type SEZ Unit","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113598","Name":"Begin GST Customer Type- SEZ Development","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113599","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo - Post GST To Customer For FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{3AD6DDBC-A132-4ABA-B216-73133B85604A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113600","Name":"Export Return of Fixed Asset to SEZ Development With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{902158A0-97D5-4075-943E-3B30B800FB78}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113608","Name":"End GST Customer Type- SEZ Development","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113609","Name":"Begin GST Customer Type - Deemed Export","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18158=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113610","Name":"Intra-State Sales Return to Deemed Export Customer for Fixed Asset With Payment of Duty through Sales Return Order/Credit Memo-Post GST to Customer for FOC","NodeType":"Use Case","TableID":37,"CaseID":"{5629EBAA-46B2-4DD7-9511-1D6E697A6B0A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113611","Name":"Deemed Export for Fixed Asset With Payment of Duty through Sales Return Order/ Credit Memo-Post GST to Customer for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{4BFA98D3-CEF3-4573-B464-9E897EB9D4AE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113612","Name":"Intra-State Sales Return to Deemed Export Customer for Fixed Asset With Payment of Duty through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{B3793372-9AD2-4F36-BA5C-3AF13BE44F2D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113613","Name":"Export Return to Deemed Export Customer With Payment of Duty for Fixed Asset through Sales Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":37,"CaseID":"{321E0F7B-A15D-4CE6-9C11-BF3FD3DEE918}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113620","Name":"End GST Customer Type - Deemed Export","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113630","Name":"End Type - Fixed Asset","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113635","Name":"End FOC","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-113639","Name":"End- Sales Return Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114640","Name":"End Sales","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114645","Name":"Purchase","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field7=1(<>''),Field18080=1(<>''),Field18096=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114650","Name":"Purchase Document","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2|4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114660","Name":"GST Reverse Charge -No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18085=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114670","Name":"Exempted","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114672","Name":"Intra State Purchase of Service from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{536EFB4F-1EBC-4731-861E-433F3BA23A4A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114673","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{93FE03BD-63C7-44B5-B40D-5974C8300527}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114800","Name":"End Exempted","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114850","Name":"Exempted No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114851","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{01C97F7D-4263-4387-84E1-610D2EA4A762}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114853","Name":"Intra State Purchase of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Quote/Order/Invoice.","NodeType":"Use Case","TableID":39,"CaseID":"{78A245B3-3BAB-4347-B09A-FDE73A600BB2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114854","Name":"Inter State Purchase of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Quote/Order/Invoice.","NodeType":"Use Case","TableID":39,"CaseID":"{94FF400C-34A8-4760-A4E5-C4B367739FA3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114855","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{93FE03BD-63C7-44B5-B40D-5974C8300527}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114856","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{51395C06-549D-40B5-98C5-A7F6B73AF427}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114857","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{131AC7D7-6079-4C25-A3A6-CEAC66A6203D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114858","Name":"Intra State Purchase of G/L Account from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{D7A29410-A685-41B6-A8F9-268D65F062B6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114859","Name":"Inter State Purchase of G/L Account from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{4DC1D2DC-A8F8-4443-A563-348B8E8961C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114860","Name":"Inter-State Purchase of Charge Item from Sez Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{85DAE7D1-95AC-4FD1-B1E0-5FFD980481BF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114861","Name":"Inter State Purchase of Charge Item from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{0E1A782B-CF1F-4CF0-8797-A1310519B1DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-114862","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{3E14881B-DB97-473E-9A0B-C8A0A2D604C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115000","Name":"End Exempted No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115100","Name":"End GST Reverse Charge -No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115150","Name":"GST Reverse Charge","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18085=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115151","Name":"Exempted No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115152","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice Type-Debit Note","NodeType":"Use Case","TableID":39,"CaseID":"{2AB850AD-528A-498A-9E23-65E396AC61A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115153","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice Type-Debit Note","NodeType":"Use Case","TableID":39,"CaseID":"{B064E1CD-DB51-456E-AE19-7F2AC8C9DC11}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115154","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{89071509-BF13-4ED5-A45D-8D938DFEF265}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115200","Name":"End Exempted No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115201","Name":"Exempted Yes","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115202","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice for Exempted Goods","NodeType":"Use Case","TableID":39,"CaseID":"{700CF31E-E4A1-4183-AEF6-7C572C34C8AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115203","Name":"Inter State Purchase of Exempted Goods for Import Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{DF5E22A4-BD3C-4C80-B6D3-9F667C8037DD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115205","Name":"End Exempted Yes","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115250","Name":"GST Credit-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115300","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115301","Name":"Import of Services from Foreign Vendor where Input Tax Credit is Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{118F40D5-2D0E-45D6-B458-52D6BF00A035}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115302","Name":"Import of Services from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{8D8A9485-D248-4B9B-AB8C-EEDB746B190C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115350","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115351","Name":"Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115352","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{20913086-F0CD-4AC8-AF0A-755723E44946}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115353","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{71EC1D59-01EC-4486-8CB4-0957D4ADF38B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115354","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice - For GST Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{D279BE29-1CB8-4F96-BA2C-0348368D0879}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115400","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115401","Name":"Begin Type Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115402","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FB4C68ED-BD93-4229-B1BB-91163250C066}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115403","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote With Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{9154D0D0-5D85-40BE-889D-764E65F8691C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115404","Name":"Import of Service from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice for Charge (Item)","NodeType":"Use Case","TableID":39,"CaseID":"{B8A8C947-5BA0-45B4-B8A4-33088F25782F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115415","Name":"End Type Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115450","Name":"End GST Credit-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115451","Name":"GST Credit-Non Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115452","Name":"Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115453","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Not Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{AE939960-28B0-426C-B5D7-D8535B9AE3C9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115454","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Not Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{27255CC6-70FC-4D33-91F1-5B83F03CE33E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115500","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115501","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115502","Name":"Import of Services from Foreign Vendor where Input Tax Credit is not available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{9167AE32-6B66-48FB-AF03-35D261A7C5BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115503","Name":"Import of Services without Input Tax Credit available from Foreign Vendor.","NodeType":"Use Case","TableID":39,"CaseID":"{F1AFD035-5F0A-4DD2-B15E-E0EEF0BA43D7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115506","Name":"Import of Services from Foreign Vendor where Input Tax Credit is not available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{387B69F6-70EC-4BCC-A4C0-AA1CFAB0D356}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115507","Name":"Inter-State Purchase of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{62A4192A-86D8-4431-A641-78EF2F348546}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115550","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115551","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115552","Name":"Intra-State Purchase of Resource from Registered Vendor where Input Tax Credit Not Available - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{A0CED092-3AAD-4121-A5A2-F4DEAC316621}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115553","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{FED218A8-8C3F-43D9-BBD5-E8BCBB30D8BD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115554","Name":"Inter-State Purchase of Resource from UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{C340D02B-697D-414F-9082-E4CC9B4B2A3B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115555","Name":"Intra-State Purchase of Resource from Unregistered Vendor where Input Tax Credit Not Available - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{0EE4D825-CC7B-458D-9165-D32635F56F41}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115556","Name":"Intra-State Purchase of Resource From UnRegistered Vendor where Input Tax Credit Not Available through Purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{38BC1AAB-3066-483F-811E-E147662D48C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115580","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115581","Name":"Begin Type-Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115582","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{1C3087C6-66E1-4D66-8133-DF7F13FDB0D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115583","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C7BA99E0-7A62-41C9-93C4-36BDAD52C328}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115584","Name":"Import of Charge from Foreign Vendor where Input Tax Credit is Not Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{BFCC5C7F-F391-44D5-84F1-1D72DC7A9DEC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115595","Name":"End Type-Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115649","Name":"End GST Credit-Non Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115650","Name":"End GST Reverse Charge","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115651","Name":"Extempted -No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115652","Name":"GST Credit-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115653","Name":"Type-Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115654","Name":"Import of goods with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{4D6EF305-AE45-4735-9E9A-C9428D139D38}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115655","Name":"Import of goods with Input Tax Credit available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{24E498DD-9DFB-4097-9F32-C8EBD49B8D22}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115656","Name":"ISD - Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{E8B90257-9F0D-42F4-A340-13A648D11829}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115657","Name":"ISD - Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{874048A6-575B-456F-A2E7-26532DA3F1CA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115659","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{2C80FA78-CBBE-45E7-8C62-5010B692AC9C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115660","Name":"Inter-State Purchase of Goods from UnRegistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{FF5D43D6-C93E-42D5-9CD3-E3FCA99E77DD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115661","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{94D31994-F430-4825-A72E-D41F51F63952}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115662","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{53AA1183-8DEC-4542-A708-317C5CD7BDA9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115663","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available with Bill to Location(POS) through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{E75A7A67-D332-41BE-B7EA-61C8BF69E9F7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115664","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Bill to Location(POS) Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{1440B152-A710-4982-86C0-5C27FEF4A7D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115665","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{A8B3F6FB-A42D-4767-BD3D-D4C9BB11AEAA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115666","Name":"Inter-State Purchase of Goods from UnRegistered Vendor where Input Tax Credit is available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{B86AA24C-78CF-4F29-BD88-E17580D6992B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115667","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{7BDD3EE0-29AE-4C15-A879-1DBF13ADA019}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115668","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{9FE211A9-770A-4396-BE84-B9625D975180}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115669","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{B7A4D05E-75C4-47F5-B502-9510B13E2DEA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115700","Name":"End Type-Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115701","Name":"Type-GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115702","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is Available.","NodeType":"Use Case","TableID":39,"CaseID":"{BACBB54A-0D30-4206-AA6A-5CF48A744D5E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115703","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{9568C93C-FC46-477D-B554-A8EACAEAF21A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115704","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{F85B9211-93F9-4443-9784-BE52C220CE24}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115705","Name":"ISD - Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote ","NodeType":"Use Case","TableID":39,"CaseID":"{EF5146EB-771F-4DCE-80E7-ACC0B606829F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115706","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{0027CF9D-DA15-43A2-83D4-5CD214E0278B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115707","Name":"ISD-Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{700AF8A2-1315-41BC-9FE9-E00FB826DC80}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115708","Name":"Inter-State Purchase of Services from Unregistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{8A057230-A2A9-4E59-8101-9A947A8D8B91}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115709","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FC1AEFDA-0537-4D94-A576-F542B6710B71}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115710","Name":"Inter-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{5F9FDC49-A99D-4F72-AA5F-4E0BF5B3AC34}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115711","Name":"Intra-State Purchase of Services from Unregistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{31C539BE-990C-4E00-AF1A-6BFA1333ED7E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115712","Name":"Import of Services with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{B03B25F1-806F-4CE3-86A2-A65BBE1F8360}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115713","Name":"Import of Services with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry and GST Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C2D132AB-4A23-47FC-9A25-EEB973689456}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115714","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{04BA2F8D-9562-4551-8A98-C61CE5509B47}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115715","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{19625BAB-02B9-42E1-80EF-FED88D13FF40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115750","Name":"End Type-GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115751","Name":"Type-Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115752","Name":"Import of Fixed Asset with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{E076372D-BFB5-4911-B6EE-85F1F71B1569}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115753","Name":"Import of Fixed Asset with Input Tax Credit available from Import Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{7E44665E-5E48-4F98-8E9A-135669D3E75B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115754","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{C02EF3F0-A659-4762-854B-830A8D59B371}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115755","Name":"Intra State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted (Availment) goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{4753502A-0359-4A8C-A37C-4DB4B6FCD790}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115756","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{4852FE50-F64A-454F-B43F-D46FE4BABECB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115757","Name":"Inter State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted goods(Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{7C939AC1-1919-4919-A0D0-B62E3C72B382}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115758","Name":"Intra State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted (Availment) goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{975372FC-F93D-4E8B-81EA-57B6751B9F94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115759","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted goods(Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{B69B4BDA-5CAC-4C9C-B4DB-211912D30EF2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115760","Name":"Inter-State Purchase of Fixed Asset from UnRegistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{F3E7CEF3-5437-42EC-9DED-FE81F994FFCB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115761","Name":"Intra-State Purchase of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{B83A838B-C0A8-4E69-B735-86D011229B1C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115762","Name":"Import of Fixed Asset with Input Tax Credit available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A7ED2E31-2CA7-4D60-A415-31A78736388D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115763","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available Bill to Location(POS) Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{8B96F1E1-FC2C-48FD-AD1E-62986961AC0D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115764","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available with Bill to Location(POS) through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{FCC8AA84-E16B-4D3F-A139-946089738FB0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115765","Name":"Inter-State Purchase of Fixed Asset from UnRegistered Vendor where Input Tax Credit is available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{E246F7FE-DE34-4E3C-BD3B-D8943D9B966C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115766","Name":"Intra-State Purchase of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{E365B9AF-953A-462B-A562-9B494D0B84B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115767","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted fixed asset with no GST Impact through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{DA3FC765-67AA-4232-8C30-6CE3E6E6DFDC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115768","Name":"Import of Goods with Fixed Asset from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{D9172942-78EB-4305-950C-C9DEC70F16E6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115769","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{F7997B96-631E-456D-9FA2-028ADEC745C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115770","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{5E2D969D-2A4B-4288-900B-7D1527F80A8E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115800","Name":"End Type-Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115801","Name":"Type-Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115802","Name":"Inter-State Purchase of Charge Item from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{21957E13-9751-40A2-B591-67ADE93573E7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115803","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{4F234B8B-1B95-4938-B3DF-3D96784EAC77}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115804","Name":"Inter-State Purchase of Charge Item from UnRegistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{AB0E6CA2-960E-4D6F-A7C6-D461F268627F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115805","Name":"Intra-State Purchase of Charge Item from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{72511E89-CA1E-4749-8648-F1EFD6F61D44}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115806","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available Bill to Location(POS) Through Purchase Invoice/Order/Quote","NodeType":"Use Case","TableID":39,"CaseID":"{0ABF122D-4ED5-4820-8411-7C39147B2819}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115807","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Available with Bill to Location(POS) through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{CD837506-8D55-4E71-8576-FA6B9934A6BB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115808","Name":"Inter-State Purchase of Charge Item from UnRegistered Vendor where Input Tax Credit is available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{1DD024D8-C5D0-44DC-BD2E-3B4A395F33FE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115809","Name":"Intra-State Purchase of Charge Item from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc Through Purchase Invoice/Order/Quote-Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8EE30985-1662-4A16-B9B1-2C36589F4F94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115810","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted (Availment) goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{2A0E0C4E-331F-42B3-96D2-F9CFF01E6FC1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115811","Name":"Inter State Purchase of Charge Item from Composite Vendor/Supplier of exempted charge item with no GST Impact through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{714E77D3-C569-418A-A932-DBFF272D3B92}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115812","Name":"Import of Charge Item with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{B95176D6-58FF-487C-A25B-26E433D85356}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115813","Name":"Import with Input Tax Credit for Charge Item available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{13E5D66F-422B-4830-992B-39C740D6D560}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115814","Name":"Import of Charge with Input Tax Credit available from SEZ Vendor with Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8E537871-C8F7-4E07-8B32-84411C668443}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115815","Name":"Inter-State Purchase of Charge Item from Sez Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{05312E80-BE4E-4EB1-9A1E-AF55EA4D8E3D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115850","Name":"End Type-Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115851","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115852","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{EC4815D3-A78F-4C4F-8C64-8FE9AF09050C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115853","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{4AC1A712-CC9B-4CB7-91EA-05245C1D7211}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115854","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{F5EA246D-523F-4FFA-B316-967933F01C16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115855","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{7342ECF9-7916-4923-AC4C-71E973942346}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115856","Name":"Intra-State Purchase of Resource from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{0FD2A76A-DECB-4FAC-8008-10D6762CDAFE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115857","Name":"Inter-State Purchase of Resource from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{20C477FD-F60A-4D5C-B919-BF3082993511}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115858","Name":"Import of Resource with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A106F715-2EC1-43B7-B0AE-33F6AEEF3B2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115859","Name":"Import of Resource from Foreign Vendor where Input Tax Credit is Available through Purchase Order/Invoice/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{45189151-3ACF-421C-8984-C932DC8A3A2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115860","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{FEC46768-8566-4C39-AE1D-62B0FD83D5D6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115861","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{56966B10-DE93-4980-A9FE-1CBB5DE6359B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115870","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115900","Name":"End GST Credit-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115901","Name":"GST Credit-Non Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115902","Name":"Type-Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115903","Name":"Import of goods without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A7619228-F860-4E03-B21E-E0F01EFF6C52}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115904","Name":"Import of goods without Input Tax Credit Not available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{ABA6F00E-B423-49DF-8DF5-F74950011703}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115905","Name":"Import of goods without Input Tax Credit available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{C57B60DB-22D0-43D5-8460-B47D9F11AFC2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115906","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{E277B92E-D047-425F-B44D-E8EA58FAEE5C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115908","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{09CD7163-15FB-4340-82BF-57373BE3E206}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115909","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{F4B17FC7-3605-47DD-804E-4573BCB3FAC7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115910","Name":"Inter-State Purchase of Goods from Unregistered Vendor where Input Tax Credit is Not-Available","NodeType":"Use Case","TableID":39,"CaseID":"{9E59D4DD-C975-4F42-B5A2-AA98AC93FB7F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115911","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available With Bill to-Location purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{5577B8ED-6471-4480-AD5A-63BA31696AB7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115912","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available with Bill to-Location","NodeType":"Use Case","TableID":39,"CaseID":"{A274F11C-332F-4EE3-AC91-2E2D95E9E2B6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115913","Name":"Intra-State Purchase of Goods from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{679E7F9F-9AAC-4CC5-A263-904ECC708057}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115914","Name":"Inter-State Purchase of Goods from Unregistered Vendor where Input Tax Credit is Not-Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{1B2046C2-4264-4272-A998-085B20832B87}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115915","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit isNon-Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{F4F11B85-700B-4880-9A73-740FF36C4160}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115916","Name":"Inter-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{CE65AEFF-0248-437E-B8A6-87C60E49EFD4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115917","Name":"Intra-State Purchase of Goods from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{55BEA8B4-15ED-47B2-AD24-157BA39467EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115918","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{CCD1BD07-0A33-4DAB-9A3E-E66956E0F98B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115950","Name":"End Type-Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115951","Name":"Type-GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115952","Name":"Intra-State Purchase of Services From Registered Vendor where Input Tax Credit Not Available through Purchase Quote- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{EB169AE5-8DE0-4490-8DFD-46CEE05AA5C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115953","Name":"Inter-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{67527223-25F5-48B0-A0C2-F0064BD92F18}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115954","Name":"Intra-State Purchase of Services from Registered Vendor where Input Tax Credit Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{46AD3622-5D72-4048-9FAC-3C31077C2DF0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115955","Name":"Intra-State Purchase of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FEE41ACD-C7C4-4653-9A34-15F7F0B70663}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115956","Name":"ISD-Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{EC905260-0D39-42CD-ADAE-27F4E74CE267}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115957","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is Not available","NodeType":"Use Case","TableID":39,"CaseID":"{6A72F56C-CA49-4D53-939A-4FABC050BFB3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115958","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order","NodeType":"Use Case","TableID":39,"CaseID":"{0C3618F6-08BD-417F-8744-94A415595940}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115959","Name":"ISD - Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{61FB3B94-A2C7-4F3F-B4A8-801D842328E1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115960","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{BE0C902C-E9FC-4548-B8C7-AB70E21388BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115961","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{36A5E0EC-E197-4102-8FF0-F6DC9B4A47C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115962","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is not available.","NodeType":"Use Case","TableID":39,"CaseID":"{62216594-6660-492B-ACA0-F8BD3893DE49}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115963","Name":"Intra-State Purchase of Services from POS as vendor state Registered Vendor where Input Tax Credit is Not available","NodeType":"Use Case","TableID":39,"CaseID":"{A52E9652-EFC8-4950-B8C1-A41D887AF962}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115964","Name":"Import of Services without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{C07C2110-2740-4FAD-975B-293FAAD86247}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115965","Name":"Intra-State Purchase of Services from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{D2457D2F-2B0E-4F56-BF93-007E245C4FF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115966","Name":"Intra-State Purchase of Services from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{0C6EE2B8-335F-4420-9B76-AEBF773BB40C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-115967","Name":"Inter-State Purchase of Service from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{7642FECB-8BEE-4127-9523-47ECB7D29DC4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116000","Name":"End Type-GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116001","Name":"Type-Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116002","Name":"Import of Fixed Asset from Foreign Vendor where Input Tax Credit is Not Available through Purchase Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{7307BDA2-283F-4094-82E0-41EC241CE177}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116003","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{47F223C1-06BE-4BD6-A98A-E001F8CE436E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116004","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is not available through Purchase Order/ Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{1A8DCBD9-6A50-4C2F-9364-9DB967B50A24}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116005","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted goods(Non-Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{2E369D91-2885-47EB-886E-7AD35816B42E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116006","Name":"Intra State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted (Non Availment)goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{5DC7836A-BA61-4738-8506-BA91EC982903}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116007","Name":"Inter State Purchase of Fixed Asset from Exempted Vendor/Supplier of exempted goods(Non-Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{62AD7817-C30F-4EC6-B68C-AC4828B07DF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116008","Name":"Intra State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted (Non Availment)goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{64233AA2-2DB0-4AC9-8078-0755AB5DA89D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116009","Name":"Intra-State Purchase of Fixed Asset from UnRegistered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{DB7C51C1-1F9F-40F2-82C2-82D59793413C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116010","Name":"Inter-State Purchase of Fixed Asset from Unregistered Vendor where Input Tax Credit is not available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{F8D35423-18AA-4916-A10C-3DC5A6F80CB0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116011","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available With Bill to-Location purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{4FA8A9F3-D8C5-4B20-ACB0-F52BFE013A01}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116012","Name":"Inter-State Purchase of Fixed Asset from Unregistered Vendor where Input Tax Credit is Not-Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{718C2339-648B-4FC6-A496-737B12176D01}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116013","Name":"Intra-State Purchase of Fixed Asset from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{679F358F-4DB0-4587-9F0C-CE643B16A152}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116014","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is not available with Bill to-Location","NodeType":"Use Case","TableID":39,"CaseID":"{AFCCC11E-97B1-4627-8DFD-4184537E2509}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116015","Name":"Inter State Purchase of Fixed Asset from Composite Vendor/Supplier of exempted fixed asset for Non-Availment through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{D50E350F-963C-4C3C-9E78-08F12AB7D8F0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116016","Name":"Intra-State Purchase of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice For FOC","NodeType":"Use Case","TableID":39,"CaseID":"{7E48E18F-D907-423A-BC62-256D7CFAA089}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116017","Name":"Inter-State Purchase of Fixed Asset from Registered Vendor where Input Tax Credit is not available through Purchase Order/ Invoice for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{65746F4E-A835-4278-98CA-B6AB0D0CBF6B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116050","Name":"End Type-Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116051","Name":"Type-Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116052","Name":"Intra-State Purchase of Charge Item from UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{97664A61-096E-43D9-BF55-2D5672F02F7F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116053","Name":"Inter-State Purchase of Charge Item from UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{F4A8CF06-D6CE-4263-ACF3-F1FBB744FBFB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116054","Name":"Inter-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{101CAF41-34AB-4EA1-9277-166954A7FF94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116055","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{64F0C586-3993-4F05-A127-332E7E46802D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116056","Name":"Intra-State Purchase of Charge Item from Registered Vendor when Input Tax Credit is Not Available With Bill to-Location purchase order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{666A5198-99BA-4EC0-A89A-C991109BBC0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116057","Name":"Inter-State Purchase of Charge Item from Unregistered Vendor where Input Tax Credit is Not-Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{66A099C8-9660-498E-9BEB-61296A76CFAF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116058","Name":"Intra-State Purchase of Charge Item from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8A58255B-97C9-4691-9DBF-1C041D4433DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116059","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted (Non Availment)goods with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{C4DD33B4-D4DB-4F30-8C86-E2045B473C57}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116060","Name":"Inter-State Purchase of Charge Item from Registered Vendor where Input Tax Credit is not available with Bill to-Location","NodeType":"Use Case","TableID":39,"CaseID":"{CCE6E98E-5330-48BA-B42E-70E2BDE3E45B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116061","Name":"Inter State Purchase of Charge Item from Composite Vendor/Supplier of exempted charge item for Non-Availment through Purchase Quote/Order/Invoice with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{FFCC9396-D3C4-4A81-BDE8-23070BF8976F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116100","Name":"End Type-Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116101","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116102","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order.","NodeType":"Use Case","TableID":39,"CaseID":"{DBD883FC-4DD3-4C9C-B9AC-AAAF07FF4F3E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116103","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice.","NodeType":"Use Case","TableID":39,"CaseID":"{073D94DC-E7F0-4535-B269-7C36C626FD96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116104","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available purchase Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{B33DCDC5-21C3-4019-96E3-EF513EAED95E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116105","Name":"Import of Resource without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{B12DD0D6-A87C-4A8C-AE71-746B26156893}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116106","Name":"Import of Resource from Foreign Vendor where Input Tax Credit is not available through Purchase Order/Invoice/Quote.","NodeType":"Use Case","TableID":39,"CaseID":"{5D419270-CBAE-42FB-A135-DC1693C77985}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116107","Name":"Intra-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available purchase order/Invoice for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{10D6A0FE-F802-4235-B438-3A29B7C853ED}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116108","Name":"Inter-State Purchase of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Invoice/Order for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{F1A5130E-021A-40F9-8282-82CBFEE3FF07}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116130","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116150","Name":"End GST Credit-Non Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116200","Name":"End Exempted -No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116201","Name":"Exempted","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116202","Name":"Inter-State Purchase of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{1FFB6082-63D3-4AF8-A83B-9AE92D2010E2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116203","Name":"Intra State Purchase of Exempted Fixed Asset from Registered Vendor (Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{C7563021-CD85-4519-ADFB-BA848CA3022F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116204","Name":"Inter State Purchase of Exempted Goods-SEZ Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{97856AB0-DAB0-4CF3-B1B1-3A6EB1524E0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116205","Name":"Intra State Purchase of Exempted Goods and Services.","NodeType":"Use Case","TableID":39,"CaseID":"{2ED393A6-3B1D-49AC-9DBB-D5836930F61C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116206","Name":"Inter-State Purchase of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{AB2BDB68-471C-4EC0-B43A-92920239FBF9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116207","Name":"Intra State Purchase of Exempted Fixed Asset from Registered Vendor (Non-Availment) with no GST Impact through Purchase Quote/Order/Invoice","NodeType":"Use Case","TableID":39,"CaseID":"{F67095C1-F610-4B59-A1E5-7B58D83A6CF5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116208","Name":"Inter State Purchase of Exempted Goods for Registered/Exempted/Composite Vendor","NodeType":"Use Case","TableID":39,"CaseID":"{07AC553C-0E84-41E3-B04A-19B63C3BCF75}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116250","Name":"End Exempted","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116251","Name":"Begin Type Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116252","Name":"Import of Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, without cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{A43577AE-11F7-4DF9-9EEF-F317ED83ADD4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116253","Name":"Import of Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{B45F2436-2E00-4A49-9A8E-7B9202FE0F0A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116260","Name":"End Type Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116300","Name":"End Purchase Document","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116301","Name":"Purchase Return Document","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(5|3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116302","Name":"Exempted No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116303","Name":"GST Credit Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116304","Name":"Type-Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116305","Name":"Return of Import of goods with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{15A78CF5-A4CC-4804-95DA-6FB3DCBF2DBF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116306","Name":"Intra-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{BB9814B7-D039-49BC-BF5D-F80127620CAE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116307","Name":"Purchase Credit Memo/Return Order for Imported Goods where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{48C973FB-77C2-476C-AB39-0E61F0F76F0D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116308","Name":"Intra-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{D0059E3B-4B5F-44E3-B2AD-B3DB74C1CEC4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116309","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{BC7B8A8E-B343-439B-B240-B5D7D0253CC7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116310","Name":"Inter-State Purchase Return of Goods from UnRegistered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{CFC3D6F5-144A-4731-8658-BA626457624A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116311","Name":"Intra-State Purchase Return of Goods from UnRegistered Vendor when Input Tax Credit is Available Through Purchase Invoice/Order/Quote - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{2E358EDE-097D-4846-A45B-BC2C1AE07FE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116312","Name":"Intra-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available with Bill To-Loc Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{F6EB6D82-74A5-413E-BE36-9308F41811A3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116313","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available with Bill to-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{7759D07C-F691-4738-8FB8-F682B03DA922}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116314","Name":"Intra-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{998A15E8-B4E6-460E-A89C-239F276E9B3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116315","Name":"Inter-State Purchase Return of Goods from UnRegistered Vendor when Input Tax Credit is Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{FFBADC05-CF47-4787-B31A-EB85F88CACE8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116316","Name":"Intra-State Purchase Return of Goods from Registered Vendor where Input Tax Credit is available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{FBEDC063-63EA-4FED-A3DD-8B5E175031CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116317","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{055AEE33-1301-4B59-BA0D-E76D2D542B34}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116318","Name":"Intra-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{C9F94259-EA6B-481B-AAF1-8D8F9F025902}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116319","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is Available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{90643BB8-1BEB-40C8-81B3-E6A3C5075C45}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116350","Name":"End Type-Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116351","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116352","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is available through Return Order.","NodeType":"Use Case","TableID":39,"CaseID":"{AF13E308-74EA-4A38-86B9-B0EA0DCE1972}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116353","Name":"Inter-State Purchase Return of Service from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{0CCFD5FB-95C8-4189-ACFF-E7D9AE1DB368}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116354","Name":"ISD - Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{137A0843-A280-441F-8D87-5639EDB2B01E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116355","Name":"ISD-Inter-State Purchase Return of Service from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{2A733D02-2125-4EA9-97E3-2068E5708A94}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116356","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{710042C6-833D-4CF4-B943-47CF6691F7DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116357","Name":"Intra-State Purchase Return of Services from Registered Vendor where Input Tax Credit is available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{D2E1CF7B-EA38-4EB3-82C3-E2E6949625D3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116358","Name":"Intra-State Purchase Return of Services from Unregistered Vendor when Input Tax Credit is Available (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{AEDED96A-9927-4DF4-B89B-22FA7C77C19F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116360","Name":"Inter-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{64A2BCC0-3E88-4613-B91D-540FF4977F86}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116361","Name":"Inter-State Purchase of Return of Services from Unregistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{6510FF1C-A0A5-4C52-8DE5-836BE2536650}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116362","Name":"Return of Import of Services with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{36710BC3-FED5-4726-8AB5-1DC108CF23AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116363","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Available Through Purchase Return Orders for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{47AA3C60-6575-4F87-8022-29790BB97A11}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116400","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116401","Name":"Type Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116402","Name":"Return of Import Fixed Asset with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{1201ECAE-F4F2-43D7-938E-15F5361C2062}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116403","Name":"Return of Import of Fixed Asset with Input Tax Credit available from Import Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{8EECE1FD-4BDB-4A37-92ED-00380C170CFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116404","Name":"Inter State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted goods(Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{A8A42D6F-2A47-4175-8ED8-F482D64554C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116405","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{CCF91681-45AA-45DC-94A6-52DBBF199CF5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116406","Name":"Intra State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted (Availment) goods with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{4E53918C-16B7-4834-86DE-E7422FC21E83}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116407","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{57322220-978A-459E-8EC5-05AB66E6B362}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116408","Name":"Intra-State Purchase Return of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{F37442C1-AB50-445F-A7C3-8DCA84931B69}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116409","Name":"Inter-State Purchase Return of Fixed Asset from Unregistered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{B5669E1C-A496-431B-A29F-69E527E37AA0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116410","Name":"Inter-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Available with Bill to-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{E6B10245-E536-41CF-A9CC-AA043113F6F4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116411","Name":"Inter-State Purchase Return of Fixed Asset from UnRegistered Vendor when Input Tax Credit is Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{38583B1E-682C-4B06-BB69-005849014E82}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116412","Name":"Intra-State Purchase Return of Fixed Asset from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{1EB264E9-24DD-43EC-A17F-E623BF565203}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116413","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{8E9E924F-0BE8-4862-BDFE-39CB23848B3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116414","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is available through Purchase Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{B4B3EE78-57EC-4EE8-8F51-E7B868CF34B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116450","Name":"End Type Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116451","Name":"Type Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116452","Name":"Intra-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available through purchase return order/Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{9A744701-39FF-4CFF-AA72-F5856E82FBF4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116453","Name":"Intra-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{142D2618-98AC-4DD8-922F-11CF063DD8D8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116454","Name":"Inter-State Purchase Return of Charge Item to Unregistered Vendor when Input Tax Credit is Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{8B75A47C-8DD2-45C8-99D9-B04E18C531D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116455","Name":"Inter-State Purchase Return of Charge Item to Registered Vendor when Input Tax Credit is Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{06A818C9-817D-4983-B8D9-D96759380A68}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116456","Name":"Intra-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{4934B903-2938-4ED9-994C-36F89B08E352}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116457","Name":"Inter-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{8F83C983-4368-45FF-9319-952826F72162}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116458","Name":"Inter-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Available with Bill to-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{478E0789-2184-4644-8165-3B5169084277}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116459","Name":"Inter-State Purchase Return of Charge Item from UnRegistered Vendor when Input Tax Credit is Available With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{0E9F08C2-7CF2-4AC1-AFB4-57AC8383E732}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116460","Name":"Intra-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Available With Bill To-Loc - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{03418FFD-0AF9-48F5-A500-EC48BF9DE4E5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116465","Name":"End Type Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116466","Name":"Type-Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116467","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available through Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{A8C8864E-5E75-431A-90D6-9AAB47623BA6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116468","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C6FDF908-18DE-47B6-ADED-1E654C153D2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116469","Name":"Inter-State Purchase Return of Resource from Unregistered Vendor when Input Tax Credit is Available Through Purchase Return Order/ Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{D8632F51-FEDB-4AF9-8A25-CFE374BD12BA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116470","Name":"Return of Import of Resource with Input Tax Credit available from SEZ Vendor with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{62CA4077-63DB-4812-8DBA-369BDD0A5A63}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116471","Name":"Intra-State Purchase Return of Resource from Unregistered Vendor when Input Tax Credit is Available Through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{C9ED5F18-07B9-43AF-9221-448B962EC9CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116472","Name":"Intra-State Purchase Return of Resources from Registered Vendor where Input Tax Credit is available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{04F944A1-EF9C-440F-A89B-654782D13EAA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116473","Name":"Purchase Credit Memo/Return Order for Resource where Input Tax Credit is available.","NodeType":"Use Case","TableID":39,"CaseID":"{4001BD59-B35E-4BBC-B7AD-464FBB21E54A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116474","Name":"Intra-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{EE5198CD-9648-49CF-97C5-E71A9843EE27}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116475","Name":"Intra-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available Through Purchase Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{21A2DFFA-DF09-4531-BE3F-DFC7E50F3D1E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116476","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Available through Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{2E66DC31-92BB-4928-83E5-6F87FC544A85}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116490","Name":"End Type-Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116500","Name":"End GST Credit Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116501","Name":"GST Credit Non-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116502","Name":"Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116503","Name":"Return of Import of goods where Input Tax Credit Not available from SEZ Vendor without cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{D66CD2EC-C8A4-48B9-A634-B14161E0E03B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116504","Name":"Return of Import goods without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry","NodeType":"Use Case","TableID":39,"CaseID":"{A4A0C6C8-FE70-4DA2-9E3D-E5F0CCA93A22}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116505","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{4684DF92-D578-4978-B4EC-04ACC07C8206}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116506","Name":"Intra-State Purchase Return of Goods to Registered Vendor when Input Tax Credit is Not Available purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{C8AEE991-4EDD-4562-BCE7-3DFA3502C8D2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116507","Name":"Intra-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available through Return Order","NodeType":"Use Case","TableID":39,"CaseID":"{0120B543-BBCA-433A-B84D-3A07CA4BD763}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116508","Name":"Intra-State Purchase Return of Goods to UnRegistered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{5F7E0B6C-3D83-418C-9829-C5E5E52460C6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116509","Name":"Intra-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{EB39C2FC-37D8-4778-8B44-9A45DDA46B2E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116510","Name":"Inter-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{938B00CD-0C55-4E7E-9E88-9D26724E10E2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116511","Name":"Intra-State Purchase Return of Goods to Registered Vendor when Input Tax Credit is Not Available with Bill To-Loc purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{65C755B4-E396-453F-9425-896AFF64D1B3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116512","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{0D76D452-CCE9-473B-998A-71EDADD459AE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116513","Name":"Intra-State Purchase Return of Goods to UnRegistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{35C8BFED-ED88-46B7-AFE8-9F2C58421857}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116514","Name":"Inter-State Purchase Return of Goods from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{E0AA74AA-F401-4115-B768-D41BB661B532}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116515","Name":"Intra-State Purchase Return of Goods to Registered Vendor when Input Tax Credit is Not Available purchase Return Order/ Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{A515D68A-A496-4A81-8F4E-EC21F207D5FF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116516","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is not available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{040A5713-75A6-4FD3-BCA9-7A335D697933}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116550","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116551","Name":"Type GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116552","Name":"Purchase Credit Memo/Return Order for Imported Services from Import Associate Vendor where Input Tax Credit is Not Available.","NodeType":"Use Case","TableID":39,"CaseID":"{F14B809C-31CA-4B7D-989E-419B00D35F8F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116553","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is not available Through Return Order ","NodeType":"Use Case","TableID":39,"CaseID":"{C6B64855-0CA9-4749-B21E-AF9FA0AB33D4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116554","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{2CEB6A3E-11E4-420F-A3C6-886B920BEC29}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116555","Name":"ISD-Inter-State Purchase Return of Service from Registered Vendor when Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{78DCCF81-7548-4028-A6AF-31AEB633FC3C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116556","Name":"ISD - Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{BD845B37-5E0F-4EF3-94CB-ED972B71A3C1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116557","Name":"Inter-State Purchase Return of Service to Registered Vendor where Input Tax Credit is Non-available through Purchase Return Orders/Purchase Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{E6B27281-EC3F-4040-B035-4179D33884CE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116558","Name":"Intra-State Purchase Return of Services from Registered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{58CCF42B-75BE-422F-90A5-93E52B2CC817}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116559","Name":"Intra-State/Intra-Union Territory Purchase Return of Services from Registered Vendor where Input Tax Credit Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{A7F8D194-33DA-472D-87CB-693FB589CD45}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116560","Name":"Intra-State Purchase Return of Services from Registered Vendor where Input Tax Credit Not Available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{A4461039-C91C-4102-9438-866AF5607096}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116561","Name":"Intra-State Purchase Return of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{F7D97DC6-CF0E-4248-95A3-3C7189BF844D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116562","Name":"Intra-State Purchase Return of Services from UnRegistered Vendor where Input Tax Credit Not Available (Reverse Charge)","NodeType":"Use Case","TableID":39,"CaseID":"{01289E18-40A0-4AC7-92DA-601F5AF77AA0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116563","Name":"Inter-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{7EE4EB63-5718-4880-80D7-DC82790F804D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116564","Name":"Inter-State Purchase Return of Services from Unregistered Vendor where Input Tax Credit Not Available -Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{6FB5A46A-83C0-495F-9495-7365027603EA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116565","Name":"Return of Import of Services without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry ","NodeType":"Use Case","TableID":39,"CaseID":"{7DBFAC05-5315-4A5F-B5BE-962A065F7D93}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116566","Name":"Intra-State Purchase Return of Services from Registered Vendor when Input Tax Credit is Not Available Purchase Return Order/Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{79A59A19-401F-444F-A3C4-F8CBBA06D4B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116567","Name":"Inter-State Purchase Return of Service to Registered Vendor where Input Tax Credit is Non-available through Purchase Return Orders/Purchase Credit Memo for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{4B185DAB-793D-4C0A-A303-417A61AC9B96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116600","Name":"End Type GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116601","Name":"Type Fixed Asset","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116602","Name":"Purchase Return of Imported Fixed Asset from Foreign Vendor where Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{21811F58-E56B-4A1B-B6DA-C9BD8EECC3AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116603","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is not available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{11784DD8-7EF0-42CF-9A18-401A9ABC6466}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116604","Name":"Intra State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted (Non-Availment) goods with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{12EFA340-BD17-487B-A7CC-F23993B289CF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116605","Name":"Inter State Purchase Return of Fixed Asset from Composite Vendor/Supplier of exempted goods(Non-Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{8E46C7A8-FFB5-40D2-8DBB-26E9FEDDF17D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116606","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available","NodeType":"Use Case","TableID":39,"CaseID":"{079237F7-FA64-40B5-8BE7-A92428550117}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116607","Name":"Intra-State Purchase Return of Fixed Asset to Unregistered Vendor when Input Tax Credit is Not Available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{8EC585FC-1F0E-4A31-A28A-463F3239EB57}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116608","Name":"Inter-State Purchase Return of Fixed Asset to Unregistered Vendor where Input Tax Credit is not available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{028465BA-B14C-4266-9D47-75A8087EE299}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116609","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is not available with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{BFB5B4F3-BBC1-4A5B-9B7C-C3572578CD78}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116610","Name":"Inter-State Purchase Return of Fixed Asset from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{3A542488-E9A7-41E5-BF0B-C73F9C82A8DB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116611","Name":"Intra-State Purchase Return of Fixed Asset to UnRegistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{6A0A47A2-4A0F-4CCD-AC63-A70C76E05091}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116612","Name":"Intra-State Purchase Return of Fixed Asset from Registered Vendor when Input Tax Credit is Not Available for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{7601E944-F060-482E-B620-CF8555D00BB9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116613","Name":"Inter-State Purchase Return of Fixed Asset to Registered Vendor where Input Tax Credit is not available with Bill To-Loc for FOC","NodeType":"Use Case","TableID":39,"CaseID":"{BC63870D-585E-4C07-A6A6-44DE28F260BE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116650","Name":"End Type Fixed Asset","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116661","Name":"Type Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116662","Name":"Intra-State Purchase Return of Charge Item from Registered Vendor when Input Tax Credit is Not Available purchase return order/Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{2653A4AF-CD57-4A29-B4C2-4FE3749AC4AD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116663","Name":"Inter-State Purchase Return of Charge Item to Registered Vendor when Input Tax Credit is Not Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{87FB95AD-905D-4832-9EC3-0330B674D601}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116664","Name":"Intra-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{1B728E5D-4A32-4E32-A2AA-FE3673AFC2CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116665","Name":"Inter-State Purchase Return of Charge Item to Unregistered Vendor when Input Tax Credit is not Available through purchase return order/ Credit memo","NodeType":"Use Case","TableID":39,"CaseID":"{79839F30-7F44-4411-BB2D-07FFA294A38D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116666","Name":"Intra-State Purchase Return of Charge Item to Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{7E781F55-9A83-4206-B18A-46C2CA5E8573}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116667","Name":"Inter-State Purchase Return of Charge Item from Registered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{4F6B53B9-9961-4F29-8151-33C5D413CF58}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116668","Name":"Inter-State Purchase Return of Charge Item to Registered Vendor where Input Tax Credit is not available with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{38F58D78-84D4-40D9-BE77-CD33C02B49AF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116669","Name":"Inter-State Purchase Return of Charge Item from Unregistered Vendor when Input Tax Credit is Not Available With Bill To-Loc- Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{C85088E3-672F-4F2E-B1EF-19CBDFA5460B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116670","Name":"Intra-State Purchase Return of Charge Item to UnRegistered Vendor when Input Tax Credit is Not Available With Bill To-Loc Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{E5053EEB-44D1-4552-8084-67D72A90CECB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116675","Name":"End Type Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116685","Name":"Type Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116686","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{40E9E837-E785-42A1-B8ED-9B27D43D1FFC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116687","Name":"Return of Import Resource without Input Tax Credit available from SEZ Vendor with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{5C3AA147-EDD0-4271-9CB8-4A6F6C98962A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116688","Name":"Inter-State Purchase Return of Resource from Unregistered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{43D94D4C-82EA-4A44-B80F-E297292CAA10}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116689","Name":"Intra-State Purchase Return of Resources from Registered Vendor where Input Tax Credit Not Available -Reverse Charge.","NodeType":"Use Case","TableID":39,"CaseID":"{A170BEEF-350A-4B43-B333-CBEA1D197E1B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116690","Name":"Purchase Credit Memo/Return Order for Resource where Input Tax Credit is not available.","NodeType":"Use Case","TableID":39,"CaseID":"{7C3076A9-460B-41BC-AED8-6B615E4835D2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116691","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{545DC1C5-C848-43B9-BFCE-72C3A45C94BA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116692","Name":"Intra-State Purchase Return of Resource from Registered Vendor where Input Tax Credit Not Available through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{7B096619-70FB-4622-9E57-8EAE58DC1AB1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116693","Name":"Intra-State Purchase Return of Resource from Unregistered Vendor where Input Tax Credit Not Available through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{A2153C07-E791-4821-9542-F9C6C3737BAF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116694","Name":"Intra-State Purchase Return of Resource from Registered Vendor where Input Tax Credit Not Available through Purchase Return Order/Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{8B9B630B-1AC7-49A1-BA60-3A415B97C2BC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116695","Name":"Inter-State Purchase Return of Resource from Registered Vendor when Input Tax Credit is Not Available Through Purchase Return Order/ Credit Memo for FOC.","NodeType":"Use Case","TableID":39,"CaseID":"{4FD977C3-86DB-46A1-AEEF-A0A176F23BE1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116697","Name":"End Type Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116700","Name":"End GST Credit Non-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116701","Name":"Begin Type Resource","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116702","Name":"Inter State Purchase Return of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Return Order/Credit Memo.","NodeType":"Use Case","TableID":39,"CaseID":"{F0453435-C2EF-43BB-BC81-39454E1DE4B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116703","Name":"Intra State Purchase Return of Resource from Composite Vendor/Supplier with no GST Impact through Purchase Credit Memo/Return order.","NodeType":"Use Case","TableID":39,"CaseID":"{28E2DDFD-2F63-47CB-986C-8E6F5D2356F3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116715","Name":"End Type Resource","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116750","Name":"End Exempted No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116751","Name":"Exempted","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18082=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116752","Name":"Intra State Purchase Return of Exempted Fixed Asset from Registered Vendor (Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{26260269-B2BE-4D01-AF43-91BCE15FFF05}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116753","Name":"Inter-State Purchase Return of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{8314CDF7-853B-4DEA-A6DF-CE478FB1D3BD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116754","Name":"Intra State Purchase Return of Exempted Fixed Asset from Registered Vendor (Non-Availment) with no GST Impact","NodeType":"Use Case","TableID":39,"CaseID":"{739B3C04-8659-438B-B9D5-EB62435B9025}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116755","Name":"Inter-State Purchase Return of Exempted Fixed Asset from Registered Vendor where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{43228213-4CEA-41C4-B28B-170B00BC81A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116756","Name":"Intra State Purchase Return of Service from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Credit Memo/Return order","NodeType":"Use Case","TableID":39,"CaseID":"{5E1C6C44-CCBA-49ED-AD64-54D360467B0F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116757","Name":"Intra-State Purchase Return of Goods from Registered Exempted Vendor when Input Tax Credit is Available Through Purchase Return Orders","NodeType":"Use Case","TableID":39,"CaseID":"{8FCF5988-06C7-44E2-A7BD-A5A9B40CDEF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116758","Name":"Inter-State Purchase Return of Goods from Registered Exempted Vendor when Input Tax Credit is Available","NodeType":"Use Case","TableID":39,"CaseID":"{67FECB97-A3FA-4FC9-8A80-E214C3DF4CA9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116759","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{4F992CE7-BB8C-4129-923A-F53A771DF231}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116760","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{0371699B-6B05-4B16-99FB-604F142308AA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116800","Name":"End Exempted","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116901","Name":"GST Reverse Charge -No","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18085=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116902","Name":"GST Credit-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116903","Name":"Type -GL Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116904","Name":"(POS) Intra-State Purchase Return of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{3F057D29-C926-453B-8B17-6B5E431A20B4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-116950","Name":"End Type -GL Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117000","Name":"End GST Credit-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117001","Name":"Begin Type Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117002","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{2BF5B2FE-2191-416D-B63F-47052716FC1B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117003","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{F759EFFB-61F9-4B84-B9CD-01E2616A7B85}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117004","Name":"Inter State Purchase of Goods from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{F023887D-C599-4FE6-89E7-49C257DC208C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117005","Name":"Intra State Purchase of Goods from Composite Vendor/Supplier with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{13352A4D-EEAB-4FEA-A778-0BDAD73B550C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117015","Name":"End Type Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117016","Name":"Begin Type - Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117017","Name":"Inter State Purchase of Charge from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{0CF4326B-FD68-4AE6-B52A-CD2AA2F2A788}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117020","Name":"End Type - Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117021","Name":"Inter State Purchase of other types except good from Composite Vendor/Supplier of exempted not goods with no GST Impact through Purchase Return Order/Credit Memo With Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{21E3248F-92C2-444C-B7E9-B48218AD918A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117022","Name":"Intra State Purchase of other types from Composite Vendor/Supplier of exempted not goods with no GST Impact through Purchase Return Order/Credit Memo with Bill To-Loc","NodeType":"Use Case","TableID":39,"CaseID":"{1988B611-ABD4-44C4-9CB5-67BB88E0002C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117023","Name":"Inter State Purchase of Service from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{BC9A772F-DBF9-4F4F-8607-212DC829C005}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117050","Name":"End GST Reverse Charge -No","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117051","Name":"GST Credit Non-Availment","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18095=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117052","Name":"Return of Import Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, with cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{047704F8-A619-401F-9653-12103103E14A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117053","Name":"Purchase Credit Memo/Return Order for Imported Goods where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{DA972CCF-D97D-4379-9704-AB397FA9E08F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117054","Name":"Purchase Credit Memo/Return Order for Imported Services where Input Tax Credit is not available","NodeType":"Use Case","TableID":39,"CaseID":"{1005E09C-7F65-4E7A-AC0C-B071C455A412}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117055","Name":"(POS) Intra-State Return of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is not available through Purchase Return Order/ Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{8B6ADE91-D482-4071-B431-C299292EF2BF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117056","Name":"Return of Import Fixed Asset from SEZ Vendor where Input Tax Credit is Not Available, without cover of Bill of Entry.","NodeType":"Use Case","TableID":39,"CaseID":"{B5C09EE0-1CF9-4818-AADB-AC5E95626AE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117057","Name":"Intra-State Purchase Return of Goods from Registered Vendor where Input Tax Credit is not available - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{0EBD8B25-3C27-46AE-8CD7-4E870DB1315B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117058","Name":"Inter-State Purchase Return of Goods from Registered Vendor when Input Tax Credit is not Available Through Purchase Return Order/ Credit Memo - Reverse Charge","NodeType":"Use Case","TableID":39,"CaseID":"{97437C0C-3E99-4D15-9378-34AC4B8FD002}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117100","Name":"End GST Credit Non-Availment","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117101","Name":"Begin Type G/L Account","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117102","Name":"Purchase Credit Memo/Return Order for Imported Services where Input Tax Credit is available","NodeType":"Use Case","TableID":39,"CaseID":"{AA1B2E3A-4149-4352-B081-2A869CDE5353}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117120","Name":"End Type G/L Account","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117121","Name":"Begin Type - Charge Item","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field5=1(5))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117122","Name":"Intra State Purchase of Charge Item from Composite Vendor/Supplier of exempted goods with no GST Impact through Purchase Return Order/Credit Memo","NodeType":"Use Case","TableID":39,"CaseID":"{55B6317F-25F3-4C73-8AA5-AFA3EC519C88}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117125","Name":"End Type - Charge Item","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117150","Name":"End Purchase Return Document","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117200","Name":"End Purchase","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117201","Name":"Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18543=1(<>''),Field18001=1(<>''),Field18009=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117202","Name":"Account Type-Customer","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117203","Name":"Document Type- Invoice","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117204","Name":"GST Customer Type- Registered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18007=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117205","Name":"Intra-State Sales of Goods to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{3335E143-1F90-4E63-B6E7-5A4897019FFA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117206","Name":"Inter-State Sales of Goods to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{38C5A554-206D-44A5-9090-86CAC52A7715}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117207","Name":"Intra-State Sales of Service to Registered Customer through Sales Journal/Journal/General Journal - Kerala Cess","NodeType":"Use Case","TableID":81,"CaseID":"{C89845E0-C8B1-45B1-9C1B-04EC264B7AC7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117208","Name":"Intra-State Sales of Service to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{BBD37D0A-E328-4544-B5E1-03FCF65399D5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117209","Name":"Inter-State Sales of Services to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{CF221DCD-487C-4B3C-BBC4-FE16B6667E76}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117210","Name":"Intra-State Sales of Exempted Service to Registered Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{B0D75B5B-C42D-4381-80D8-B312BD2360AE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117250","Name":"End GST Customer type- Registered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117251","Name":"GST Customer Type- Others","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18007=1(2|3|4|5|6|7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117252","Name":"Inter-State Sales of Service to UnRegistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{F56F247A-8E36-496E-8672-C6FE2C81CE7B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117253","Name":"Intra-State Sales of Service to UnRegistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{F719A304-09CF-479B-A123-2A4E34ED3133}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117254","Name":"Export Sales of Service to Export Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{F807C5DC-40B1-4E22-AB49-06BC54A22558}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117255","Name":"IntraState - Export Sales of Service to Deemed Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{005ED1ED-F66A-4A08-8647-0554154F0DF2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117256","Name":"Export Sales of Service to SEZ Development Customer with payment of duty through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{3DC33AD0-69AB-4B36-B58D-7C409957507C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117257","Name":"Export of Service to SEZ Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{6F745F19-1955-4DAA-A3C4-BAC6D6326232}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117258","Name":"Inter State - Export Sales of Service to Deemed Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{FCB154BF-A72A-43A0-87AB-DF80DEAB4F1C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117300","Name":"End GST Customer Type- Others","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117350","Name":"End Document Type- Invoice","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117351","Name":"Document Type- Credit Memo","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117352","Name":"Inter-State Sales Return of Service to UnRegistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{CCF41113-DC62-47E2-B45B-87AF0248AF65}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117353","Name":"Inter-State Sales Return of Goods to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{674E08E2-EB2A-4C3D-924B-9370C6ED3DBF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117354","Name":"Intra-State Sales Return of Service to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{6C9258C7-AF9C-43E4-A015-C4253265F37E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117355","Name":"Intra-State Sales Return of Service to Registered or Unregistered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{6C9258C7-AF9C-43E4-A015-C4253265F37E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117356","Name":"(POS) Intra-State Sales Return/Credit Note of Services for Overseas Place of Supply from Registered Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{DF8067FF-2F97-485F-8364-3AC5536AD82D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117357","Name":"Export Sales Return of Service to Export Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{B8EE2ED8-F29F-465D-B6DC-A3A2A4BB1B3D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117358","Name":"Intra-State Sales Return of Service from Deemed Export Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{4BFBD63E-F561-4C68-AB29-BF4139D24F49}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117359","Name":"InterState Sales Return of Service to SEZ Development Customer with payment of duty through Sales Journal/Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{68AE0437-E71F-4AC5-8729-DDD40410D69D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117360","Name":"Sales Return of Service to SEZ Unit Customer with payment of duty through Sales Journal/Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{960BC8FC-FF34-4E46-A6A0-6FD2CB7BBDA2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117361","Name":"Inter State - Export Sales Return of Service to Deemed Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{FFBBBCDE-50F5-4D02-8B40-DAD63ED1491E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117362","Name":"Intra-State Sales Return of Goods to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{DF783FC9-39C3-492B-B94F-90BCF26C04E5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117363","Name":"Inter-State Sales Return of Service to Registered Customer through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{4E1D5479-C527-4295-A0C1-7D82D94860F6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117400","Name":"End Document Type- Credit Memo","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117401","Name":"Document Type- Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117402","Name":"Inter-State GST on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{287ED69D-1488-4A48-BA50-E063EC8EF915}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117403","Name":"Intra-State GST on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{18F45902-76C4-4B57-AF7F-7D9B3A76D51F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117404","Name":"Export of Goods and Services to SEZ Development, through Sales Journal/Journal/General Journal With Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{0B9F94CE-1C82-4FF7-9EF7-D51E156A0286}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117405","Name":"Export of Goods and Services to Foreign Customer through Sales Journal/Journal/General Journal Without Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{2E85F2F7-2ED8-42CC-95F5-B20D32DB41AC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117406","Name":"GST Deemed Exports through Sales Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{AE574FA3-E537-4FC1-9F8D-E16EF5D7A40E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117407","Name":"Export of Goods and Services to SEZ Unit through Sales Journal/Journal/General Journal Without Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{B7D173ED-4B8F-4F13-95B8-B7C4890B3623}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117408","Name":"Export of Goods and Services to SEZ Unit through Sales Journal/Journal/General Journal With Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{B8ACD224-FC70-4037-86AD-C18AA5DA085F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117409","Name":"Export of Goods and Services to SEZ Development through Sales Journal/Journal/General Journal Without Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{C9CE4C92-F6CD-4B97-BD13-D8EE824D7D66}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117410","Name":"Export of Goods and Services to Foreign Customer through Sales Journal/Journal/General Journal With Payment of Duty.","NodeType":"Use Case","TableID":81,"CaseID":"{DAC31111-29F4-4C8F-BEEC-C3B31668DAF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117450","Name":"End Document Type-Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117451","Name":"Document Type-Refund","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117453","Name":"Intra-State GST Refund on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{0628D305-F863-48E9-986E-0570995F7002}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117454","Name":"Inter-State GST Refund on Advance Payment Received From Customer","NodeType":"Use Case","TableID":81,"CaseID":"{F643A772-5CA6-4CC5-913C-9188C52DF8E0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117499","Name":"End Document Type-Refund","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117500","Name":"End Account Type- Customer","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117501","Name":"Account Type-Vendor","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117502","Name":"Document Type- Invoice","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117503","Name":"GST Credit -Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117504","Name":"GST Reverse Charge -Yes","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18023=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117505","Name":"Intra-State/Intra-Union Territory Purchase of Service from Unregistered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{3C23CDAC-6995-4B6C-9E4B-708B540C413B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117506","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{744B47C3-E4C1-4AC4-A37E-CBA3102A59A1}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117507","Name":"Purchase of Services from SEZ Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{7E182C87-669C-4CD8-8336-41C2ABE6144C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117508","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{B8F32E0D-5D5E-4B84-AE3A-C0D4520470D3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117509","Name":"Inter-State Purchase of Services from Unregistered/Registered Vendor where Input Tax Credit is available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{819CADCF-BE64-4BC6-93BA-59EDE239EB54}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117511","Name":"Interstate GST Calculation on Reverse Charge Exempt Transactions through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{25E8E204-2E63-4B79-824C-3C1185D6467C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117513","Name":"Intrastate GST Calculation on Reverse Charge Exempt Transactions through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{DF134523-53D1-4137-B091-D9C5E1DB8D64}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117550","Name":"End GST Reverse Charge -Yes","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117551","Name":"Begin Vendor Type - Composite","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117552","Name":"Inter-State Purchase of Service from Composite Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F3CD2FC6-4CEE-47EF-B0F5-9EB3E46CE74B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117553","Name":"Intra-State/Intra-Union Territory Purchase of Service from Composite Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B68BAE5C-F887-46E8-9B4C-7333EB6152E0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117558","Name":"End Vendor Type - Composite","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117571","Name":"Begin Vendor type - Registered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117572","Name":"Intra-State/Intra-Union Territory Purchase of Goods from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{66A65EDD-B06A-4817-84C4-B61B035AC7EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117573","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{C2FE3376-EDB2-4C3E-A82D-F49D27D292DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117574","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{36017702-208F-4E8C-A75E-8872EA7D1205}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117575","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{26B7CC70-0C7D-4FD2-B00A-B7845C289215}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117576","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{02670909-9C35-49DA-B64F-E5EA4602693E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117577","Name":"ISD-Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{FA492219-9C2F-4986-B773-DAA35CA74796}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117578","Name":"ISD - Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{E73369B2-7A52-46D6-909F-BA116399AF39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117579","Name":"ISD - Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{E73369B2-7A52-46D6-909F-BA116399AF39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117580","Name":"(POS) Intra-State Sales of Services for Overseas Place of Supply from Registered Customer through Sales Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{5DAE448C-0BD5-4DC3-9BF9-B846921D2C71}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117581","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available through Purchase Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{2341D31D-659B-4C70-B0FD-20C4494A4F1F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117585","Name":"End Vendor type - Registered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117586","Name":"Begin Vendor type - Import","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117587","Name":"Import of Services from Import Associate Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal-","NodeType":"Use Case","TableID":81,"CaseID":"{F6DED4E3-7405-4E6E-B0DF-1320041F130A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117588","Name":"Import of Purchase of Service from Import Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B4662B2E-9E63-4BA7-A683-248E5811B566}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117589","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{6D031AA1-2009-4D4A-A8E7-01D9116EDC5C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117592","Name":"End Vendor type - Import","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117593","Name":"Begin Vendor Type- SEZ","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117594","Name":"SEZ of Purchase of Service from SEZ Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{AB179237-EF7C-4BB1-9406-46B7B6DD1449}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117599","Name":"End Vendor Type-SEZ","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117600","Name":"End GST Credit-Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117601","Name":"GST Credit- Non Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117602","Name":"GST Reverse Charge-Yes","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18023=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117603","Name":"Intra-State/Intra-Union Territory Purchase of Service from UnRegistered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{4CB6ACCD-BD47-4485-A757-62924EA09524}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117604","Name":"Purchase of Services from SEZ Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{B2CD61FA-9C30-4FE5-B5C5-5B535BA6DF96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117605","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{4D9AEA2D-B94B-40CC-B9D9-BC8D6FA19425}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117606","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal - Reverse Charge","NodeType":"Use Case","TableID":81,"CaseID":"{580975ED-52DE-4EF9-BD94-99425C52B570}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117607","Name":"Intra-State Purchase of Services from Unregistered/Registered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0751F148-5E1D-4EFB-9008-ECB2F2F6704D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117608","Name":"Inter-State Purchase of Services from Unregistered/Registered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{4D947EDC-3710-49D2-91D5-6446978D43EC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117650","Name":"End GST Reverse Charge -Yes","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117651","Name":"GST Input Service Distribution -Yes","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18022=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117652","Name":"ISD - Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{9639222B-DFA8-4F14-9A72-24E994C1C7DA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117653","Name":"ISD-Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{19FC1701-0FE4-4ED3-83B8-07DAB075A043}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117700","Name":"End GST Input Service Distribution -Yes","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117701","Name":"GST Input Service Distribution -No","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18022=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117702","Name":"Intra-State/Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{E530DADD-215F-47FF-8A84-46A1E62353CF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117703","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{5305AA1D-CF40-43CC-B9E3-B9471E33DCB3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117750","Name":"End GST Input Service Distribution -No","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117751","Name":"Begin Vendor Type - Import","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(4))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117752","Name":"Import of Services from Foreign Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{774A6E80-FBB4-4413-9144-6ACA8C6546D2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117753","Name":"Import of Goods from Foreign Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{9236A009-169D-4464-8B2C-62C94B782C26}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117754","Name":"Import of Services from Associate Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{54CB1855-9AD0-4A47-9777-D811C7FA1FDE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117759","Name":"End Vendor Type - Import","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117760","Name":"Begin Vendor Type - Unregistered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117761","Name":"IGST on Transportation of Goods through Purchase Journal/Journal/General Journal for Unregistered Vendor with Non-Availment.","NodeType":"Use Case","TableID":81,"CaseID":"{26ED31B0-75B8-439C-8E16-56518665184F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117764","Name":"End Vendor Type - Unregistered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117765","Name":"Begin Vendor Type - Registered","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117766","Name":"Intra-State/ Intra-Union Territory Purchase of Service from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{15E17CFF-8262-4E83-8FD4-3EC012EEA465}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117767","Name":"Inter-State Purchase of Goods from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{A734B9DD-A4C1-427E-AF18-6A8B27474F50}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117768","Name":"Inter-State Purchase of Service from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{DA8551C9-79B9-423C-801E-A8C868788300}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117769","Name":"Intra-State/ Intra-Union Territory Purchase of Goods from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{547DDC98-8D3C-46A0-84BE-03E71BA135DA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117770","Name":"(POS) Intra-State Purchase of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is not available through Purchase Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{997C3EE3-8453-43F1-A179-A32B19EFD8B8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117771","Name":"IGST on Transportation of Goods through Purchase Journal/Journal/General Journal for Registered Vendor with Non-Availment.","NodeType":"Use Case","TableID":81,"CaseID":"{4A025601-FF3D-4BA6-A567-0C31785D0D36}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117772","Name":"Place of supply as Vendors State in Purchase Transactions through Purchase Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{7ABC67E5-F6F0-4ECB-9634-55258429DFD8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117780","Name":"End Vendor Type - Registered","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117781","Name":"Begin Vendor Type-SEZ","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18008=1(6))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117782","Name":"SEZ of Services from SEZ Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{8DF66C94-890C-4007-9341-18D0565000FE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117799","Name":"End Vendor Type- SEZ","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117800","Name":"End GST Credit -Non Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117850","Name":"End Document Type-Invoice","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117851","Name":"Document Type-Credit Memo","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117852","Name":"GST Credit -Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117853","Name":"Purchase return of Imported Goods where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{7B91DD35-F410-4971-A2BC-DBCB67520105}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117854","Name":"Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{BBBBD283-C64C-4AFE-A14E-950791E18CF8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117856","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{9DFF9CBE-B1A5-4D28-A855-8783315A87D0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117857","Name":"Intra-State/ Intra-Union Territory Purchase Return of Goods to Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{85D7B57B-6657-4C5B-889D-282A48B9D0FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117858","Name":"Purchase Credit Memo/Return Order for Imported Services where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{C97F63C3-79EB-44D6-8AEA-B1710A9BBCE9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117859","Name":"Purchase Credit Memo/Return Order for Imported Services from Import Associate Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{D0EADC0B-CBC1-4E07-8ADF-5AE168893B04}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117860","Name":"Intra-State Purchase Return of Service from Unregistered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{789CE492-C2BE-4EEC-8E98-740310FDD0E3}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117861","Name":"Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0AAD1908-46DC-4370-8A8D-77096D9B30B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117862","Name":"Intra-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F857355F-9134-460C-89C8-FB0845206988}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117863","Name":"Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0AAD1908-46DC-4370-8A8D-77096D9B30B0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117864","Name":"Inter-State Purchase Return of Services to Registered Vendor where Input Tax Credit is available (Reverse Charge) through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{DA389E3B-A6C3-4DE1-9843-807B2161B9DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117865","Name":"ISD-Inter-State Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{812E9032-CA16-4FAB-A80B-94CD7BC5EB8D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117866","Name":"(POS) Intra-State Return/Credit Note of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F9A5047E-5B27-41E4-AF68-9497E3B52FAE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117867","Name":"Inter-State Purchase Return of Service from Unregistered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B5A9628F-46F5-48C4-9CC0-09CBAE26D7EE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117868","Name":"Intra-State Purchase Return from Composite Vendor where Input Tax Credit is available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{AFA9BC82-6757-44E3-B5E4-00029DACDA64}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117869","Name":"Intra-State Purchase Return of Services from SEZ Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{B053F5FC-CD93-4EA7-AC71-1590E006FAAE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117870","Name":"Intra-State Return of Services to Registered/ Unregistered Vendor where Input Tax Credit is available through Purchase Journal/General Journal (Reverse Charge)","NodeType":"Use Case","TableID":81,"CaseID":"{4C68E757-379A-4FD3-A58A-91F57954A9FC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117871","Name":"ISD - Intra-State/Intra-Union Territory Purchase Return of Service from Registered Vendor where Input Tax Credit is available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{783D79C8-B103-439F-9F75-9CB53B347C73}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117900","Name":"End GST Credit- Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117901","Name":"GST Credit Non-Availment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field18033=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117902","Name":"Inter-State Purchase Return of Goods to Registered Vendor where Input Tax Credit is Not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{CB0F4A5D-EE91-402C-AA30-C8B724D7DCC5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117903","Name":"Intra-State/ Intra-Union Territory Return of Goods from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{8E0D2716-6C6D-4CDF-863F-1E043223D7DF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117905","Name":"Inter-State Purchase Return of Service to Registered Vendor where Input Tax Credit is not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{F6932043-6A5A-4F55-B06A-DD7F76AFB52B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117906","Name":"Purchase return of Imported Goods where Input Tax Credit is Not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{8503C963-7C87-45CD-8543-607AE516F9F8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117907","Name":"Purchase Credit Memo for Imported Services where Input Tax Credit is not available through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{A6239FAB-E9D2-4FFC-90CC-A5D7858C4CD8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117908","Name":"Purchase Credit Memo/Return Order for Imported Services from Import Associate Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{CF175943-0F1A-4814-BF17-756FB88F497C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117909","Name":"Inter-State Purchase Return of Services to Unregistered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{0C04EF8F-6F19-4C41-928B-9F32605898A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117910","Name":"ISD - Intra-State/Intra-Union Territory Purchase Return of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal ","NodeType":"Use Case","TableID":81,"CaseID":"{00B59093-4DB8-4152-99DB-7F9368A143A8}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117911","Name":"(POS) Intra-State Return/Credit Note of Services for Overseas Place of Supply from Registered Vendor where Input Tax Credit is not available through Purchase Journal/Journal/General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{75C41C76-22FC-479E-836E-E9C838FF3320}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117912","Name":"Inter-State Purchase Return of Services to Registered Vendor where Input Tax Credit is not available (Reverse Charge) through Purchase Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{AE2974C0-8A1D-4821-8999-7617690C41FC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117913","Name":"Intra-State Return of Services to Registered/Unregistered Vendor where Input Tax Credit is not available through Purchase Journal and General Journal (Reverse charge)","NodeType":"Use Case","TableID":81,"CaseID":"{56D375F9-6B43-4460-B0F6-CAB18F44DE92}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117914","Name":"Intra-State Purchase Return of Service from Registered Vendor where Input Tax Credit is Not available through Purchase Journal/Journal/General Journal","NodeType":"Use Case","TableID":81,"CaseID":"{62275F50-6F85-4EA6-AA4F-0BACF20CF65E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-117950","Name":"End GST Credit Non-Availment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118000","Name":"End Document Type-Credit Memo","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118001","Name":"Document Type-Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118002","Name":"GST on Advance for Import Payment.","NodeType":"Use Case","TableID":81,"CaseID":"{7859624E-8AFD-4A64-B361-900053C11266}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118003","Name":"GST on Advance payment from SEZ Vendor.","NodeType":"Use Case","TableID":81,"CaseID":"{041E1938-9B6A-4173-937C-FF0FDC0E7309}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118004","Name":"Inter State GST on Advance Payment made to Registered/Unregistered Vendor.","NodeType":"Use Case","TableID":81,"CaseID":"{E411752D-2CC4-4CD4-9D35-1AE651319762}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118005","Name":"Intra State GST on Advance Payment made to Registered/Unregistered Vendor.","NodeType":"Use Case","TableID":81,"CaseID":"{0686E40E-9643-42C8-B4D1-7587447E98E0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118006","Name":"GST on Advance Payment made to Vendor through General Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{C60D4ED2-E3FC-41BC-BB8D-F1B521984712}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118050","Name":"End Document Type-Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118080","Name":"End Account Type- Vendor","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118090","Name":"GST Credit","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(0),Field18014=1(4|5|6|7))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118091","Name":"GST Opening Liability IGST","NodeType":"Use Case","TableID":81,"CaseID":"{BE4AF8DF-BB6D-432C-B598-B7B481D8D826}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118092","Name":"GST Opening Liability CGST","NodeType":"Use Case","TableID":81,"CaseID":"{5B85FA47-8603-4A7F-9B76-4A5AD999CA81}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118093","Name":"GST Opening TDS Credit - CGST","NodeType":"Use Case","TableID":81,"CaseID":"{7FD02BAE-DA8D-4100-962E-6A8F7FDE823C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118094","Name":"GST Opening TDS Credit - IGST","NodeType":"Use Case","TableID":81,"CaseID":"{09E58D68-C9B5-4A27-B4FE-3BCA8B383E14}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118095","Name":"GST Opening TDS Credit - SGST","NodeType":"Use Case","TableID":81,"CaseID":"{851F544F-7349-4E29-AF19-A0B3B72AB0AC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118096","Name":"GST Opening TCS Credit - CGST","NodeType":"Use Case","TableID":81,"CaseID":"{AF9D718A-2832-4D92-A195-4D7DD81E2029}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118097","Name":"GST Opening TCS Credit - IGST","NodeType":"Use Case","TableID":81,"CaseID":"{33896D17-0F26-4376-8304-7BA20BE4E6D4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118098","Name":"GST Opening TCS Credit - SGST","NodeType":"Use Case","TableID":81,"CaseID":"{36207D8F-34B2-4AF3-83EC-96642DA44DFB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118103","Name":"GST Opening IGST","NodeType":"Use Case","TableID":81,"CaseID":"{325D0E84-286F-437E-BFE1-EBB6F575AD39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118104","Name":"GST Opening CGST","NodeType":"Use Case","TableID":81,"CaseID":"{34A74D02-F64A-4329-B0B3-B20E07D5A79A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118105","Name":"GST Opening SGST","NodeType":"Use Case","TableID":81,"CaseID":"{BBA0DF22-691B-46EB-8500-8B270596F2E9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118106","Name":"GST Opening Liability SGST","NodeType":"Use Case","TableID":81,"CaseID":"{97CF7642-AB0E-4686-A5CE-3D7C7C641E7E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118108","Name":"Account Type - G/L * Tax Type End","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118110","Name":"Account Type - G/L Account","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118111","Name":"Intra-state purchase of services where Services is paid directly and service provider is registered and GST Credit is Not Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{77160361-37A9-43BD-A71B-BFA6853D1CFB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118112","Name":"Inter-state purchase of services where Services is paid directly and service provider is registered and GST Credit is Not Available on Purchase Journal and Gen. Journals","NodeType":"Use Case","TableID":81,"CaseID":"{869FF9BE-3EA8-424B-973E-E27D6E370807}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118113","Name":"Intra-state purchase of services where Services is paid directly through bank and service provider is registered and GST Credit is Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{2D1A7414-2844-4128-B026-CA683BCEA058}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118114","Name":"Inter-state purchase of services where Services is paid directly through bank and service provider is registered and GST Credit is Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{5265955A-2DE6-49CD-AFBE-D314E2D049FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118115","Name":"Inter-state purchase of services where Services is paid directly and service provider is Unregistered and GST Credit is Not Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{2A85CD62-7897-47FF-808B-E0A11131071F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118116","Name":"Intra-state purchase of services where Services is paid directly and service provider is Unregistered and GST Credit is Not Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{EAD964E4-7CD1-4462-96B3-78A3FA9DE087}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118117","Name":"Inter-state purchase of services where Services is paid directly through bank and service provider is Unregistered and GST Credit is Available on Purchase Journal and Gen. Journal.","NodeType":"Use Case","TableID":81,"CaseID":"{99AB0C39-33A7-47F5-8659-968DBAEEA2F2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118125","Name":"End - Account Type - G/L Account","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118150","Name":"End Payment","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118151","Name":"Service Transfer","NodeType":"Begin","TableID":18351,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field11=1(<>''),Field12=1(<>''),Field20=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118152","Name":"Interstate Service Transfer Order","NodeType":"Use Case","TableID":18351,"CaseID":"{FEB751CF-3E8D-42AB-965E-51097FF60E64}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118153","Name":"IntraState Service Transfer Order","NodeType":"Use Case","TableID":18351,"CaseID":"{D68B3FE8-78C6-492D-AC1A-FFA29F17A50D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118200","Name":"End Service Transfer","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118201","Name":"Stock Transfer","NodeType":"Begin","TableID":5741,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2) WHERE(Field18394=1(<>''),Field18395=1(<>''),Field18396=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118202","Name":"IntraState Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{A59206F4-476D-4ED9-8665-08535755BB5E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118203","Name":"InterState Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{E52D7679-7E9C-4623-9CA7-AB704EF2465C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118204","Name":"Bonded Inter-State Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{AECAE480-71C8-41C4-B247-FB33DFC9C039}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118205","Name":"Bonded Intra-State Transfer Order","NodeType":"Use Case","TableID":5741,"CaseID":"{C215F153-718E-4936-BA99-ACB4E2F2BBC4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118250","Name":"End Stock Transfer","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118251","Name":"Journal Bank Charges","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field13=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118252","Name":"Document Type-Invoice","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field9=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118253","Name":"GST on Bank Charges against Customer Receipt (Intra Sate)","NodeType":"Use Case","TableID":18247,"CaseID":"{46054EB7-3CE7-421C-B047-00658AC5C150}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118254","Name":"Intra-State Bank Payment with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{7AC16E57-E977-41B3-9338-1399811A688B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118255","Name":"GST on Bank Charges against Customer Receipt (Inter State)","NodeType":"Use Case","TableID":18247,"CaseID":"{668C2032-DD90-4A23-8F30-04B69FE7C99E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118256","Name":"Inter-State Bank Payment with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{98A43A23-24F8-4FC2-9D4E-6B45D74B02FB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118300","Name":"End Document Type-Invoice","NodeType":"End","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118301","Name":"Document Type-Credit Memo","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field9=1(2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118302","Name":"GST on Bank Charges against Customer Refund (Inter State)","NodeType":"Use Case","TableID":18247,"CaseID":"{2026E996-050E-4647-8D77-9B2E8FF1B068}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118303","Name":"Inter State GST Refund on Bank Charges.","NodeType":"Use Case","TableID":18247,"CaseID":"{4CB74CDB-63C8-492B-8819-BA937750388D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118304","Name":"Intra State Refund GST on Bank Charges.","NodeType":"Use Case","TableID":18247,"CaseID":"{7E6E164B-CB38-4B5A-ADAA-BB51CAEEA5A7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118305","Name":"Inter-State Bank Payment for Credit Memo with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{429F37B1-0D9F-4B5A-BC3F-AC53F994BC32}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118306","Name":"Intra-State Bank Payment for Credit Memo with Bank Charges with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{A26AB5CA-52E6-4626-A426-C656627502E4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118350","Name":"End Document Type-Credit Memo","NodeType":"End","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118351","Name":"Document Type - Blank","NodeType":"Begin","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field2,Field3,Field4) WHERE(Field9=1(0))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118352","Name":"Intra-State Bank charges on bank Payment with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{F230C59A-547E-41CA-B6B9-5E8BE22A1BEF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118353","Name":"Inter-State Bank charges on bank Payment with GST.","NodeType":"Use Case","TableID":18247,"CaseID":"{50157D1D-C080-4AF0-8C63-0B5E918F5AF2}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118375","Name":"End Document Type - Blank","NodeType":"End","TableID":18247,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-118400","Name":"End Journal Bank Charges","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119000","Name":"GST Service Management","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field7=1(<>''),Field18441=1(<>''),Field18443=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119001","Name":"Service Document","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(0|1|2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119002","Name":"Intra State Service to Registered/Unregistered Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{B90130D9-0471-4034-8687-11B04ABDCE72}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119003","Name":"Inter State Service to Registered/Unregistered Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{4DD701D1-41A9-432E-9E95-8F8D08AB2C67}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119004","Name":"Inter State Service to SEZ Unit Customer through Service Quote/ Order/ Invoice.","NodeType":"Use Case","TableID":5902,"CaseID":"{5CB02A72-982F-4AD6-A762-CE881DC52ACC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119005","Name":"Inter State Service to SEZ Development Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{0282EB09-4676-4A39-B2EC-EDC9568BA92B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119006","Name":"Intra State Service to Deemed Export Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{ADF43278-38CD-463B-8E08-DD604EC3C50C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE119007","Name":"Inter State Service to Export Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{1CB4368B-D6AF-4B89-AFEB-8641B0152451}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119008","Name":"Inter State Service to SEZ Unit Customer through Service Quote/ Order/ Invoice without payment of Duty.","NodeType":"Use Case","TableID":5902,"CaseID":"{EC2138A1-46D7-430B-B335-F8D6C345BB16}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119010","Name":"Intra State Service to SEZ Development Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{4C0ECC95-F5CD-46B2-B302-84C3A5AD7D4E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119011","Name":"Inter State Service to Deemed Export Customer through Service Quote/ Order/ Invoice","NodeType":"Use Case","TableID":5902,"CaseID":"{135115A7-1D82-4528-959B-9A35775455CD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119200","Name":"End Service Document","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119201","Name":"Service Return","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119202","Name":"Inter State Return of Service to Registered/Unregistered Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{AA215442-D318-4160-A666-57E3FBE06CDD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119203","Name":"Intra State Return of Service to Registered/Unregistered Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{C0774889-632D-4799-AA04-DA25EB643832}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119204","Name":"Inter State Service to SEZ Development Customer through Service Credit Memo\n","NodeType":"Use Case","TableID":5902,"CaseID":"{95551286-5BF2-42D5-895A-4A4F450A424B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119205","Name":"Intra State Return of Service to Deemed Export Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{DD75810D-2D5B-438A-A3AB-079E1B1D7AB9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119206","Name":"Inter State Service to Deemed Export Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{C211C520-8428-4E89-8A9A-446A5EC41D39}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119207","Name":"Inter State Return of Service to SEZ Unit Customer through Service Credit Memo with payment of duty","NodeType":"Use Case","TableID":5902,"CaseID":"{6CFFB9A1-521E-4D60-AAFB-BDB044405A2A}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119208","Name":"Inter State Service to Export Customer through Service Credit Memo","NodeType":"Use Case","TableID":5902,"CaseID":"{0A055D50-A23B-48A5-BADA-9D00D97EED3B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119400","Name":"End Service Return","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119401","Name":"Begin Exempeted","NodeType":"Begin","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18446=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119402","Name":"Intra State Service to Registered/Unregistered/Exempted Customer through Service Quote/ Order/ Invoice/ Credit Memo - Exempted","NodeType":"Use Case","TableID":5902,"CaseID":"{D460C15F-47A6-41A4-9B9F-8EA3738C2E40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119403","Name":"Inter State Service to Registered/Unregistered/Exempted Customer through Service Quote/ Order/ Invoice/ Credit Memo - Exempted","NodeType":"Use Case","TableID":5902,"CaseID":"{990AEEEE-91BD-4C0E-8346-897F141E4EDB}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119410","Name":"End Exempeted","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119800","Name":"End GST Service Management","NodeType":"End","TableID":5902,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-119999","Name":"End - GST","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200001","Name":"TDS","NodeType":"Begin","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"TDS","IsTaxTypeRoot":true},{"Code":"TE-200002","Name":"Purchase","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(1|2),Field18716=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200003","Name":"Domestic Vendor","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field91=1(''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200004","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{DB230097-4AA7-44E2-9373-02A467DC95AC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200005","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{A8E114BF-F8CD-44DB-A2B3-614BC18F4442}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200006","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":39,"CaseID":"{F39A0864-D2E7-40A5-9633-B6680CD3EC6F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200007","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{1E42FDF3-1868-4205-A6D6-D2FC67BD132F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200008","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified with Concessional Codes and Posting Date is greater than Start Date","NodeType":"Use Case","TableID":39,"CaseID":"{F8BF58D9-7681-458D-9DFC-71EA23A9F853}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200009","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where no PAN No. is specified along with Concessional Codes and Posting Date is greater then Start Date","NodeType":"Use Case","TableID":39,"CaseID":"{1ABE2C56-9700-4A30-A14A-5E8ECC2F32DD}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200010","Name":"Calculation of Tax Deduction at Source on Vendor Invoice where PAN No. is specified without Concessional Codes with Applies-to ID.","NodeType":"Use Case","TableID":39,"CaseID":"{B8A33720-278B-45B4-8465-2D9FA273D813}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200015","Name":"End Domestic Vendor","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200050","Name":"NRI Vendor","NodeType":"Begin","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field91=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200051","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{5D4C69D3-E776-4E9D-B397-09336BFDC884}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200052","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{FEE5DFFF-0BC1-4246-AD90-6CB3DC44A451}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200053","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":39,"CaseID":"{487C3669-B12A-42C0-9FEA-D23AB1426BF6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200054","Name":"Calculation of Tax Deduction at Source on Non-Resident Vendor Invoice where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":39,"CaseID":"{75222E87-A1A0-48EE-9211-D3F59009C287}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200100","Name":"End NRI Vendor","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200150","Name":"End Purchase","NodeType":"End","TableID":39,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200151","Name":"Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field30=1(0),Field18544=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200152","Name":"NRI Vendor","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(2),Field12=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200153","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":81,"CaseID":"{271D5BC6-17E8-424E-9E34-3BEE548F938F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200154","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{D9B47164-1681-4C6F-A746-8D710E5F103D}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200155","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{25C2D9C3-2A87-41A6-9AB9-DC76E818DF0C}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200156","Name":"Calculation of Tax Deduction at Source through General Journal for Non-Residents Vendor where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{08737F79-35F1-4670-BD1D-E41764E3A9DE}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200200","Name":"End NRI Vendor","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200201","Name":"Domestic Vendor","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(2),Field12=1(''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200202","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":81,"CaseID":"{B0C259BC-64CC-4818-887A-3337D357CDFF}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200203","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where PAN No. is specified without Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{33BFBE99-9140-4112-A55B-35EC0D9B61B9}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200204","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{FA0E357D-1AC0-42AA-94DE-6DACA521D38E}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200205","Name":"Calculation of Tax Deduction at Source through General Journal for Vendor where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{0CDED40A-A359-45E0-AAEC-AFE7BBCFBC96}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200250","Name":"End Domestic Vendor","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200251","Name":"Customer","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200252","Name":"Calculation of Tax Deducted at Source through Bank Receipt Voucher/Cash Receipt Voucher/General Journal/Cash Receipt Journal for Customers with PAN and without Concessional Code.\n","NodeType":"Use Case","TableID":81,"CaseID":"{C1C8C9A9-1AE8-48D7-AB60-9EA08AA0AF21}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200253","Name":"Calculation of Tax Deducted at Source through Bank Receipt Voucher/Cash Receipt Voucher/General Journal/Cash Receipt Journal for Customers with PAN and Concessional Code.\n","NodeType":"Use Case","TableID":81,"CaseID":"{98E3D17E-B644-4DBA-836C-CF26A20EDD3F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200300","Name":"End Customer","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200301","Name":"Provisional Entry","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200302","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{7D508D37-53AC-4E44-9669-743A8BA82A3F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200303","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where both PAN No. and Concessional Codes are not specified.\n","NodeType":"Use Case","TableID":81,"CaseID":"{25EADDE7-E634-4A01-9E4B-74E7C9D5AA62}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200304","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where no PAN No. is specified along with Concessional Codes.\n","NodeType":"Use Case","TableID":81,"CaseID":"{9E57C058-0570-4828-B24A-760D35A38D19}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200305","Name":"Calculation of Tax Deduction at Source with Provisional Entry through Purchase Journal for Vendor where PAN No. is specified without Concessional Codes.","NodeType":"Use Case","TableID":81,"CaseID":"{61ED733A-A96B-45ED-BE21-A98A8B65566B}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200350","Name":"End Provisional Entry","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-200400","Name":"End Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-299991","Name":"End TDS","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300001","Name":"TCS","NodeType":"Begin","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"TCS","IsTaxTypeRoot":true},{"Code":"TE-300002","Name":"Sales","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field18838=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300003","Name":"Sales Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(1|0|2))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300004","Name":"TCS to be calculated on Customer Invoice with PAN and without Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{BC834CD9-7782-4B77-8D0E-0D7EF1679775}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300005","Name":"PAN No. Validations (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{E696BECA-20A6-498E-9615-114585216ABA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300006","Name":"TCS to be calculated on Customer Invoice without PAN and without Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{91492C74-9837-4256-8B07-1BA40247EA73}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300007","Name":"TCS to be calculated on Customer Invoice with PAN and with Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{4DC37F56-3558-400D-ABB1-5573CCC0FD30}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300008","Name":"TCS to be calculated on Customer Invoice with Resource and Fixed Asset (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{B8AC2649-DEA6-42B1-BF69-62A706C6DC40}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300009","Name":"TCS to be calculated on Customer Invoice without PAN and with Concessional (through Sales Quote/ Sales Order/ Sales Invoice)","NodeType":"Use Case","TableID":37,"CaseID":"{C8358DF6-AC70-4AB2-94E4-D609ADC635CA}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300050","Name":"End Sales Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300051","Name":"Sales Return Document","NodeType":"Begin","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field3,Field4) WHERE(Field1=1(5|3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300052","Name":"TCS to be calculated on Customer Invoice without PAN and without Concessional (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{B3983817-AAEE-4AD8-97D8-16A875361BA7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300053","Name":"PAN No Validations (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{800AD5B2-89E5-4616-8281-37DDEC382E76}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300054","Name":"TCS to be calculated on Customer Invoice with Resource and Fixed Asset (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{F687A3C1-9192-42D2-A042-39C2B63B35D7}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300055","Name":"TCS to be calculated on Customer Invoice with PAN and without Concessional (Through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{B1B995F9-C500-4846-9FE8-833A900F0846}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300056","Name":"TCS to be calculated on Customer Invoice with PAN and with Concessional (Through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{77DE8E48-908D-4E7E-9FBE-98B9EFCB7AE5}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300057","Name":"TCS to be calculated on Customer Invoice without PAN and with Concessional (through Sales Return Order/ Credit Memo)","NodeType":"Use Case","TableID":37,"CaseID":"{5E2AC8E9-8A09-4BA9-8C30-C1CD27CAA214}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300100","Name":"End Sales Retun Document","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300150","Name":"End Sales","NodeType":"End","TableID":37,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300151","Name":"Receipt","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field3=1(1),Field6=1(1|2|3),Field30=1(0),Field18807=1(<>''))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300152","Name":"Invoice and Payment","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(2|1))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300153","Name":"TCS to be calculated on Customer Invoice and Payment with PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{593E67FC-EACA-4C9B-8F95-4A1D3D1712E4}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300154","Name":"TCS to be calculated on Customer Invoice and Payment without PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{DA63D636-4773-418A-8123-6522A7867E5F}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300155","Name":"TCS to be calculated on Customer Invoice and Payment with PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{6B7BF4A0-0250-4480-9482-733992652D29}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300156","Name":"TCS to be calculated on Customer Invoice and Payment without PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{D9843455-A721-409B-8A37-D111331A8024}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300157","Name":"PAN No. Validations through General journal","NodeType":"Use Case","TableID":81,"CaseID":"{CB9FAD0D-74A9-4DD5-A83A-E2F6A1FABA06}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300158","Name":"TCS to be calculated on Receipt of Payment with PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{42747DC4-6388-459E-9D2E-103F3F4E2AB0}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300159","Name":"TCS to be calculated on Receipt of Payment without PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{82174562-748D-4C6F-AE37-852C7CCEFEAC}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300160","Name":"TCS to be calculated on Receipt of Payment without PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{1E2CC6D7-1793-4F6E-BF59-A79A941FD309}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300161","Name":"TCS to be calculated on Receipt of Payment with PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{6F4B6558-D97D-463E-BCC2-A8AE3C7EB872}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300200","Name":"End Invoice and Payment","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300201","Name":"Credit Memo","NodeType":"Begin","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","Condition":"VERSION(1) SORTING(Field1,Field51,Field2) WHERE(Field6=1(3))","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300202","Name":"TCS to be calculated on Customer Credit Memo without PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{4BC77C19-4CA3-4913-8EB5-11EDAE308A25}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300203","Name":"TCS to be calculated on Customer Credit Memo without PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{3ED702E0-AFA2-4771-AD1F-8FBEF7383436}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300204","Name":"TCS to be calculated on Customer Credit Memo with PAN and with Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{088AD93D-6264-4C00-8E0D-F15F40E5E4F6}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300205","Name":"TCS to be calculated on Customer Credit Memo with PAN and without Concessional (Through General Journal) ","NodeType":"Use Case","TableID":81,"CaseID":"{994E3FD7-2FE1-4B6D-AC06-F819F8B94F07}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300250","Name":"End Credit Memo","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-300300","Name":"End Receipt","NodeType":"End","TableID":81,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-399991","Name":"END TCS","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false},{"Code":"TE-999999","Name":"End Tax Engine","NodeType":"End","TableID":0,"CaseID":"{00000000-0000-0000-0000-000000000000}","TaxType":"","IsTaxTypeRoot":false}]]]> Codeunit Tax Base Tax Engine Setup - NamedType UseCaseTreeLbl diff --git a/Apps/US/IRSForms/app/src/Extensions/IRS1099BaseAppSubscribers.Codeunit.al b/Apps/US/IRSForms/app/src/Extensions/IRS1099BaseAppSubscribers.Codeunit.al index de78659372..a90094f474 100644 --- a/Apps/US/IRSForms/app/src/Extensions/IRS1099BaseAppSubscribers.Codeunit.al +++ b/Apps/US/IRSForms/app/src/Extensions/IRS1099BaseAppSubscribers.Codeunit.al @@ -148,14 +148,10 @@ codeunit 10032 "IRS 1099 BaseApp Subscribers" IRS1099VendorFormBoxSetup: Record "IRS 1099 Vendor Form Box Setup"; PeriodNo: Code[20]; begin -#if not CLEAN25 - if not IRSFormsFeature.IsEnabled() then + if not SyncIRSDataInGenJnlLine(GenJnlLine) then exit; -#endif - if GenJnlLine."Document Type" in [GenJnlLine."Document Type"::Invoice, GenJnlLine."Document Type"::"Credit Memo"] then begin - PeriodNo := IRSReportingPeriod.GetReportingPeriod(GenJnlLine."Posting Date"); - GetIRS1099VendorFormBoxSetupFromGenJnlLine(IRS1099VendorFormBoxSetup, GenJnlLine, PeriodNo); - end; + PeriodNo := IRSReportingPeriod.GetReportingPeriod(GenJnlLine."Posting Date"); + GetIRS1099VendorFormBoxSetupFromGenJnlLine(IRS1099VendorFormBoxSetup, GenJnlLine, PeriodNo); GenJnlLine.Validate("IRS 1099 Reporting Period", PeriodNo); GenJnlLine.Validate("IRS 1099 Form No.", IRS1099VendorFormBoxSetup."Form No."); GenJnlLine.Validate("IRS 1099 Form Box No.", IRS1099VendorFormBoxSetup."Form Box No."); @@ -174,14 +170,23 @@ codeunit 10032 "IRS 1099 BaseApp Subscribers" procedure UpdateIRSReportingAmountInGenJnlLine(var GenJnlLine: Record "Gen. Journal Line") begin -#if not CLEAN25 - if not IRSFormsFeature.IsEnabled() then + if not SyncIRSDataInGenJnlLine(GenJnlLine) then exit; -#endif GenJnlLine.Validate("IRS 1099 Reporting Amount", GenJnlLine.Amount); SaveChangesInGenJnlLine(GenJnlLine); end; + local procedure SyncIRSDataInGenJnlLine(var GenJnlLine: Record "Gen. Journal Line"): Boolean + begin +#if not CLEAN25 + if not IRSFormsFeature.IsEnabled() then + exit(false); +#endif + if GenJnlLine.IsTemporary() then + exit(false); + exit(GenJnlLine."Document Type" in [GenJnlLine."Document Type"::Invoice, GenJnlLine."Document Type"::"Credit Memo"]); + end; + local procedure SaveChangesInGenJnlLine(var GenJnlLine: Record "Gen. Journal Line") begin if GenJnlLine."Line No." <> 0 then diff --git a/Apps/US/IRSForms/test/src/IRS1099DocumentTests.Codeunit.al b/Apps/US/IRSForms/test/src/IRS1099DocumentTests.Codeunit.al index 70aaee2493..960aafd957 100644 --- a/Apps/US/IRSForms/test/src/IRS1099DocumentTests.Codeunit.al +++ b/Apps/US/IRSForms/test/src/IRS1099DocumentTests.Codeunit.al @@ -585,7 +585,7 @@ codeunit 148010 "IRS 1099 Document Tests" [Test] [TransactionModel(TransactionModel::AutoRollback)] - procedure ValidateNotInsertedGenJnlLineAmountWithLineNo() + procedure ValidateNotInsertedInvGenJnlLineAmountWithLineNo() var GenJnlLine: Record "Gen. Journal Line"; #if not CLEAN25 @@ -595,20 +595,184 @@ codeunit 148010 "IRS 1099 Document Tests" #endif begin // [FEATURE] [UT] - // [SCENARIO 536496] It is possible to validate the amount in the not inserted general journal line with line no. already specified + // [SCENARIO 536496] It is possible to validate the amount in the not inserted invoice general journal line with line no. already specified Initialize(); #if not CLEAN25 BindSubscription(IRSFormsEnableFeature); #endif - // [GIVEN] "Gen. Journal Line" with "Line No." = 1 + // [GIVEN] "Gen. Journal Line" with "Document Type" = "Invoice" "Line No." = 1 + GenJnlLine."Line No." := 1; + GenJnlLine."Document Type" := GenJnlLine."Document Type"::Invoice; + // [WHEN] Validate Amount field with 100 + GenJnlLine.Validate(Amount, 100); + // [THEN] The IRS 1099 Reporting Amount is 100 + GenJnlLine.TestField("IRS 1099 Reporting Amount", 100); + +#if not CLEAN25 + UnbindSubscription(IRSFormsEnableFeature); +#endif + end; + + [Test] + [TransactionModel(TransactionModel::AutoRollback)] + procedure ValidateNotInsertedCrMemoGenJnlLineAmountWithLineNo() + var + GenJnlLine: Record "Gen. Journal Line"; +#if not CLEAN25 +#pragma warning disable AL0432 + IRSFormsEnableFeature: Codeunit "IRS Forms Enable Feature"; +#pragma warning restore AL0432 +#endif + begin + // [FEATURE] [UT] + // [SCENARIO 536496] It is possible to validate the amount in the not inserted credit memo general journal line with line no. already specified + + Initialize(); +#if not CLEAN25 + BindSubscription(IRSFormsEnableFeature); +#endif + + // [GIVEN] "Gen. Journal Line" with "Document Type" = "Credit Memo" "Line No." = 1 GenJnlLine."Line No." := 1; + GenJnlLine."Document Type" := GenJnlLine."Document Type"::"Credit Memo"; // [WHEN] Validate Amount field with 100 GenJnlLine.Validate(Amount, 100); // [THEN] The IRS 1099 Reporting Amount is 100 GenJnlLine.TestField("IRS 1099 Reporting Amount", 100); +#if not CLEAN25 + UnbindSubscription(IRSFormsEnableFeature); +#endif + end; + + [Test] + [TransactionModel(TransactionModel::AutoRollback)] + procedure ValidateAmountInTempGenJnlLine() + var + TempGenJnlLine: Record "Gen. Journal Line" temporary; +#if not CLEAN25 +#pragma warning disable AL0432 + IRSFormsEnableFeature: Codeunit "IRS Forms Enable Feature"; +#pragma warning restore AL0432 +#endif + begin + // [FEATURE] [UT] + // [SCENARIO 539449] The amount validation of the temporary general journal line does not affect the IRS amount + + Initialize(); +#if not CLEAN25 + BindSubscription(IRSFormsEnableFeature); +#endif + + // [GIVEN] "Gen. Journal Line" with "Line No." = 1 + TempGenJnlLine."Line No." := 1; + // [WHEN] Validate Amount field with 100 + TempGenJnlLine.Validate(Amount, 100); + // [THEN] The IRS 1099 Reporting Amount is 0 + TempGenJnlLine.TestField("IRS 1099 Reporting Amount", 0); + +#if not CLEAN25 + UnbindSubscription(IRSFormsEnableFeature); +#endif + end; + + [Test] + [TransactionModel(TransactionModel::AutoRollback)] + procedure ValidatePostingDateInTempGenJnlLine() + var + TempGenJnlLine: Record "Gen. Journal Line" temporary; +#if not CLEAN25 +#pragma warning disable AL0432 + IRSFormsEnableFeature: Codeunit "IRS Forms Enable Feature"; +#pragma warning restore AL0432 +#endif + begin + // [FEATURE] [UT] + // [SCENARIO 539449] The posting date validation of the temporary general journal line does not affect the IRS period + + Initialize(); +#if not CLEAN25 + BindSubscription(IRSFormsEnableFeature); +#endif + + // [GIVEN] "IRS Reporting Period" = "X" with "Starting Date" = work date + LibraryIRSReportingPeriod.CreateOneDayReportingPeriod(WorkDate()); + // [GIVEN] "Gen. Journal Line" with "Document Type" = Invoice and "Line No." = 1 + TempGenJnlLine."Document Type" := TempGenJnlLine."Document Type"::Invoice; + TempGenJnlLine."Line No." := 1; + // [WHEN] Validate posting date with work date + TempGenJnlLine.Validate("Posting Date", WorkDate()); + // [THEN] The IRS 1099 Reporting Period is blank + TempGenJnlLine.TestField("IRS 1099 Reporting Period", ''); + +#if not CLEAN25 + UnbindSubscription(IRSFormsEnableFeature); +#endif + end; + + [Test] + [TransactionModel(TransactionModel::AutoRollback)] + procedure ValidateAmountInPaymentGenJnlLine() + var + GenJnlLine: Record "Gen. Journal Line"; +#if not CLEAN25 +#pragma warning disable AL0432 + IRSFormsEnableFeature: Codeunit "IRS Forms Enable Feature"; +#pragma warning restore AL0432 +#endif + begin + // [FEATURE] [UT] + // [SCENARIO 539449] The amount validation of the payment general journal line does not affect the IRS amount + + Initialize(); +#if not CLEAN25 + BindSubscription(IRSFormsEnableFeature); +#endif + + // [GIVEN] "Gen. Journal Line" with "Document Type" = Payment and "Line No." = 1 + GenJnlLine."Line No." := 1; + GenJnlLine."Document Type" := GenJnlLine."Document Type"::Payment; + // [WHEN] Validate Amount field with 100 + GenJnlLine.Validate(Amount, 100); + // [THEN] The IRS 1099 Reporting Amount is 0 + GenJnlLine.TestField("IRS 1099 Reporting Amount", 0); + +#if not CLEAN25 + UnbindSubscription(IRSFormsEnableFeature); +#endif + end; + + [Test] + [TransactionModel(TransactionModel::AutoRollback)] + procedure ValidatePostingDateInPaymentGenJnlLine() + var + GenJnlLine: Record "Gen. Journal Line"; +#if not CLEAN25 +#pragma warning disable AL0432 + IRSFormsEnableFeature: Codeunit "IRS Forms Enable Feature"; +#pragma warning restore AL0432 +#endif + begin + // [FEATURE] [UT] + // [SCENARIO 539449] The posting date validation of the payment general journal line does not affect the IRS period + + Initialize(); +#if not CLEAN25 + BindSubscription(IRSFormsEnableFeature); +#endif + + // [GIVEN] "IRS Reporting Period" = "X" with "Starting Date" = work date + LibraryIRSReportingPeriod.CreateOneDayReportingPeriod(WorkDate()); + // [GIVEN] "Gen. Journal Line" with "Document Type" = Payment and "Line No." = 1 + GenJnlLine."Document Type" := GenJnlLine."Document Type"::Payment; + GenJnlLine."Line No." := 1; + // [WHEN] Validate posting date with work date + GenJnlLine.Validate("Posting Date", WorkDate()); + // [THEN] The IRS 1099 Reporting Period is blank + GenJnlLine.TestField("IRS 1099 Reporting Period", ''); + #if not CLEAN25 UnbindSubscription(IRSFormsEnableFeature); #endif diff --git a/Apps/W1/APIV2/app/src/pages/APIV2CompanyInformation.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2CompanyInformation.Page.al index b19cbd79bc..71145a90b2 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2CompanyInformation.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2CompanyInformation.Page.al @@ -3,6 +3,7 @@ namespace Microsoft.API.V2; using Microsoft.Foundation.Company; using Microsoft.Foundation.Period; using Microsoft.Finance.GeneralLedger.Setup; +using System.Environment.Configuration; page 30011 "APIV2 - Company Information" { @@ -109,6 +110,15 @@ page 30011 "APIV2 - Company Information" Caption = 'Picture'; Editable = false; } + field(experience; Experience) + { + Caption = 'Experience'; + + trigger OnValidate() + begin + ExperienceUpdated := true; + end; + } field(lastModifiedDateTime; Rec.SystemModifiedAt) { Caption = 'Last Modified Date'; @@ -129,8 +139,13 @@ page 30011 "APIV2 - Company Information" trigger OnModifyRecord(): Boolean var CompanyInformation: Record "Company Information"; + ApplicationAreaMgmtFacade: Codeunit "Application Area Mgmt. Facade"; begin CompanyInformation.GetBySystemId(Rec.SystemId); + if ExperienceUpdated then + if not ApplicationAreaMgmtFacade.SaveExperienceTierCurrentCompany(Experience) then + Error(SaveExperienceTierFailedErr); + Rec.Modify(true); SetCalculatedFields(); @@ -140,11 +155,15 @@ page 30011 "APIV2 - Company Information" LCYCurrencyCode: Code[10]; TaxRegistrationNumber: Text[50]; FiscalYearStart: Date; + Experience: Text; + ExperienceUpdated: Boolean; + SaveExperienceTierFailedErr: Label 'Failed to save experience tier for the current company.'; local procedure SetCalculatedFields() var AccountingPeriod: Record "Accounting Period"; GeneralLedgerSetup: Record "General Ledger Setup"; + ApplicationAreaMgmtFacade: Codeunit "Application Area Mgmt. Facade"; EnterpriseNoFieldRef: FieldRef; begin GeneralLedgerSetup.Get(); @@ -158,6 +177,9 @@ page 30011 "APIV2 - Company Information" TaxRegistrationNumber := EnterpriseNoFieldRef.Value() else TaxRegistrationNumber := Rec."VAT Registration No."; + + ApplicationAreaMgmtFacade.GetExperienceTierCurrentCompany(Experience); + ExperienceUpdated := false; end; procedure IsEnterpriseNumber(var EnterpriseNoFieldRef: FieldRef): Boolean diff --git a/Apps/W1/APIV2/test/src/APIV2CompanyInfoE2E.Codeunit.al b/Apps/W1/APIV2/test/src/APIV2CompanyInfoE2E.Codeunit.al index a465c50eaf..2b5efeeeec 100644 --- a/Apps/W1/APIV2/test/src/APIV2CompanyInfoE2E.Codeunit.al +++ b/Apps/W1/APIV2/test/src/APIV2CompanyInfoE2E.Codeunit.al @@ -14,10 +14,12 @@ codeunit 139806 "APIV2 - Company Info. E2E" LibraryUtility: Codeunit "Library - Utility"; Assert: Codeunit "Assert"; LibraryGraphMgt: Codeunit "Library - Graph Mgt"; + ApplicationAreaMgmtFacade: Codeunit "Application Area Mgmt. Facade"; IsInitialized: Boolean; ServiceNameTxt: Label 'companyInformation'; EmptyJSONErr: Label 'The JSON should not be blank.'; WrongPropertyValueErr: Label 'Incorrect property value for %1.', Comment = '%1=Property name'; + SaveExperienceTierFailedErr: Label 'Failed to save experience tier for the current company.'; local procedure Initialize() begin @@ -79,12 +81,73 @@ codeunit 139806 "APIV2 - Company Info. E2E" CompanyInformation.TestField(Name, ModifiedName); end; + [Test] + procedure TestModifyValidExperinceTier() + var + CompanyInformation: Record "Company Information"; + RequestBody: Text; + Response: Text; + TargetURL: Text; + CurrentExperience: Text; + ModifiedExperience: Text; + begin + // [SCENARIO 204030] User can modify the experince tier through a PATCH request. + Initialize(); + + // [Given] A company information exists. + CompanyInformation.Get(); + ApplicationAreaMgmtFacade.GetExperienceTierCurrentCompany(CurrentExperience); + if CurrentExperience = 'Basic' then + ModifiedExperience := 'Premium' + else + ModifiedExperience := 'Basic'; + RequestBody := GetExperienceTierJSON(ModifiedExperience); + + // [WHEN] The user makes a patch request to the service. + TargetURL := LibraryGraphMgt.CreateTargetURL(CompanyInformation.SystemId, Page::"APIV2 - Company Information", ServiceNameTxt); + LibraryGraphMgt.PatchToWebService(TargetURL, RequestBody, Response); + + // [THEN] The response text contains the new values. + VerifyPropertyInJSON(Response, 'experience', ModifiedExperience); + + // [THEN] The record in the database contains the new values. + ApplicationAreaMgmtFacade.GetExperienceTierCurrentCompany(CurrentExperience); + Assert.AreEqual(ModifiedExperience, CurrentExperience, 'The experience tier should be updated.'); + end; + + [Test] + procedure TestModifyInvalidExperinceTier() + var + CompanyInformation: Record "Company Information"; + RequestBody: Text; + Response: Text; + TargetURL: Text; + ModifiedExperience: Text; + begin + // [SCENARIO 204030] User can modify the experince tier through a PATCH request. + Initialize(); + + // [Given] A company information exists. + CompanyInformation.Get(); + ModifiedExperience := LibraryUtility.GenerateRandomText(20); + RequestBody := GetExperienceTierJSON(ModifiedExperience); + + // [WHEN] The user makes a patch request to the service. + TargetURL := LibraryGraphMgt.CreateTargetURL(CompanyInformation.SystemId, Page::"APIV2 - Company Information", ServiceNameTxt); + asserterror LibraryGraphMgt.PatchToWebService(TargetURL, RequestBody, Response); + + // [THEN] Cannot assign invalid experience tier. + Assert.ExpectedError('400'); + Assert.ExpectedError(SaveExperienceTierFailedErr); + end; + local procedure VerifyCompanyInformationProperties(CompanyInformationJSON: Text; var CompanyInformation: Record "Company Information") var GeneralLedgerSetup: Record "General Ledger Setup"; CompanyInformationRecordRef: RecordRef; EnterpriseNoFieldRef: FieldRef; TaxRegistrationNumber: Text; + Experience: Text; begin Assert.AreNotEqual('', CompanyInformationJSON, EmptyJSONErr); GeneralLedgerSetup.Get(); @@ -112,6 +175,9 @@ codeunit 139806 "APIV2 - Company Info. E2E" VerifyPropertyInJSON(CompanyInformationJSON, 'state', CompanyInformation.County); VerifyPropertyInJSON(CompanyInformationJSON, 'country', CompanyInformation."Country/Region Code"); VerifyPropertyInJSON(CompanyInformationJSON, 'postalCode', CompanyInformation."Post Code"); + + ApplicationAreaMgmtFacade.GetExperienceTierCurrentCompany(Experience); + VerifyPropertyInJSON(CompanyInformationJSON, 'experience', Experience); end; local procedure VerifyPropertyInJSON(JSON: Text; PropertyName: Text; ExpectedValue: Text) @@ -135,19 +201,9 @@ codeunit 139806 "APIV2 - Company Info. E2E" CompanyInformationJSON := LibraryGraphMgt.AddPropertytoJSON(CompanyInformationJSON, 'country', CompanyInformation."Country/Region Code"); CompanyInformationJSON := LibraryGraphMgt.AddPropertytoJSON(CompanyInformationJSON, 'postalCode', CompanyInformation."Post Code"); end; -} - - - - - - - - - - - - - - + local procedure GetExperienceTierJSON(Experience: Text) ExperinceTierJSON: Text + begin + ExperinceTierJSON := LibraryGraphMgt.AddPropertytoJSON('', 'experience', Experience); + end; +} \ No newline at end of file diff --git a/Apps/W1/AutomaticAccountCodes/app/src/Codeunits/AACodesPostingHelper.Codeunit.al b/Apps/W1/AutomaticAccountCodes/app/src/Codeunits/AACodesPostingHelper.Codeunit.al index 968aa16cc6..e22b77ad4f 100644 --- a/Apps/W1/AutomaticAccountCodes/app/src/Codeunits/AACodesPostingHelper.Codeunit.al +++ b/Apps/W1/AutomaticAccountCodes/app/src/Codeunits/AACodesPostingHelper.Codeunit.al @@ -13,7 +13,9 @@ using Microsoft.Finance.GeneralLedger.Posting; using Microsoft.Finance.GeneralLedger.Setup; using Microsoft.Finance.ReceivablesPayables; using Microsoft.Purchases.Document; +using Microsoft.Purchases.Posting; using Microsoft.Sales.Document; +using Microsoft.Sales.Posting; codeunit 4850 "AA Codes Posting Helper" { @@ -187,13 +189,13 @@ codeunit 4850 "AA Codes Posting Helper" GenJournalLine."Automatic Account Group" := ''; end; - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPrepareSales', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure OnAfterInvPostBufferPrepareSales(var SalesLine: Record "Sales Line"; var InvoicePostingBuffer: Record "Invoice Posting Buffer") begin InvoicePostingBuffer."Automatic Account Group" := SalesLine."Automatic Account Group"; end; - [EventSubscriber(ObjectType::Table, Database::"Invoice Posting Buffer", 'OnAfterPreparePurchase', '', false, false)] + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch. Post Invoice Events", 'OnAfterPrepareInvoicePostingBuffer', '', false, false)] local procedure OnAfterInvPostBufferPreparePurchase(var PurchaseLine: Record "Purchase Line"; var InvoicePostingBuffer: Record "Invoice Posting Buffer") begin InvoicePostingBuffer."Automatic Account Group" := PurchaseLine."Automatic Account Group"; diff --git a/Apps/W1/BankAccRecWithAI/app/src/BankAccRecAIProposal.Page.al b/Apps/W1/BankAccRecWithAI/app/src/BankAccRecAIProposal.Page.al index 6399f992ef..47c0645e38 100644 --- a/Apps/W1/BankAccRecWithAI/app/src/BankAccRecAIProposal.Page.al +++ b/Apps/W1/BankAccRecWithAI/app/src/BankAccRecAIProposal.Page.al @@ -11,7 +11,7 @@ page 7250 "Bank Acc. Rec. AI Proposal" Caption = 'Reconcile with Copilot'; DataCaptionExpression = PageCaptionLbl; PageType = PromptDialog; - IsPreview = true; + IsPreview = false; Extensible = false; ApplicationArea = All; Editable = true; diff --git a/Apps/W1/BankAccRecWithAI/app/src/BankRecAIMatchingImpl.Codeunit.al b/Apps/W1/BankAccRecWithAI/app/src/BankRecAIMatchingImpl.Codeunit.al index 0a7daf0d9f..e5821f71f9 100644 --- a/Apps/W1/BankAccRecWithAI/app/src/BankRecAIMatchingImpl.Codeunit.al +++ b/Apps/W1/BankAccRecWithAI/app/src/BankRecAIMatchingImpl.Codeunit.al @@ -1,7 +1,6 @@ namespace Microsoft.Bank.Reconciliation; using Microsoft.Bank.Ledger; -using Microsoft.Upgrade; using System.AI; using System.Azure.KeyVault; using System.Environment; @@ -565,18 +564,19 @@ codeunit 7250 "Bank Rec. AI Matching Impl." CopilotCapability: Codeunit "Copilot Capability"; EnvironmentInformation: Codeunit "Environment Information"; UpgradeTag: Codeunit "Upgrade Tag"; - UpgradeTagDefinitions: Codeunit "Upgrade Tag Definitions"; begin if not EnvironmentInformation.IsSaaSInfrastructure() then exit; - if UpgradeTag.HasUpgradeTag(UpgradeTagDefinitions.GetRegisterBankAccRecCopilotCapabilityUpgradeTag()) then + if UpgradeTag.HasUpgradeTag(GetRegisterBankAccRecCopilotGACapabilityUpgradeTag()) then exit; if not CopilotCapability.IsCapabilityRegistered(Enum::"Copilot Capability"::"Bank Account Reconciliation") then - CopilotCapability.RegisterCapability(Enum::"Copilot Capability"::"Bank Account Reconciliation", LearnMoreUrlTxt); + CopilotCapability.RegisterCapability(Enum::"Copilot Capability"::"Bank Account Reconciliation", Enum::"Copilot Availability"::"Generally Available", LearnMoreUrlTxt) + else + CopilotCapability.ModifyCapability(Enum::"Copilot Capability"::"Bank Account Reconciliation", Enum::"Copilot Availability"::"Generally Available", LearnMoreUrlTxt); - UpgradeTag.SetUpgradeTag(UpgradeTagDefinitions.GetRegisterBankAccRecCopilotCapabilityUpgradeTag()); + UpgradeTag.SetUpgradeTag(GetRegisterBankAccRecCopilotGACapabilityUpgradeTag()); end; local procedure MatchIsAcceptable(var BankAccReconciliationLine: Record "Bank Acc. Reconciliation Line"; var TempLedgerEntryMatchingBuffer: Record "Ledger Entry Matching Buffer" temporary; MatchedLineNoTxt: Text; MatchedEntryNoTxt: Text): Boolean @@ -617,6 +617,17 @@ codeunit 7250 "Bank Rec. AI Matching Impl." exit(InputWithReservedWordsFound) end; + local procedure GetRegisterBankAccRecCopilotGACapabilityUpgradeTag(): Code[250] + begin + exit('MS-521413-RegisterBankAccRecCopilotGACapability-20240624'); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Upgrade Tag", 'OnGetPerCompanyUpgradeTags', '', false, false)] + local procedure RegisterPerCompanyTags(var PerCompanyUpgradeTags: List of [Code[250]]) + begin + PerCompanyUpgradeTags.Add(GetRegisterBankAccRecCopilotGACapabilityUpgradeTag()); + end; + var MatchedByCopilotTxt: label 'Matched by Copilot based on semantic similarity.', Comment = 'Copilot is a Microsoft service name and must not be translated'; ConstructingPromptFailedErr: label 'There was an error with sending the call to Copilot. Log a Business Central support request about this.', Comment = 'Copilot is a Microsoft service name and must not be translated'; diff --git a/Apps/W1/BankAccRecWithAI/app/src/TransToGLAccAIProposal.Page.al b/Apps/W1/BankAccRecWithAI/app/src/TransToGLAccAIProposal.Page.al index b66ada8785..118d9315fb 100644 --- a/Apps/W1/BankAccRecWithAI/app/src/TransToGLAccAIProposal.Page.al +++ b/Apps/W1/BankAccRecWithAI/app/src/TransToGLAccAIProposal.Page.al @@ -8,7 +8,7 @@ page 7252 "Trans. To GL Acc. AI Proposal" Caption = 'Copilot Proposals for Posting Differences to G/L Accounts'; DataCaptionExpression = PageCaptionLbl; PageType = PromptDialog; - IsPreview = true; + IsPreview = false; Extensible = false; PromptMode = Generate; ApplicationArea = All; diff --git a/Apps/W1/BankDeposits/app/src/codeunits/BankDepositPost.Codeunit.al b/Apps/W1/BankDeposits/app/src/codeunits/BankDepositPost.Codeunit.al index f8e944a0a2..0d5c258225 100644 --- a/Apps/W1/BankDeposits/app/src/codeunits/BankDepositPost.Codeunit.al +++ b/Apps/W1/BankDeposits/app/src/codeunits/BankDepositPost.Codeunit.al @@ -101,8 +101,6 @@ codeunit 1690 "Bank Deposit-Post" if GenJournalLine.Count() = 0 then Error(EmptyDepositErr); - if Rec."Post as Lump Sum" and (GenJournalLine.Count() = 1) then - Rec."Post as Lump Sum" := false; TotalAmountLCY := ModifyGenJournalLinesForBankDepositPosting(Rec, GenJournalTemplate."Force Doc. Balance"); if Rec."Post as Lump Sum" then @@ -434,7 +432,7 @@ codeunit 1690 "Bank Deposit-Post" VendorLedgerEntry: Record "Vendor Ledger Entry"; BankAccountLedgerEntry: Record "Bank Account Ledger Entry"; begin - if (CurrentBankDepositHeader."Post as Lump Sum") and (GenJournalLine.Amount = CurrentBankDepositHeader."Total Deposit Amount") then begin + if (CurrentBankDepositHeader."Post as Lump Sum") and (GenJournalLine."Account Type" = GenJournalLine."Account Type"::"Bank Account") and (GenJournalLine.Amount = CurrentBankDepositHeader."Total Deposit Amount") then begin OnAfterPostBalancingEntry(PostingGenJournalLine); OnRunOnAfterPostBalancingEntry(PostingGenJournalLine); SetLumpSumBalanceEntry(PostingGenJournalLine); diff --git a/Apps/W1/BankDeposits/app/src/codeunits/NavigateBankDepositExt.Codeunit.al b/Apps/W1/BankDeposits/app/src/codeunits/NavigateBankDepositExt.Codeunit.al index 60f77ec4cd..ed0315cc4f 100644 --- a/Apps/W1/BankDeposits/app/src/codeunits/NavigateBankDepositExt.Codeunit.al +++ b/Apps/W1/BankDeposits/app/src/codeunits/NavigateBankDepositExt.Codeunit.al @@ -1,14 +1,6 @@ namespace Microsoft.Bank.Deposit; using Microsoft.Foundation.Navigate; -using Microsoft.Sales.History; -using Microsoft.Purchases.History; -using Microsoft.Service.History; -using Microsoft.Sales.Document; -using Microsoft.Finance.GeneralLedger.Ledger; -using Microsoft.Finance.VAT.Ledger; -using Microsoft.Purchases.Payables; -using Microsoft.Service.Ledger; codeunit 1699 "Navigate Bank Deposit Ext." { @@ -46,14 +38,14 @@ codeunit 1699 "Navigate Bank Deposit Ext." PostedBankDepositLine: Record "Posted Bank Deposit Line"; begin if SetPostedBankDepositHeaderFilters(PostedBankDepositHeader, DocNoFilter) then - Sender.InsertIntoDocEntry(DocumentEntry, Database::"Posted Bank Deposit Header", PostedBankDepositHeader.TableCaption(), PostedBankDepositHeader.Count()); + DocumentEntry.InsertIntoDocEntry(Database::"Posted Bank Deposit Header", PostedBankDepositHeader.TableCaption(), PostedBankDepositHeader.Count()); if SetPostedBankDepositLineFilters(PostedBankDepositLine, DocNoFilter, PostingDateFilter, not Sender.GetNavigationFromPostedBankDeposit()) then - Sender.InsertIntoDocEntry(DocumentEntry, Database::"Posted Bank Deposit Line", PostedBankDepositLine.TableCaption(), PostedBankDepositLine.Count()); + DocumentEntry.InsertIntoDocEntry(Database::"Posted Bank Deposit Line", PostedBankDepositLine.TableCaption(), PostedBankDepositLine.Count()); end; - [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeNavigateShowRecords', '', false, false)] - local procedure OnBeforeNavigateShowRecords(Sender: Page Navigate; TableID: Integer; DocNoFilter: Text; PostingDateFilter: Text; ItemTrackingSearch: Boolean; var TempDocumentEntry: Record "Document Entry" temporary; var IsHandled: Boolean; var SalesInvoiceHeader: Record "Sales Invoice Header"; var SalesCrMemoHeader: Record "Sales Cr.Memo Header"; var PurchInvHeader: Record "Purch. Inv. Header"; var PurchCrMemoHdr: Record "Purch. Cr. Memo Hdr."; var ServiceInvoiceHeader: Record "Service Invoice Header"; var ServiceCrMemoHeader: Record "Service Cr.Memo Header"; var SOSalesHeader: Record "Sales Header"; var SISalesHeader: Record "Sales Header"; var SCMSalesHeader: Record "Sales Header"; var SROSalesHeader: Record "Sales Header"; var GLEntry: Record "G/L Entry"; var VATEntry: Record "VAT Entry"; var VendLedgEntry: Record "Vendor Ledger Entry"; var WarrantyLedgerEntry: Record "Warranty Ledger Entry"; var NewSourceRecVar: Variant; var SalesShipmentHeader: Record "Sales Shipment Header"; var ReturnReceiptHeader: Record "Return Receipt Header"; var ReturnShipmentHeader: Record "Return Shipment Header"; var PurchRcptHeader: Record "Purch. Rcpt. Header") + [EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', false, false)] + local procedure OnBeforeShowRecords(Sender: Page Navigate; DocNoFilter: Text; PostingDateFilter: Text; ItemTrackingSearch: Boolean; var TempDocumentEntry: Record "Document Entry" temporary; var IsHandled: Boolean) var PostedBankDepositHeader: Record "Posted Bank Deposit Header"; PostedBankDepositLine: Record "Posted Bank Deposit Line"; @@ -61,13 +53,13 @@ codeunit 1699 "Navigate Bank Deposit Ext." if ItemTrackingSearch or IsHandled then exit; - if TableID = Database::"Posted Bank Deposit Header" then begin + if TempDocumentEntry."Table ID" = Database::"Posted Bank Deposit Header" then begin IsHandled := true; SetPostedBankDepositHeaderFilters(PostedBankDepositHeader, DocNoFilter); Page.Run(0, PostedBankDepositHeader); exit; end; - if TableID = Database::"Posted Bank Deposit Line" then begin + if TempDocumentEntry."Table ID" = Database::"Posted Bank Deposit Line" then begin IsHandled := true; SetPostedBankDepositLineFilters(PostedBankDepositLine, DocNoFilter, PostingDateFilter, not Sender.GetNavigationFromPostedBankDeposit()); Page.Run(0, PostedBankDepositLine); diff --git a/Apps/W1/BankDeposits/test/src/BankDepositPostingTests.Codeunit.al b/Apps/W1/BankDeposits/test/src/BankDepositPostingTests.Codeunit.al index b51a11dfe5..b8fb2f2095 100644 --- a/Apps/W1/BankDeposits/test/src/BankDepositPostingTests.Codeunit.al +++ b/Apps/W1/BankDeposits/test/src/BankDepositPostingTests.Codeunit.al @@ -102,7 +102,7 @@ codeunit 139769 "Bank Deposit Posting Tests" GLEntry: Record "G/L Entry"; TransactionNo: Integer; begin - // Verify G/L Entry after post Deposit with Unchecked Force Doc. Balance. + // Verify that when bank deposit has multiple lines, and 'Post as Lump Sum' is checked - it posts it as lump sum // Setup: Create GL Account and Vendor, create Bank Deposit with Account Type GL, Vendor. Initialize(); @@ -142,6 +142,57 @@ codeunit 139769 "Bank Deposit Posting Tests" until PostedBankDepositLine.Next() = 0; end; + [Test] + [HandlerFunctions('GeneralJournalBatchesPageHandler,ConfirmHandler')] + procedure PostBankDepositAsLumpSumOneLine() + var + GLAccount: Record "G/L Account"; + Vendor: Record Vendor; + BankDepositHeader: Record "Bank Deposit Header"; + PostedBankDepositLine: Record "Posted Bank Deposit Line"; + GenJournalLine: Record "Gen. Journal Line"; + SourceCodeSetup: Record "Source Code Setup"; + GLEntry: Record "G/L Entry"; + TransactionNo: Integer; + begin + // Bug 539413: Verify that when bank deposit has one line, and 'Post as Lump Sum' is checked - it posts it as lump sum + + // Setup: Create GL Account and Vendor, create Bank Deposit with Account Type GL, Vendor. + Initialize(); + LibraryERM.CreateGLAccount(GLAccount); + LibraryPurchase.CreateVendor(Vendor); + CreateBankDeposit(BankDepositHeader, GLAccount."No.", GenJournalLine."Account Type"::"G/L Account", -1, GenJournalLine."Document Type"::" "); + + // Update Total Deposit Amount on header, set Post as Lump Sum to true and post Bank Deposit. + UpdateBankDepositHeaderWithAmount(BankDepositHeader); + BankDepositHeader."Post as Lump Sum" := true; + BankDepositHeader.Modify(); + SourceCodeSetup.Get(); + SourceCodeSetup."Bank Deposit" := 'BankDep'; + SourceCodeSetup.Modify(); + + // Exercise. + PostBankDeposit(BankDepositHeader); + + // Verify: Verify G/L Entry after post Deposit with Unchecked Force Doc. Balance. + GLEntry.SetRange("Document No.", BankDepositHeader."No."); + GLEntry.SetRange(Amount, BankDepositHeader."Total Deposit Amount"); + GLEntry.FindFirst(); + GLEntry.TestField("Document Type", GLEntry."Document Type"::" "); + + // Verify all entries are in the same transaction + PostedBankDepositLine.SetRange("Bank Deposit No.", BankDepositHeader."No."); + TransactionNo := 0; + PostedBankDepositLine.FindSet(); + repeat + GLEntry.Reset(); + GLEntry.Get(PostedBankDepositLine."Entry No."); + if TransactionNo = 0 then + TransactionNo := GLEntry."Transaction No."; + Assert.AreEqual(GLEntry."Transaction No.", TransactionNo, 'All GLEntries should be in the same transaction'); + until PostedBankDepositLine.Next() = 0; + end; + [Test] [HandlerFunctions('GeneralJournalBatchesPageHandler,ConfirmHandler')] procedure PostingAsLumpSumInDifferentDocumentsShouldntBePossible() @@ -490,6 +541,51 @@ codeunit 139769 "Bank Deposit Posting Tests" Assert.AreEqual(-Amount, PostedBankDepositHeader."Total Deposit Lines", 'The total amount of the deposit should be the sum of the lines'); end; + [Test] + [HandlerFunctions('GeneralJournalBatchesPageHandler,ConfirmHandler')] + procedure PostLumpSumNegativeLineWithSameAmountAsTotalDeposit() + var + GLAccount: Record "G/L Account"; + BankDepositHeader: Record "Bank Deposit Header"; + GenJournalBatch: Record "Gen. Journal Batch"; + GenJournalLine: Record "Gen. Journal Line"; + GenJournalTemplate: Record "Gen. Journal Template"; + PostedBankDepositLine: Record "Posted Bank Deposit Line"; + GenJournalDocumentType: Enum "Gen. Journal Document Type"; + TotalAmount: Decimal; + begin + // [SCENARIO 538420] A Bank deposit is posted with lump sum and a negative line that equals the total amount of the deposit. The lines should be transferred to the Posted Bank Deposit Lines. + // [GIVEN] A Bank deposit with lump sum and a negative line that equals the total amount. + Initialize(); + LibraryERM.CreateGLAccount(GLAccount); + CreateGenJournalBatch(GenJournalBatch, GenJournalTemplate.Type::"Bank Deposits"); + CreateBankDepositHeaderWithBankAccount(BankDepositHeader, GenJournalBatch); + TotalAmount := 500; + BankDepositHeader."Post as Lump Sum" := true; + BankDepositHeader."Total Deposit Amount" := TotalAmount; + BankDepositHeader."Posting Date" := WorkDate(); + BankDepositHeader."Document Date" := WorkDate(); + BankDepositHeader.Modify(); + LibraryERM.CreateGeneralJnlLine( + GenJournalLine, BankDepositHeader."Journal Template Name", BankDepositHeader."Journal Batch Name", GenJournalDocumentType::" ", + GenJournalLine."Account Type"::"G/L Account", GLAccount."No.", -2 * TotalAmount); + GenJournalLine."Posting Date" := WorkDate(); + GenJournalLine."Document No." := BankDepositHeader."No."; + GenJournalLine.Modify(); + LibraryERM.CreateGeneralJnlLine( + GenJournalLine, BankDepositHeader."Journal Template Name", BankDepositHeader."Journal Batch Name", GenJournalDocumentType::" ", + GenJournalLine."Account Type"::"G/L Account", GLAccount."No.", TotalAmount); + GenJournalLine."Posting Date" := WorkDate(); + GenJournalLine."Document No." := BankDepositHeader."No."; + GenJournalLine.Modify(); + Commit(); + // [WHEN] Posting the bank deposit. + PostBankDeposit(BankDepositHeader); + // [THEN] Both lines should be transferred. + PostedBankDepositLine.SetRange("Bank Deposit No.", BankDepositHeader."No."); + Assert.AreEqual(2, PostedBankDepositLine.Count(), 'The same number of lines posted should be transferred as part of the bank deposit.'); + end; + [Test] [HandlerFunctions('GeneralJournalBatchesPageHandler,ConfirmHandler')] procedure NavigatePageOfAPostedBankDepositShowsRelatedEntries() diff --git a/Apps/W1/DataSearch/App/DataSearchDefaults.Codeunit.al b/Apps/W1/DataSearch/App/DataSearchDefaults.Codeunit.al index d8db0c7ff6..00bb7110af 100644 --- a/Apps/W1/DataSearch/App/DataSearchDefaults.Codeunit.al +++ b/Apps/W1/DataSearch/App/DataSearchDefaults.Codeunit.al @@ -355,12 +355,30 @@ codeunit 2681 "Data Search Defaults" var FieldList: List of [Integer]; begin - AddTextFields(TableNo, FieldList); - AddIndexedFields(TableNo, FieldList); - AddOtherFields(TableNo, FieldList); + if not AddFullTextIndexedFields(TableNo, FieldList) then begin + AddTextFields(TableNo, FieldList); + AddIndexedFields(TableNo, FieldList); + AddOtherFields(TableNo, FieldList); + end; InsertFields(TableNo, FieldList); end; + internal procedure AddFullTextIndexedFields(TableNo: Integer; var FieldList: List of [Integer]): Boolean + var + Field: Record Field; + begin + Field.SetRange(TableNo, TableNo); + Field.SetRange(Class, Field.Class::Normal); + Field.SetRange(OptimizeForTextSearch, true); + if not Field.FindSet() then + exit(false); + repeat + if not FieldList.Contains(Field."No.") then + FieldList.Add(Field."No."); + until Field.Next() = 0; + exit(true); + end; + internal procedure AddTextFields(TableNo: Integer; var FieldList: List of [Integer]) var Field: Record Field; diff --git a/Apps/W1/DataSearch/App/DataSearchInTable.codeunit.al b/Apps/W1/DataSearch/App/DataSearchInTable.codeunit.al index 8756833140..983a073dd1 100644 --- a/Apps/W1/DataSearch/App/DataSearchInTable.codeunit.al +++ b/Apps/W1/DataSearch/App/DataSearchInTable.codeunit.al @@ -126,10 +126,12 @@ codeunit 2680 "Data Search in Table" local procedure SetListedFieldFiltersOnRecRef(var RecRef: RecordRef; TableType: Integer; SearchString: Text; UseTextSearch: Boolean; var FieldList: List of [Integer]) var + Field: Record Field; DataSearchObjectMapping: Codeunit "Data Search Object Mapping"; FldRef: FieldRef; FieldNo: Integer; LoadFieldsSet: Boolean; + UseWildCharSearch: Boolean; begin if RecRef.Number = 0 then exit; @@ -139,18 +141,27 @@ codeunit 2680 "Data Search in Table" if FieldNo > 0 then DataSearchObjectMapping.SetTypeFilterOnRecRef(RecRef, TableType, FieldNo); + if SearchString[1] = '*' then begin + UseWildCharSearch := true; + SearchString := DelChr(SearchString, '<', '*'); + end; RecRef.FilterGroup(-1); // 'OR' group foreach FieldNo in FieldList do if RecRef.FieldExist(FieldNo) then begin - FldRef := RecRef.Field(FieldNo); + FldRef := RecRef.Field(FieldNo); if FldRef.Length >= strlen(SearchString) then begin - if UseTextSearch then - if FldRef.Type = FieldType::Code then - FldRef.SetFilter('*' + UpperCase(SearchString) + '*') - else - FldRef.SetFilter('@*' + SearchString + '*') + if not Field.Get(RecRef.Number, FldRef.Number) then + Clear(Field); + if not UseWildCharSearch and Field.OptimizeForTextSearch then + FldRef.SetFilter('&&' + SearchString + '*') else - FldRef.SetFilter('*' + SearchString + '*'); + if UseTextSearch then + if FldRef.Type = FieldType::Code then + FldRef.SetFilter('*' + UpperCase(SearchString) + '*') + else + FldRef.SetFilter('@*' + SearchString + '*') + else + FldRef.SetFilter('*' + SearchString + '*'); if LoadFieldsSet then RecRef.AddLoadFields(FieldNo) else diff --git a/Apps/W1/DataSearch/App/DataSearchSetupFieldList.Page.al b/Apps/W1/DataSearch/App/DataSearchSetupFieldList.Page.al index 7cc457b234..524bbed615 100644 --- a/Apps/W1/DataSearch/App/DataSearchSetupFieldList.Page.al +++ b/Apps/W1/DataSearch/App/DataSearchSetupFieldList.Page.al @@ -53,6 +53,13 @@ page 2684 "Data Search Setup (Field) List" Visible = false; ToolTip = 'Specifies the type of the field.'; } + field(OptimizeForTextSearch; Rec.OptimizeForTextSearch) + { + ApplicationArea = Basic, Suite; + Caption = 'Optimized For Text Search'; + Editable = false; + ToolTip = 'Specifies whether this field is optimized for text search. If this field is optimized for text search, the search can be faster.'; + } field("Enable Search"; SearchSetupField."Enable Search") { ApplicationArea = Basic, Suite; @@ -126,6 +133,9 @@ page 2684 "Data Search Setup (Field) List" Rec.setrange(ObsoleteState, Rec.ObsoleteState::No); Rec.setfilter(Type, '%1|%2', Rec.Type::Code, Rec.Type::Text); Rec.FilterGroup(0); + Rec.SetRange(OptimizeForTextSearch, true); + TableHasFullTextIndex := not Rec.IsEmpty(); + Rec.SetRange(OptimizeForTextSearch); if Rec.FindFirst() then; if SelectedPageCaption = '' then SelectedPageCaption := Format(Rec.TableNo) + ' ' + GetTableCaption(Rec.TableNo); @@ -139,7 +149,9 @@ page 2684 "Data Search Setup (Field) List" PrevTableCaption: Text; PrevTableNo: Integer; ShowMultipleTables: Boolean; + TableHasFullTextIndex: Boolean; ResetQst: Label 'Do you want to remove the current setup and insert the default?'; + NotFullTextMsg: Label 'Field %1 is not optimized for text search. The search will be slower.', Comment = '%1 is a field name'; local procedure InitDefaultSetup() var @@ -166,12 +178,21 @@ page 2684 "Data Search Setup (Field) List" end; local procedure UpdateRec() + var + Field: Record Field; + Notification: Notification; begin if not SearchSetupField."Enable Search" then begin if SearchSetupField.Delete() then; end else if not SearchSetupField.Modify() then SearchSetupField.Insert(); + if SearchSetupField."Enable Search" and TableHasFullTextIndex then + if Field.Get(SearchSetupField."Table No.", SearchSetupField."Field No.") then + if not Field.OptimizeForTextSearch then begin + Notification.Message(StrSubstNo(NotFullTextMsg, Field."Field Caption")); + Notification.Send(); + end; end; local procedure GetRec() diff --git a/Apps/W1/DataSearch/test/TestDataSearch.Table.al b/Apps/W1/DataSearch/test/TestDataSearch.Table.al new file mode 100644 index 0000000000..5a4abcdb23 --- /dev/null +++ b/Apps/W1/DataSearch/test/TestDataSearch.Table.al @@ -0,0 +1,26 @@ +table 139507 "Test Data Search" +{ + DataClassification = SystemMetadata; + InherentPermissions = RIMDX; + + fields + { + field(1; "No."; Code[20]) + { + Caption = 'Number'; + } + field(2; Name; Text[100]) + { + Caption = 'Name'; + } + } + + keys + { + key(Key1; "No.") + { + Clustered = true; + } + } + +} \ No newline at end of file diff --git a/Apps/W1/DataSearch/test/TestDataSearch.codeunit.al b/Apps/W1/DataSearch/test/TestDataSearch.codeunit.al index 1560568d01..14b8bf46c0 100644 --- a/Apps/W1/DataSearch/test/TestDataSearch.codeunit.al +++ b/Apps/W1/DataSearch/test/TestDataSearch.codeunit.al @@ -13,36 +13,41 @@ codeunit 139507 "Test Data Search" var LibraryAssert: Codeunit "Library Assert"; - [Test] - [TransactionModel(TransactionModel::AutoRollback)] - procedure TestSetupTables() - var - DataSearchSetupTable: Record "Data Search Setup (Table)"; - DataSearchSetupField: Record "Data Search Setup (Field)"; - TestDataSearchOnArchives: Codeunit "Test Data Search On Archives"; - DataSearchPage: TestPage "Data Search"; - begin - // precondition: no setup exists - DataSearchSetupTable.DeleteAll(); - DataSearchSetupField.DeleteAll(); - - // activate the sales archive test subscribers - BindSubscription(TestDataSearchOnArchives); + // It seems like the datasearch page makes the client hang + // Bug 539845: Test defect: OptimizeForTextSearch property causes Data Search to hang in some tests - // When a search is initiated, a default setup is added - DataSearchPage.OpenEdit(); - DataSearchPage.SearchString.Value('Gibberish'); // doesn't matter if it finds anything - DataSearchPage.Close(); - - UnBindSubscription(TestDataSearchOnArchives); - - LibraryAssert.IsFalse(DataSearchSetupTable.IsEmpty, 'Data Search (Table) should not be empty.'); - LibraryAssert.IsFalse(DataSearchSetupField.IsEmpty, 'Data Search (Field) should not be empty.'); - DataSearchSetupTable.SetRange("Table No.", Database::"Sales Header Archive"); - LibraryAssert.IsFalse(DataSearchSetupTable.IsEmpty, 'Data Search (Table) should contain Sales Header Archive.'); - DataSearchSetupTable.SetRange("Table No.", Database::"Sales Line Archive"); - LibraryAssert.IsFalse(DataSearchSetupTable.IsEmpty, 'Data Search (Table) should contain Sales Line Archive.'); - end; + /* + [Test] + [TransactionModel(TransactionModel::AutoRollback)] + procedure TestSetupTables() + var + DataSearchSetupTable: Record "Data Search Setup (Table)"; + DataSearchSetupField: Record "Data Search Setup (Field)"; + TestDataSearchOnArchives: Codeunit "Test Data Search On Archives"; + DataSearchPage: TestPage "Data Search"; + begin + // precondition: no setup exists + DataSearchSetupTable.DeleteAll(); + DataSearchSetupField.DeleteAll(); + + // activate the sales archive test subscribers + BindSubscription(TestDataSearchOnArchives); + + // When a search is initiated, a default setup is added + DataSearchPage.OpenEdit(); + DataSearchPage.SearchString.Value('Gibberish'); // doesn't matter if it finds anything + DataSearchPage.Close(); + + UnBindSubscription(TestDataSearchOnArchives); + + LibraryAssert.IsFalse(DataSearchSetupTable.IsEmpty, 'Data Search (Table) should not be empty.'); + LibraryAssert.IsFalse(DataSearchSetupField.IsEmpty, 'Data Search (Field) should not be empty.'); + DataSearchSetupTable.SetRange("Table No.", Database::"Sales Header Archive"); + LibraryAssert.IsFalse(DataSearchSetupTable.IsEmpty, 'Data Search (Table) should contain Sales Header Archive.'); + DataSearchSetupTable.SetRange("Table No.", Database::"Sales Line Archive"); + LibraryAssert.IsFalse(DataSearchSetupTable.IsEmpty, 'Data Search (Table) should contain Sales Line Archive.'); + end; + */ [Test] [HandlerFunctions('DataSearchSetupListsPageHandler')] @@ -86,7 +91,7 @@ codeunit 139507 "Test Data Search" [TransactionModel(TransactionModel::AutoRollback)] procedure TestSearchFewFound() var - Customer: Record Customer; + TestDataSearch: Record "Test Data Search"; DataSearchInTable: Codeunit "Data Search in Table"; Results: Dictionary of [Text, Text]; SearchTerm: Text; @@ -95,10 +100,10 @@ codeunit 139507 "Test Data Search" Init(); SearchTerm := CopyStr(Format(CreateGuid()), 1, 35); for i := 1 to 3 do begin - CreateDummyCustomer(Customer, SearchTerm, 1); - DataSearchInTable.FindInTable(Database::Customer, 0, SearchTerm, Results); + CreateDummyTestDataSearch(TestDataSearch, SearchTerm, 1); + DataSearchInTable.FindInTable(Database::"Test Data Search", 0, SearchTerm, Results); LibraryAssert.AreEqual(i, Results.Count, 'Wrong no. of results returned'); - LibraryAssert.AreEqual(Format(Customer.SystemId), Results.Keys.Get(i), 'Wrong system id'); + LibraryAssert.AreEqual(Format(TestDataSearch.SystemId), Results.Keys.Get(i), 'Wrong system id'); LibraryAssert.IsTrue(StrPos(Results.Values.Get(i), SearchTerm) > 0, 'Wrong match'); end; end; @@ -107,15 +112,15 @@ codeunit 139507 "Test Data Search" [TransactionModel(TransactionModel::AutoRollback)] procedure TestSearchManyFound() var - Customer: Record Customer; + TestDataSearch: Record "Test Data Search"; DataSearchInTable: Codeunit "Data Search in Table"; Results: Dictionary of [Text, Text]; SearchTerm: Text; begin Init(); SearchTerm := CopyStr(Format(CreateGuid()), 1, 35); - CreateDummyCustomer(Customer, SearchTerm, 5); - DataSearchInTable.FindInTable(Database::Customer, 0, SearchTerm, Results); + CreateDummyTestDataSearch(TestDataSearch, SearchTerm, 5); + DataSearchInTable.FindInTable(Database::"Test Data Search", 0, SearchTerm, Results); LibraryAssert.AreEqual(4, Results.Count, 'Wrong no. of results returned'); end; @@ -123,15 +128,15 @@ codeunit 139507 "Test Data Search" [TransactionModel(TransactionModel::AutoRollback)] procedure TestMultiTermSearch() var - Customer: Record Customer; + TestDataSearch: Record "Test Data Search"; DataSearchInTable: Codeunit "Data Search in Table"; Results: Dictionary of [Text, Text]; SearchTerm: Text; begin Init(); SearchTerm := CopyStr(Format(CreateGuid()), 1, 35); - CreateDummyCustomer(Customer, SearchTerm, 5); - DataSearchInTable.FindInTable(Database::Customer, 0, SearchTerm + ' ' + Customer."No.", Results); + CreateDummyTestDataSearch(TestDataSearch, SearchTerm, 5); + DataSearchInTable.FindInTable(Database::"Test Data Search", 0, SearchTerm + ' ' + TestDataSearch."No.", Results); LibraryAssert.AreEqual(1, Results.Count, 'Wrong no. of results returned'); end; @@ -159,93 +164,108 @@ codeunit 139507 "Test Data Search" VerifyTableCaptionForTable(Database::"Service Header", ServiceDocumentType::"Order".AsInteger(), Page::"Service Orders"); VerifyTableCaptionForTable(Database::"Service Item Line", ServiceDocumentType::Invoice.AsInteger(), Page::"Service Invoices"); end; - - [Test] - [HandlerFunctions('SalesOrderPageHandler,ConfirmDlgYes,CloseMessage,SalesOrderArchivePageHandler')] - [TransactionModel(TransactionModel::AutoCommit)] - procedure TestSearchSalesOrders() - var - SalesHeader: Record "Sales Header"; - SalesLine: Record "Sales Line"; - Customer: Record Customer; - DataSearchSetupTable: Record "Data Search Setup (Table)"; - TestDataSearchOnArchives: Codeunit "Test Data Search On Archives"; - LibrarySales: Codeunit "Library - Sales"; - DataSearchPage: TestPage "Data Search"; - SalesDocumentType: Enum "Sales Document Type"; - i: Integer; - begin - BindSubscription(TestDataSearchOnArchives); - // Given: Sales order with sales line with description 'Hello' and descr.2 'World'; - DataSearchSetupTable.Setrange("Role Center ID", DataSearchSetupTable.GetRoleCenterID()); - DataSearchSetupTable.SetFilter("Table No.", '%1|%2', Database::"Sales Line", Database::"Sales Line Archive"); - DataSearchSetupTable.DeleteAll(); - DataSearchSetupTable.Init(); - DataSearchSetupTable."Role Center ID" := DataSearchSetupTable.GetRoleCenterID(); - DataSearchSetupTable."Table No." := Database::"Sales Line"; - DataSearchSetupTable.InsertRec(true); - DataSearchSetupTable.Init(); - DataSearchSetupTable."Table No." := Database::"Sales Line Archive"; - DataSearchSetupTable."Table Subtype" := 0; - DataSearchSetupTable.InsertRec(true); - - LibrarySales.CreateCustomer(Customer); - LibrarySales.CreateSalesOrder(SalesHeader); - SalesDocumentType := SalesHeader."Document Type"; - LibrarySales.CreateSimpleItemSalesLine(SalesLine, SalesHeader, SalesDocumentType); - SalesLine.Description := 'Hello'; - SalesLine."Description 2" := 'World'; - SalesLine.Modify(); - - // When user searches for 'hello world'... - DataSearchPage.OpenEdit(); - DataSearchPage.TestSearchForSalesOrders.Invoke(); - - // there should be at least one sales line found - DataSearchPage.LinesPart.First(); - LibraryAssert.AreEqual('Sales Orders - lines', DataSearchPage.LinesPart.Description.Value, 'wrong header'); - DataSearchPage.LinesPart.Next(); - // example: ' Order 101017 20000: Description: Hello, Description 2: World' -#pragma warning disable AA0217 - LibraryAssert.AreEqual(StrSubstNo(' %1 %2 %3: Description: Hello, Description 2: World', SalesLine."Document Type", SalesLine."Document No.", SalesLine."Line No."), -#pragma warning restore AA0217 - DataSearchPage.LinesPart.Description.Value, 'wrong line'); - DataSearchPage.LinesPart.Description.Drilldown(); // should open a sales order page which invokes the archive function - - // New search for same data - this time there should also be a sales order archive - // activate the sales archive test subscribers - DataSearchPage.TestClearResults.Invoke(); - - DataSearchSetupTable.Setrange("Role Center ID", DataSearchSetupTable.GetRoleCenterID()); - DataSearchSetupTable.Setrange("Table No.", Database::"Sales Line Archive"); - DataSearchSetupTable.DeleteAll(); - - DataSearchSetupTable.Init(); - DataSearchSetupTable."Role Center ID" := DataSearchSetupTable.GetRoleCenterID(); - DataSearchSetupTable."Table No." := Database::"Sales Line Archive"; - DataSearchSetupTable.InsertRec(true); - - DataSearchPage.TestSearchForSalesOrders.Invoke(); - - DataSearchPage.LinesPart.First(); // the sales lines header - DataSearchPage.LinesPart.Next(); // The first sales line - i := 0; - while (i < 4) and (StrPos(DataSearchPage.LinesPart.Description.Value, 'Sales Order Archives') < 1) do begin - DataSearchPage.LinesPart.Next(); // Maybe the sales line archive header - i += 1; + /* + [Test] + [HandlerFunctions('SalesOrderPageHandler,ConfirmDlgYes,CloseMessage,SalesOrderArchivePageHandler')] + [TransactionModel(TransactionModel::AutoCommit)] + procedure TestSearchSalesOrders() + var + SalesHeader: Record "Sales Header"; + SalesLine: Record "Sales Line"; + Customer: Record Customer; + DataSearchSetupTable: Record "Data Search Setup (Table)"; + DataSearchSetupField: Record "Data Search Setup (Field)"; + TestDataSearchOnArchives: Codeunit "Test Data Search On Archives"; + LibrarySales: Codeunit "Library - Sales"; + DataSearchPage: TestPage "Data Search"; + SalesDocumentType: Enum "Sales Document Type"; + i: Integer; + begin + BindSubscription(TestDataSearchOnArchives); + // Given: Sales order with sales line with description 'Hello' and descr.2 'World'; + DataSearchSetupTable.Setrange("Role Center ID", DataSearchSetupTable.GetRoleCenterID()); + DataSearchSetupTable.SetFilter("Table No.", '%1|%2', Database::"Sales Line", Database::"Sales Line Archive"); + DataSearchSetupTable.DeleteAll(); + DataSearchSetupTable.Init(); + DataSearchSetupTable."Role Center ID" := DataSearchSetupTable.GetRoleCenterID(); + DataSearchSetupTable."Table No." := Database::"Sales Line"; + DataSearchSetupTable.InsertRec(true); + DataSearchSetupField.Init(); + DataSearchSetupField."Table No." := Database::"Sales Line"; + DataSearchSetupField."Field No." := 40; // "Shortcut Dimension 1 Code" + DataSearchSetupField."Enable Search" := true; + DataSearchSetupField.Insert(); + DataSearchSetupField."Field No." := 41; // "Shortcut Dimension 1 Code" + DataSearchSetupField.Insert(); + DataSearchSetupTable.Init(); + DataSearchSetupTable."Table No." := Database::"Sales Line Archive"; + DataSearchSetupTable."Table Subtype" := 0; + DataSearchSetupTable.InsertRec(true); + DataSearchSetupField.Init(); + DataSearchSetupField."Table No." := Database::"Sales Line Archive"; + DataSearchSetupField."Field No." := 40; // "Shortcut Dimension 1 Code" + DataSearchSetupField."Enable Search" := true; + DataSearchSetupField.Insert(); + DataSearchSetupField."Field No." := 41; // "Shortcut Dimension 1 Code" + DataSearchSetupField.Insert(); + + LibrarySales.CreateCustomer(Customer); + LibrarySales.CreateSalesOrder(SalesHeader); + SalesDocumentType := SalesHeader."Document Type"; + LibrarySales.CreateSimpleItemSalesLine(SalesLine, SalesHeader, SalesDocumentType); + SalesLine."Shortcut Dimension 1 Code" := 'Hello'; // are not marked as OptimizeForTextSearch + SalesLine."Shortcut Dimension 2 Code" := 'World'; + SalesLine.Modify(); + + // When user searches for 'hello world'... + DataSearchPage.OpenEdit(); + DataSearchPage.TestSearchForSalesOrders.Invoke(); + + // there should be at least one sales line found + DataSearchPage.LinesPart.First(); + LibraryAssert.AreEqual('Sales Orders - lines', DataSearchPage.LinesPart.Description.Value, 'wrong header'); + DataSearchPage.LinesPart.Next(); + // example: ' Order 101017 20000: hortcut Dimension 1 Code: HELLO, Shortcut Dimension 2 Code: WORLD' + #pragma warning disable AA0217 + LibraryAssert.AreEqual(StrSubstNo(' %1 %2 %3: Shortcut Dimension 1 Code: HELLO, Shortcut Dimension 2 Code: WORLD', SalesLine."Document Type", SalesLine."Document No.", SalesLine."Line No."), + #pragma warning restore AA0217 + DataSearchPage.LinesPart.Description.Value, 'wrong line'); + DataSearchPage.LinesPart.Description.Drilldown(); // should open a sales order page which invokes the archive function + + // New search for same data - this time there should also be a sales order archive + // activate the sales archive test subscribers + DataSearchPage.TestClearResults.Invoke(); + + DataSearchSetupTable.Setrange("Role Center ID", DataSearchSetupTable.GetRoleCenterID()); + DataSearchSetupTable.Setrange("Table No.", Database::"Sales Line Archive"); + DataSearchSetupTable.DeleteAll(); + + DataSearchSetupTable.Init(); + DataSearchSetupTable."Role Center ID" := DataSearchSetupTable.GetRoleCenterID(); + DataSearchSetupTable."Table No." := Database::"Sales Line Archive"; + DataSearchSetupTable.InsertRec(true); + + DataSearchPage.TestSearchForSalesOrders.Invoke(); + + DataSearchPage.LinesPart.First(); // the sales lines header + DataSearchPage.LinesPart.Next(); // The first sales line + i := 0; + while (i < 4) and (StrPos(DataSearchPage.LinesPart.Description.Value, 'Sales Order Archives') < 1) do begin + DataSearchPage.LinesPart.Next(); // Maybe the sales line archive header + i += 1; + end; + LibraryAssert.AreEqual('Sales Order Archives - lines', DataSearchPage.LinesPart.Description.Value, 'wrong header for archive'); + + DataSearchPage.LinesPart.Next(); // The first sales line archive + // example: ' Order 101017 1 1 20000: Shortcut Dimension 1 Code: HELLO, Shortcut Dimension 2 Code: WORLD' + LibraryAssert.IsTrue(StrPos(DataSearchPage.LinesPart.Description.Value, 'Order') > 0, 'wrong line for archive'); + LibraryAssert.IsTrue(StrPos(DataSearchPage.LinesPart.Description.Value, 'Shortcut Dimension 1 Code: HELLO, Shortcut Dimension 2 Code: WORLD') > 0, 'wrong line for archive 2'); + DataSearchPage.LinesPart.Description.Drilldown(); // should open a sales order archive page which invokes the archive function + + UnBindSubscription(TestDataSearchOnArchives); + DataSearchPage.Close(); end; - LibraryAssert.AreEqual('Sales Order Archives - lines', DataSearchPage.LinesPart.Description.Value, 'wrong header for archive'); - - DataSearchPage.LinesPart.Next(); // The first sales line archive - // example: ' Order 101017 1 1 20000: Description: Hello, Description 2: World' - LibraryAssert.IsTrue(StrPos(DataSearchPage.LinesPart.Description.Value, 'Order') > 0, 'wrong line for archive'); - LibraryAssert.IsTrue(StrPos(DataSearchPage.LinesPart.Description.Value, 'Description: Hello, Description 2: World') > 0, 'wrong line for archive 2'); - DataSearchPage.LinesPart.Description.Drilldown(); // should open a sales order archive page which invokes the archive function - - UnBindSubscription(TestDataSearchOnArchives); - DataSearchPage.Close(); - end; - + */ [Test] [TransactionModel(TransactionModel::AutoRollback)] procedure TestGetPageIdForCustomer() @@ -263,7 +283,7 @@ codeunit 139507 "Test Data Search" LibraryAssert.AreEqual(Page::"Customer Card", DisplayPageId, 'Wrong card id'); LibraryAssert.AreEqual(DisplayTableNo, Database::Customer, 'Wrong display table no.'); - LibraryAssert.AreEqual(DisplaySystemId, Customer.SystemId, 'Wrong system id for customer'); + LibraryAssert.AreEqual(DisplaySystemId, Customer.SystemId, 'Wrong system id for TestDataSearch'); end; [Test] @@ -326,6 +346,7 @@ codeunit 139507 "Test Data Search" } ] */ + [Test] [TransactionModel(TransactionModel::AutoCommit)] procedure TestGetSetup() @@ -360,47 +381,49 @@ codeunit 139507 "Test Data Search" DataSearchSetupListsPage.ListIsEnabledCtrl.SetValue(true); end; - [PageHandler] - procedure SalesOrderPageHandler(var SalesOrder: TestPage "Sales Order") - begin - SalesOrder."Archive Document".Invoke(); - SalesOrder.Close(); - end; + /* + [PageHandler] + procedure SalesOrderPageHandler(var SalesOrder: TestPage "Sales Order") + begin + SalesOrder."Archive Document".Invoke(); + SalesOrder.Close(); + end; - [PageHandler] - procedure SalesOrderArchivePageHandler(var SalesOrderArchive: TestPage "Sales Order Archive") - begin - SalesOrderArchive.Close(); - end; + [PageHandler] + procedure SalesOrderArchivePageHandler(var SalesOrderArchive: TestPage "Sales Order Archive") + begin + SalesOrderArchive.Close(); + end; - [ConfirmHandler] - procedure ConfirmDlgYes(Question: Text[1024]; var Answer: Boolean) - begin - Answer := true; - end; + [ConfirmHandler] + procedure ConfirmDlgYes(Question: Text[1024]; var Answer: Boolean) + begin + Answer := true; + end; - [MessageHandler] - procedure CloseMessage(Message: Text[1024]) - begin - end; + [MessageHandler] + procedure CloseMessage(Message: Text[1024]) + begin + end; - [Test] - [HandlerFunctions('DataSearchPageHandler')] - [TransactionModel(TransactionModel::AutoRollback)] - procedure TestStartUpParameter() - var - DataSearch: Page "Data Search"; - begin - DataSearch.SetSearchString('Hello World'); - DataSearch.Run(); - end; + [Test] + [HandlerFunctions('DataSearchPageHandler')] + [TransactionModel(TransactionModel::AutoRollback)] + procedure TestStartUpParameter() + var + DataSearch: Page "Data Search"; + begin + DataSearch.SetSearchString('Hello World'); + DataSearch.Run(); + end; - [PageHandler] - procedure DataSearchPageHandler(var DataSearch: TestPage "Data Search") - begin - LibraryAssert.AreEqual('Searching for "Hello World"...', DataSearch.SearchString.Value, 'Start-up parameter not specified correctly.'); - DataSearch.Close(); - end; + [PageHandler] + procedure DataSearchPageHandler(var DataSearch: TestPage "Data Search") + begin + LibraryAssert.AreEqual('Searching for "Hello World"...', DataSearch.SearchString.Value, 'Start-up parameter not specified correctly.'); + DataSearch.Close(); + end; + */ local procedure VerifyTableCaptionForTable(TableNo: Integer; TableSubType: Integer; PageNo: Integer) var @@ -424,15 +447,15 @@ codeunit 139507 "Test Data Search" LibraryAssert.AreEqual(ExpectedCaption, TempDataSearchResult.GetTableCaption(), 'Wrong table caption'); end; - local procedure CreateDummyCustomer(var Customer: Record Customer; PartOfName: Text; NoOfCustomers: Integer) + local procedure CreateDummyTestDataSearch(var TestDataSearch: Record "Test Data Search"; PartOfName: Text; NoOfTestDataSearchs: Integer) var i: Integer; begin - for i := 1 to NoOfCustomers do begin - Customer.Init(); - Customer."No." := CopyStr(Format(CreateGuid()), 1, MaxStrLen(Customer."No.")); - Customer.Name := 'a' + PartOfName + format(i); - Customer.Insert(); + for i := 1 to NoOfTestDataSearchs do begin + TestDataSearch.Init(); + TestDataSearch."No." := CopyStr(Format(CreateGuid()), 1, MaxStrLen(TestDataSearch."No.")); + TestDataSearch.Name := 'a ' + PartOfName + format(i); + TestDataSearch.Insert(); end; end; @@ -444,9 +467,9 @@ codeunit 139507 "Test Data Search" DataSearchSetupTable.DeleteAll(); DataSearchSetupField.DeleteAll(); DataSearchSetupTable."Role Center ID" := DataSearchSetupTable.GetRoleCenterID(); - DataSearchSetupTable."Table No." := Database::Customer; + DataSearchSetupTable."Table No." := Database::"Test Data Search"; DataSearchSetupTable.Insert(true); LibraryAssert.IsFalse(DataSearchSetupField.IsEmpty, 'Data Search (Field) should not be empty.'); end; -} \ No newline at end of file +} diff --git a/Apps/W1/DataSearch/test/TestDataSearchOnArchives.codeunit.al b/Apps/W1/DataSearch/test/TestDataSearchOnArchives.codeunit.al index 5fe6cbce3a..01d1ce3c81 100644 --- a/Apps/W1/DataSearch/test/TestDataSearchOnArchives.codeunit.al +++ b/Apps/W1/DataSearch/test/TestDataSearchOnArchives.codeunit.al @@ -85,4 +85,4 @@ codeunit 139508 "Test Data Search On Archives" begin IsExcluded := IsExcluded or (RelatedTableNo in [Database::"Customer Price Group", Database::"Work Type", Database::"Transport Method"]); end; -} \ No newline at end of file +} diff --git a/Apps/W1/EDocument/app/app.json b/Apps/W1/EDocument/app/app.json index 19cbc30287..3b96559f6a 100644 --- a/Apps/W1/EDocument/app/app.json +++ b/Apps/W1/EDocument/app/app.json @@ -10,7 +10,7 @@ "help": "https://go.microsoft.com/fwlink/?linkid=2204541", "url": "https://go.microsoft.com/fwlink/?LinkId=724011", "logo": "ExtensionLogo.png", - "contextSensitiveHelpUrl": "https://go.microsoft.com/fwlink/?linkid=2206603", + "contextSensitiveHelpUrl": "https://learn.microsoft.com/en-us/dynamics365/business-central/", "dependencies": [], "internalsVisibleTo": [ { @@ -34,4 +34,4 @@ }, "application": "25.0.0.0", "target": "OnPrem" -} \ No newline at end of file +} diff --git a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al index b20c997648..7706b1e13a 100644 --- a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al +++ b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al @@ -333,7 +333,6 @@ page 6121 "E-Document" ToolTip = 'Match E-document lines to Purchase Order.'; Image = SparkleFilled; Visible = ShowMapToOrder and CopilotVisible; - Enabled = CopilotEnabled; trigger OnAction() var @@ -481,7 +480,6 @@ page 6121 "E-Document" HasErrorsOrWarnings := false; HasErrors := false; IsProcessed := false; - CopilotEnabled := EDocPOMatching.IsCopilotEnabled(); CopilotVisible := EDocPOMatching.IsCopilotVisible(); end; @@ -580,7 +578,7 @@ page 6121 "E-Document" EDocumentHelper: Codeunit "E-Document Processing"; ErrorsAndWarningsNotification: Notification; RecordLinkTxt, StyleStatusTxt : Text; - ShowRelink, ShowMapToOrder, HasErrorsOrWarnings, HasErrors, IsIncomingDoc, IsProcessed, CopilotEnabled, CopilotVisible : Boolean; + ShowRelink, ShowMapToOrder, HasErrorsOrWarnings, HasErrors, IsIncomingDoc, IsProcessed, CopilotVisible : Boolean; EDocHasErrorOrWarningMsg: Label 'Errors or warnings found for E-Document. Please review below in "Error Messages" section.'; DocNotCreatedMsg: Label 'Failed to create new %1 from E-Document. Please review errors below.', Comment = '%1 - E-Document Document Type'; diff --git a/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrder.PageExt.al b/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrder.PageExt.al index 8fae7ddcf6..1659da0132 100644 --- a/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrder.PageExt.al +++ b/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrder.PageExt.al @@ -36,7 +36,6 @@ pageextension 6132 "E-Doc. Purchase Order" extends "Purchase Order" ApplicationArea = All; Image = SparkleFilled; Visible = ShowMapToEDocument and CopilotVisible; - Enabled = CopilotEnabled; trigger OnAction() var @@ -94,14 +93,13 @@ pageextension 6132 "E-Doc. Purchase Order" extends "Purchase Order" var - ShowMapToEDocument, CopilotEnabled, CopilotVisible : Boolean; + ShowMapToEDocument, CopilotVisible : Boolean; trigger OnOpenPage() var EDocPOMatching: Codeunit "E-Doc. PO Copilot Matching"; begin - CopilotEnabled := EDocPOMatching.IsCopilotEnabled(); CopilotVisible := EDocPOMatching.IsCopilotVisible(); end; diff --git a/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrderList.PageExt.al b/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrderList.PageExt.al index 4b4071d689..f33edf8865 100644 --- a/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrderList.PageExt.al +++ b/Apps/W1/EDocument/app/src/Extensions/EDocPurchaseOrderList.PageExt.al @@ -23,7 +23,6 @@ pageextension 6137 "E-Doc. Purchase Order List" extends "Purchase Order List" ApplicationArea = All; Image = SparkleFilled; Visible = ShowMapToEDocument and CopilotVisible; - Enabled = CopilotEnabled; trigger OnAction() var @@ -82,13 +81,12 @@ pageextension 6137 "E-Doc. Purchase Order List" extends "Purchase Order List" var - ShowMapToEDocument, CopilotEnabled, CopilotVisible : Boolean; + ShowMapToEDocument, CopilotVisible : Boolean; trigger OnOpenPage() var EDocPOMatching: Codeunit "E-Doc. PO Copilot Matching"; begin - CopilotEnabled := EDocPOMatching.IsCopilotEnabled(); CopilotVisible := EDocPOMatching.IsCopilotVisible(); end; diff --git a/Apps/W1/EDocument/app/src/Helpers/EDocumentImportHelper.Codeunit.al b/Apps/W1/EDocument/app/src/Helpers/EDocumentImportHelper.Codeunit.al index 26ab2ede5f..7e8289962a 100644 --- a/Apps/W1/EDocument/app/src/Helpers/EDocumentImportHelper.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Helpers/EDocumentImportHelper.Codeunit.al @@ -5,7 +5,9 @@ namespace Microsoft.eServices.EDocument; using Microsoft.Bank.Reconciliation; +using Microsoft.Finance.Currency; using Microsoft.Finance.GeneralLedger.Journal; +using Microsoft.Finance.GeneralLedger.Setup; using Microsoft.Finance.VAT.Calculation; using Microsoft.Foundation.Company; using Microsoft.Foundation.UOM; @@ -639,6 +641,21 @@ codeunit 6109 "E-Document Import Helper" SetFieldValue(EDocument, FieldRef, Value); end; + internal procedure GetCurrencyRoundingPrecision(CurrencyCode: Code[10]): Decimal + var + GeneralLedgerSetup: Record "General Ledger Setup"; + Currency: Record Currency; + AmountRoundingPrecision: Decimal; + begin + GeneralLedgerSetup.Get(); + AmountRoundingPrecision := GeneralLedgerSetup."Amount Rounding Precision"; + if CurrencyCode <> '' then + if Currency.Get(CurrencyCode) then + AmountRoundingPrecision := Currency."Amount Rounding Precision"; + + exit(AmountRoundingPrecision); + end; + local procedure FindAppropriateGLAccount(var EDocument: Record "E-Document"; var SourceRecRef: RecordRef; LineDescription: Text[250]; LineDirectUnitCost: Decimal): Code[20] var PurchasesPayablesSetup: Record "Purchases & Payables Setup"; diff --git a/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotMatching.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotMatching.Codeunit.al index 74b8e660a5..10ea66d330 100644 --- a/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotMatching.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotMatching.Codeunit.al @@ -6,6 +6,7 @@ using Microsoft.Purchases.Document; using Microsoft.Purchases.Setup; using Microsoft.eServices.EDocument.OrderMatch; using System.Environment; +using Microsoft.eServices.EDocument; using System.Telemetry; using System.Upgrade; @@ -108,7 +109,7 @@ codeunit 6163 "E-Doc. PO Copilot Matching" Session.LogMessage('0000MOT', AttempToUseCopilotMsg, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::All, 'Category', FeatureName()); // Generate OpenAI Completion - AzureOpenAI.SetAuthorization(Enum::"AOAI Model Type"::"Chat Completions", AOAIDeployments.GetGPT4Latest()); + AzureOpenAI.SetAuthorization(Enum::"AOAI Model Type"::"Chat Completions", AOAIDeployments.GetGPT4Preview()); AzureOpenAI.SetCopilotCapability(Enum::"Copilot Capability"::"E-Document Matching Assistance"); AOAIChatCompletionParams.SetMaxTokens(MaxTokens()); @@ -143,22 +144,12 @@ codeunit 6163 "E-Doc. PO Copilot Matching" end; end; - procedure IsCopilotEnabled(): Boolean - var - AIMatchingImpl: Codeunit "E-Doc. PO Copilot Matching"; - AzureOpenAI: Codeunit "Azure OpenAI"; - begin - AIMatchingImpl.RegisterAICapability(); - if not AzureOpenAI.IsEnabled(Enum::"Copilot Capability"::"E-Document Matching Assistance", true) then - exit(false); - - exit(true); - end; - procedure IsCopilotVisible(): Boolean var + AIMatchingImpl: Codeunit "E-Doc. PO Copilot Matching"; EnvironmentInformation: Codeunit "Environment Information"; begin + AIMatchingImpl.RegisterAICapability(); if not EnvironmentInformation.IsSaaSInfrastructure() then exit(false); @@ -166,10 +157,18 @@ codeunit 6163 "E-Doc. PO Copilot Matching" end; procedure SumUnitCostForAIMatches(var TempAIProposalBuffer: Record "E-Doc. PO Match Prop. Buffer" temporary) Sum: Decimal + var + EDocument: Record "E-Document"; + EDocumentImportHelper: Codeunit "E-Document Import Helper"; + RoundPrecision, Discount, DiscountedUnitCost : Decimal; begin if TempAIProposalBuffer.FindSet() then repeat - Sum += TempAIProposalBuffer."Matched Quantity" * TempAIProposalBuffer."E-Document Direct Unit Cost"; + EDocument.Get(TempAIProposalBuffer."E-Document Entry No."); + RoundPrecision := EDocumentImportHelper.GetCurrencyRoundingPrecision(EDocument."Currency Code"); + Discount := Round((TempAIProposalBuffer."E-Document Direct Unit Cost" * TempAIProposalBuffer."E-Document Line Discount") / 100, RoundPrecision); + DiscountedUnitCost := TempAIProposalBuffer."E-Document Direct Unit Cost" - Discount; + Sum += TempAIProposalBuffer."Matched Quantity" * DiscountedUnitCost; until TempAIProposalBuffer.Next() = 0; end; @@ -263,7 +262,7 @@ codeunit 6163 "E-Doc. PO Copilot Matching" local procedure PrepareEDocumentLineStatement(var TempEDocumentImportedLine: Record "E-Doc. Imported Line" temporary; var EDocumentImportLinesTxt: Text) begin - EDocumentImportLinesTxt += '- EID: ' + Format(TempEDocumentImportedLine."Line No."); + EDocumentImportLinesTxt += 'EID: ' + Format(TempEDocumentImportedLine."Line No."); EDocumentImportLinesTxt += ', Description: ' + TempEDocumentImportedLine.Description; EDocumentImportLinesTxt += ', Unit of Measure: ' + TempEDocumentImportedLine."Unit of Measure Code"; if TempEDocumentImportedLine."Line Discount %" <> 0 then @@ -278,7 +277,7 @@ codeunit 6163 "E-Doc. PO Copilot Matching" if PurchaseOrderLines.FindSet() then repeat if not PurchaseLineTxt.Contains('PID: ' + Format(PurchaseOrderLines."Line No.")) then begin - PurchaseLineTxt += '- PID: ' + Format(PurchaseOrderLines."Line No."); + PurchaseLineTxt += 'PID: ' + Format(PurchaseOrderLines."Line No."); PurchaseLineTxt += ', Description: ' + PurchaseOrderLines.Description; PurchaseLineTxt += ', Unit of Measure: ' + PurchaseOrderLines."Unit of Measure Code"; if PurchaseOrderLines."Line Discount %" <> 0 then diff --git a/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotProp.Page.al b/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotProp.Page.al index db776f4cee..6ae83cdcc9 100644 --- a/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotProp.Page.al +++ b/Apps/W1/EDocument/app/src/Processing/OrderMatching/Copilot/EDocPOCopilotProp.Page.al @@ -73,7 +73,7 @@ page 6166 "E-Doc. PO Copilot Prop" field("Matched Total Amount"; MatchedTotal) { ApplicationArea = All; - Caption = 'Matched Total Amount Incl. VAT'; + Caption = 'Matched Total Amount Excl. VAT'; Editable = false; ToolTip = 'Specifies the matched amount excluding VAT'; } @@ -225,11 +225,19 @@ page 6166 "E-Doc. PO Copilot Prop" end; local procedure SumUnitCost(var EDocOrderMatches: Record "E-Doc. Order Match" temporary) Sum: Decimal + var + EDocument: Record "E-Document"; + EDocumentImportHelper: Codeunit "E-Document Import Helper"; + RoundPrecision, Discount, DiscountedUnitCost : Decimal; begin EDocOrderMatches.Reset(); if EDocOrderMatches.FindSet() then repeat - Sum += EDocOrderMatches.Quantity * EDocOrderMatches."E-Document Direct Unit Cost"; + EDocument.Get(EDocOrderMatches."E-Document Entry No."); + RoundPrecision := EDocumentImportHelper.GetCurrencyRoundingPrecision(EDocument."Currency Code"); + Discount := Round((EDocOrderMatches."E-Document Direct Unit Cost" * EDocOrderMatches."Line Discount %") / 100, RoundPrecision); + DiscountedUnitCost := EDocOrderMatches."E-Document Direct Unit Cost" - Discount; + Sum += EDocOrderMatches.Quantity * DiscountedUnitCost; until EDocOrderMatches.Next() = 0; end; diff --git a/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocLineMatching.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocLineMatching.Codeunit.al index 9ae389245e..f997d57d4c 100644 --- a/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocLineMatching.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocLineMatching.Codeunit.al @@ -451,15 +451,4 @@ codeunit 6164 "E-Doc. Line Matching" TempPurchaseLine.MarkedOnly(true); end; - procedure SumUnitCostForMatches(EDocument: Record "E-Document") Sum: Decimal - var - EDocOrderMatch: Record "E-Doc. Order Match"; - begin - EDocOrderMatch.SetRange("E-Document Entry No.", EDocument."Entry No"); - EDocOrderMatch.SetRange("Document Order No.", EDocument."Order No."); - if EDocOrderMatch.FindSet() then - repeat - Sum += EDocOrderMatch.Quantity * EDocOrderMatch."E-Document Direct Unit Cost"; - until EDocOrderMatch.Next() = 0; - end; } \ No newline at end of file diff --git a/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocOrderLineMatching.Page.al b/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocOrderLineMatching.Page.al index 275e4665c4..14319f502b 100644 --- a/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocOrderLineMatching.Page.al +++ b/Apps/W1/EDocument/app/src/Processing/OrderMatching/EDocOrderLineMatching.Page.al @@ -3,6 +3,7 @@ namespace Microsoft.eServices.EDocument.OrderMatch; using Microsoft.eServices.EDocument; using Microsoft.eServices.EDocument.OrderMatch.Copilot; using Microsoft.Purchases.Document; +using System.AI; using System.Telemetry; #pragma warning disable AS0032 page 6167 "E-Doc. Order Line Matching" @@ -116,7 +117,6 @@ page 6167 "E-Doc. Order Line Matching" ApplicationArea = All; Image = SparkleFilled; Visible = CopilotActionVisible; - Enabled = CopilotActionEnabled; trigger OnAction() begin @@ -221,7 +221,7 @@ page 6167 "E-Doc. Order Line Matching" FeatureTelemetry: Codeunit "Feature Telemetry"; EDocMatchOrderLines: Codeunit "E-Doc. Line Matching"; DiscountNotification, CostNotification : Notification; - CopilotActionVisible, CopilotActionEnabled, AutoRunCopilot : Boolean; + CopilotActionVisible, AutoRunCopilot : Boolean; LineDiscountVaryMatchMsg: Label 'Matched e-document lines (%1) has Line Discount % different from matched purchase order line. Please verify matches are correct.', Comment = '%1 - Line number'; LineCostVaryMatchMsg: Label 'Matched e-document lines (%1) has Direct Unit Cost different from matched purchase order line. Please verify matches are correct.', Comment = '%1 - Line number'; NoMatchesFoundMsg: Label 'Copilot could not find any line matches. Please review manually'; @@ -232,7 +232,6 @@ page 6167 "E-Doc. Order Line Matching" EDocPOMatching: Codeunit "E-Doc. PO Copilot Matching"; begin CopilotActionVisible := EDocPOMatching.IsCopilotVisible(); - CopilotActionEnabled := EDocPOMatching.IsCopilotEnabled(); end; trigger OnAfterGetRecord() @@ -245,7 +244,7 @@ page 6167 "E-Doc. Order Line Matching" OpenPurchaseHeader(); - if CopilotActionEnabled and CopilotActionVisible and AutoRunCopilot then begin + if CopilotActionVisible and AutoRunCopilot then begin AutoRunCopilot := false; EDocOrderMatch.SetRange("E-Document Entry No.", Rec."Entry No"); if EDocOrderMatch.IsEmpty() then @@ -326,9 +325,13 @@ page 6167 "E-Doc. Order Line Matching" var TempEDocImportedLines: Record "E-Doc. Imported Line" temporary; TempPurchaseLines: Record "Purchase Line" temporary; + AzureOpenAI: Codeunit "Azure OpenAI"; AIMatchingImpl: Codeunit "E-Doc. PO Copilot Matching"; EDocOrderMatchAIProposal: Page "E-Doc. PO Copilot Prop"; begin + if not AzureOpenAI.IsEnabled(Enum::"Copilot Capability"::"E-Document Matching Assistance") then + exit; + FeatureTelemetry.LogUptake('0000MB0', AIMatchingImpl.FeatureName(), Enum::"Feature Uptake Status"::Discovered); FeatureTelemetry.LogUptake('0000MB1', AIMatchingImpl.FeatureName(), Enum::"Feature Uptake Status"::"Set up"); diff --git a/Apps/W1/Email - Outlook REST API/app/src/EmailOAuthClient.Codeunit.al b/Apps/W1/Email - Outlook REST API/app/src/EmailOAuthClient.Codeunit.al index 04c65b622e..e25888df0f 100644 --- a/Apps/W1/Email - Outlook REST API/app/src/EmailOAuthClient.Codeunit.al +++ b/Apps/W1/Email - Outlook REST API/app/src/EmailOAuthClient.Codeunit.al @@ -184,8 +184,7 @@ codeunit 4507 "Email - OAuth Client" implements "Email - OAuth Client v2" OAuth2: Codeunit OAuth2; [NonDebuggable] ClientId: Text; - [NonDebuggable] - ClientSecret: Text; + ClientSecret: SecretText; RedirectURL: Text; IsInitialized: Boolean; Scopes: List of [Text]; diff --git a/Apps/W1/Email - Outlook REST API/app/src/EmailOutlookAPIHelper.Codeunit.al b/Apps/W1/Email - Outlook REST API/app/src/EmailOutlookAPIHelper.Codeunit.al index b54b34d120..b8a300f354 100644 --- a/Apps/W1/Email - Outlook REST API/app/src/EmailOutlookAPIHelper.Codeunit.al +++ b/Apps/W1/Email - Outlook REST API/app/src/EmailOutlookAPIHelper.Codeunit.al @@ -159,8 +159,19 @@ codeunit 4509 "Email - Outlook API Helper" exit(RecipientsJson); end; +#if not CLEAN25 [NonDebuggable] + [Obsolete('Replaced by an overload that takes in SecretText data type for ClientSecret', '25.0')] procedure GetClientIDAndSecret(var ClientId: Text; var ClientSecret: Text) + var + Secret: SecretText; + begin + GetClientIDAndSecret(ClientId, Secret); + ClientSecret := Secret.Unwrap(); + end; +#endif + + procedure GetClientIDAndSecret(var ClientId: Text; var ClientSecret: SecretText) var Setup: Record "Email - Outlook API Setup"; EnvironmentInformation: Codeunit "Environment Information"; diff --git a/Apps/W1/Email - SMTP Connector/app/src/Authentication/DummySMTPAuthentication.Codeunit.al b/Apps/W1/Email - SMTP Connector/app/src/Authentication/DummySMTPAuthentication.Codeunit.al index 8da32b0de6..448229e69a 100644 --- a/Apps/W1/Email - SMTP Connector/app/src/Authentication/DummySMTPAuthentication.Codeunit.al +++ b/Apps/W1/Email - SMTP Connector/app/src/Authentication/DummySMTPAuthentication.Codeunit.al @@ -9,9 +9,6 @@ using System; codeunit 4517 "Dummy SMTP Authentication" implements "SMTP Authentication" { - ObsoleteReason = 'Dummy codeunit'; - ObsoleteState = Pending; - ObsoleteTag = '20.0'; Access = Internal; procedure Validate(var SMTPAccount: Record "SMTP Account"); diff --git a/Apps/W1/EnforcedDigitalVouchers/app/app.json b/Apps/W1/EnforcedDigitalVouchers/app/app.json index 7f9d864097..9eacb4a353 100644 --- a/Apps/W1/EnforcedDigitalVouchers/app/app.json +++ b/Apps/W1/EnforcedDigitalVouchers/app/app.json @@ -23,6 +23,11 @@ "id": "928f7b70-0dbd-431a-beb5-f45c4adbd361", "name": "Enforced Digital Vouchers Test Library", "publisher": "Microsoft" + }, + { + "id": "bb837764-d7cc-4b7b-898a-3ea5a1fab62f", + "name": "Enforced Digital Vouchers (DK)", + "publisher": "Microsoft" } ], "features": [ diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/EntrySetup/DigitalVoucherEntrySetup.Page.al b/Apps/W1/EnforcedDigitalVouchers/app/src/EntrySetup/DigitalVoucherEntrySetup.Page.al index 540cff3512..2e4f12ccbf 100644 --- a/Apps/W1/EnforcedDigitalVouchers/app/src/EntrySetup/DigitalVoucherEntrySetup.Page.al +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/EntrySetup/DigitalVoucherEntrySetup.Page.al @@ -12,6 +12,7 @@ page 5579 "Digital Voucher Entry Setup" AboutText = 'Here you can select the line with a certain entry type and setup the type of the digital voucher''s check you want to perform.'; ApplicationArea = Basic, Suite; UsageCategory = Administration; + DelayedInsert = true; layout { diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVouchPstdServCrMemo.PageExt.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVouchPstdServCrMemo.PageExt.al new file mode 100644 index 0000000000..ce5e91d8f4 --- /dev/null +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVouchPstdServCrMemo.PageExt.al @@ -0,0 +1,18 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.EServices.EDocument; + +using Microsoft.Service.History; + +pageextension 5592 "Dig.Vouch. Pstd. Serv.Cr.Memo" extends "Posted Service Credit Memo" +{ + layout + { + modify(IncomingDocAttachFactBox) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPstdServInv.PageExt.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPstdServInv.PageExt.al new file mode 100644 index 0000000000..87753fad6a --- /dev/null +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPstdServInv.PageExt.al @@ -0,0 +1,18 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.EServices.EDocument; + +using Microsoft.Service.History; + +pageextension 5591 "Dig. Voucher Pstd. Serv. Inv." extends "Posted Service Invoice" +{ + layout + { + modify(IncomingDocAttachFactBox) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPurchRetOrder.PageExt.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPurchRetOrder.PageExt.al new file mode 100644 index 0000000000..d7814c92fb --- /dev/null +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherPurchRetOrder.PageExt.al @@ -0,0 +1,18 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.EServices.EDocument; + +using Microsoft.Purchases.Document; + +pageextension 5594 "Dig. Voucher Purch. Ret. Order" extends "Purchase Return Order" +{ + layout + { + modify(IncomingDocAttachFactBox) + { + Visible = true; + } + } +} diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServCrMemo.PageExt.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServCrMemo.PageExt.al new file mode 100644 index 0000000000..c8a250c476 --- /dev/null +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServCrMemo.PageExt.al @@ -0,0 +1,18 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.EServices.EDocument; + +using Microsoft.Service.Document; + +pageextension 5590 "Dig. Voucher Serv. Cr. Memo" extends "Service Credit Memo" +{ + layout + { + modify(IncomingDocAttachFactBox) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMREAD.PermissionSetExt.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServInvoice.PageExt.al similarity index 57% rename from Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMREAD.PermissionSetExt.al rename to Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServInvoice.PageExt.al index 631d437e20..c430a80b6b 100644 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMREAD.PermissionSetExt.al +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServInvoice.PageExt.al @@ -2,11 +2,17 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. // ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; +namespace Microsoft.EServices.EDocument; -using System.Security.AccessControl; +using Microsoft.Service.Document; -permissionsetextension 6612 "FS D365 DYN CRM READ" extends "D365 DYN CRM READ" +pageextension 5589 "Dig. Voucher Serv. Invoice" extends "Service Invoice" { - IncludedPermissionSets = "FS - Read"; -} + layout + { + modify(IncomingDocAttachFactBox) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365READ.PermissionSetExt.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServOrder.PageExt.al similarity index 58% rename from Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365READ.PermissionSetExt.al rename to Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServOrder.PageExt.al index b6665799c3..01718ec6a5 100644 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365READ.PermissionSetExt.al +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigVoucherServOrder.PageExt.al @@ -2,11 +2,17 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. // ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; +namespace Microsoft.EServices.EDocument; -using System.Security.AccessControl; +using Microsoft.Service.Document; -permissionsetextension 6613 "FS D365 READ" extends "D365 READ" +pageextension 5588 "Dig. Voucher Serv. Order" extends "Service Order" { - IncludedPermissionSets = "FS - Read"; -} + layout + { + modify(IncomingDocAttachFactBox) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365AUTOMATION.PermissionSetExt.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigitalVoucherPurchOrder.PageExt.al similarity index 57% rename from Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365AUTOMATION.PermissionSetExt.al rename to Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigitalVoucherPurchOrder.PageExt.al index 50c5775fa2..a4b0c252b6 100644 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365AUTOMATION.PermissionSetExt.al +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Extensions/DigitalVoucherPurchOrder.PageExt.al @@ -2,11 +2,17 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. // ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; +namespace Microsoft.EServices.EDocument; -using System.Security.AccessControl; +using Microsoft.Purchases.Document; -permissionsetextension 6610 "FS D365 AUTOMATION" extends "D365 AUTOMATION" +pageextension 5593 "Digital Voucher Purch. Order" extends "Purchase Order" { - IncludedPermissionSets = "FS - Edit"; + layout + { + modify(IncomingDocAttachFactBox) + { + Visible = true; + } + } } diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/DigitalVoucherImpl.Codeunit.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/DigitalVoucherImpl.Codeunit.al index 8c8d1dbaaf..d667861640 100644 --- a/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/DigitalVoucherImpl.Codeunit.al +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/DigitalVoucherImpl.Codeunit.al @@ -7,15 +7,21 @@ namespace Microsoft.EServices.EDocument; using Microsoft.Finance.GeneralLedger.Journal; using Microsoft.Finance.GeneralLedger.Ledger; using Microsoft.Finance.GeneralLedger.Posting; +using Microsoft.Service.Posting; using Microsoft.Finance.GeneralLedger.Reports; +using Microsoft.Foundation.AuditCodes; using Microsoft.Foundation.Reporting; using Microsoft.Purchases.Document; using Microsoft.Purchases.History; using Microsoft.Purchases.Posting; +using Microsoft.Purchases.Vendor; +using Microsoft.Sales.Customer; using Microsoft.Sales.Document; using Microsoft.Sales.History; using Microsoft.Sales.Posting; using Microsoft.Sales.Receivables; +using Microsoft.Service.Document; +using Microsoft.Service.History; using System.Email; using System.Environment.Configuration; using System.Media; @@ -38,7 +44,7 @@ codeunit 5579 "Digital Voucher Impl." var DigitalVoucherEntrySetup: Record "Digital Voucher Entry Setup"; begin - DigitalVoucherEntrySetup.Get(EntryType); + GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, EntryType); HandleDigitalVoucherForEntryTypeAndDoc(ErrorMessageMgt, DigitalVoucherEntrySetup, Record); end; @@ -60,7 +66,7 @@ codeunit 5579 "Digital Voucher Impl." RecRef: RecordRef; DigitalVoucherCheck: Interface "Digital Voucher Check"; begin - DigitalVoucherEntrySetup.Get(EntryType); + GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, EntryType); if DigitalVoucherEntrySetup."Check Type" = DigitalVoucherEntrySetup."Check Type"::"No Check" then exit; DigitalVoucherCheck := DigitalVoucherEntrySetup."Check Type"; @@ -75,56 +81,77 @@ codeunit 5579 "Digital Voucher Impl." RecRef: RecordRef; DigitalVoucherCheck: Interface "Digital Voucher Check"; begin - if not DigitalVoucherEntrySetup.Get(DigitalVoucherEntry.GetVoucherTypeFromGLEntryOrSourceType(GLEntry, GenJournalSourceType)) then + if not GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntry.GetVoucherTypeFromGLEntryOrSourceType(GLEntry, GenJournalSourceType)) then exit; if DigitalVoucherEntrySetup."Check Type" = DigitalVoucherEntrySetup."Check Type"::"No Check" then exit; DigitalVoucherCheck := DigitalVoucherEntrySetup."Check Type"; FindGenJournalLineFromGLEntry(ConnectedGenJournalLine, GenJournalLine, GLEntry); + if not (GenJournalLine."Document Type" in [GenJournalLine."Document Type"::Invoice, GenJournalLine."Document Type"::"Credit Memo"]) then + exit; RecRef.GetTable(ConnectedGenJournalLine); DigitalVoucherCheck.GenerateDigitalVoucherForPostedDocument(DigitalVoucherEntrySetup."Entry Type", RecRef); end; + [CommitBehavior(CommitBehavior::Ignore)] procedure GenerateDigitalVoucherForDocument(RecRef: RecordRef) var SalesInvHeader: Record "Sales Invoice Header"; SalesCrMemoHeader: Record "Sales Cr.Memo Header"; + ServInvHeader: Record "Service Invoice Header"; + ServCrMemoHeader: Record "Service Cr.Memo Header"; PurchInvHeader: Record "Purch. Inv. Header"; PurchCrMemoHeader: Record "Purch. Cr. Memo Hdr."; - DigVoucherManualSubscriber: Codeunit "Dig. Voucher Manual Subscriber"; + ReportSelections: Record "Report Selections"; begin case RecRef.Number of Database::"Sales Invoice Header": begin RecRef.SetTable(SalesInvHeader); - SalesInvHeader.SetRecFilter(); - BindSubscription(DigVoucherManualSubscriber); - SalesInvHeader.PrintToDocumentAttachment(SalesInvHeader); - UnbindSubscription(DigVoucherManualSubscriber); + AttachDigitalVoucherFromReportPDF( + ReportSelections.Usage::"S.Invoice", RecRef, true, + SalesInvHeader."Posting Date", SalesInvHeader."No.", Database::Customer, + SalesInvHeader."Bill-to Customer No.", Report::"Standard Sales - Invoice"); + end; + Database::"Service Invoice Header": + begin + RecRef.SetTable(ServInvHeader); + AttachDigitalVoucherFromReportPDF( + ReportSelections.Usage::"SM.Invoice", RecRef, true, + ServInvHeader."Posting Date", ServInvHeader."No.", Database::Customer, + ServInvHeader."Bill-to Customer No.", Report::"Service - Invoice"); + end; + Database::"Service Cr.Memo Header": + begin + RecRef.SetTable(ServCrMemoHeader); + AttachDigitalVoucherFromReportPDF( + ReportSelections.Usage::"SM.Credit Memo", RecRef, false, + ServCrMemoHeader."Posting Date", ServCrMemoHeader."No.", Database::Customer, + ServCrMemoHeader."Bill-to Customer No.", Report::"Service - Credit Memo"); end; Database::"Sales Cr.Memo Header": begin RecRef.SetTable(SalesCrMemoHeader); - SalesCrMemoHeader.SetRecFilter(); - BindSubscription(DigVoucherManualSubscriber); - SalesCrMemoHeader.PrintToDocumentAttachment(SalesCrMemoHeader); - UnbindSubscription(DigVoucherManualSubscriber); + AttachDigitalVoucherFromReportPDF( + ReportSelections.Usage::"S.Cr.Memo", RecRef, false, + SalesCrMemoHeader."Posting Date", SalesCrMemoHeader."No.", Database::Customer, + SalesCrMemoHeader."Bill-to Customer No.", Report::"Standard Sales - Credit Memo"); end; Database::"Purch. Inv. Header": begin RecRef.SetTable(PurchInvHeader); - PurchInvHeader.SetRecFilter(); - BindSubscription(DigVoucherManualSubscriber); - PurchInvHeader.PrintToDocumentAttachment(PurchInvHeader); - UnbindSubscription(DigVoucherManualSubscriber); + AttachDigitalVoucherFromReportPDF( + ReportSelections.Usage::"P.Invoice", RecRef, true, + PurchInvHeader."Posting Date", PurchInvHeader."No.", Database::Vendor, + PurchInvHeader."Pay-to Vendor No.", report::"Purchase - Invoice"); end; Database::"Purch. Cr. Memo Hdr.": begin RecRef.SetTable(PurchCrMemoHeader); - PurchCrMemoHeader.SetRecFilter(); - BindSubscription(DigVoucherManualSubscriber); - PurchCrMemoHeader.PrintToDocumentAttachment(PurchCrMemoHeader); - UnbindSubscription(DigVoucherManualSubscriber); + AttachDigitalVoucherFromReportPDF( + ReportSelections.Usage::"P.Cr.Memo", RecRef, false, + PurchCrMemoHeader."Posting Date", PurchCrMemoHeader."No.", Database::Vendor, + PurchCrMemoHeader."Pay-to Vendor No.", report::"Purchase - Credit Memo"); end; Database::"Gen. Journal Line": AttachGenJnlLinePDFToIncomingDocument(RecRef); @@ -156,11 +183,19 @@ codeunit 5579 "Digital Voucher Impl." var DigitalVoucherEntrySetup: Record "Digital Voucher Entry Setup"; IncomingDocument: Record "Incoming Document"; + SourceCodeSetup: Record "Source Code Setup"; VoucherAttached: Boolean; begin - DigitalVoucherEntrySetup.Get(DigitalVoucherEntryType); + GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntryType); VoucherAttached := GetIncomingDocumentRecordFromRecordRef(IncomingDocument, RecRef); - exit(VoucherAttached or DigitalVoucherEntrySetup."Generate Automatically"); + if VoucherAttached then + exit(true); + if DigitalVoucherEntrySetup."Generate Automatically" then + exit(true); + SourceCodeSetup.Get(); + if IsPaymentReconciliationJournal(DigitalVoucherEntrySetup."Entry Type", RecRef) then + exit(true); + exit(false); end; procedure CheckIncomingDocumentChange(Rec: Record "Incoming Document Attachment") @@ -183,9 +218,23 @@ codeunit 5579 "Digital Voucher Impl." error(CannotChangeIncomDocWithEnforcedDigitalVoucherErr); end; + procedure GetDigitalVoucherEntrySetup(var DigitalVoucherEntrySetup: Record "Digital Voucher Entry Setup"; EntryType: Enum "Digital Voucher Entry Type"): Boolean + begin + if DigitalVoucherFeature.EnforceDigitalVoucherFunctionality() then + OnHandleDigitalVoucherEntrySetupWhenEnforced(EntryType); + exit(DigitalVoucherEntrySetup.Get(EntryType)); + end; + procedure GetIncomingDocumentRecordFromRecordRef(var IncomingDocument: Record "Incoming Document"; MainRecordRef: RecordRef): Boolean var IncomingDocumentAttachment: Record "Incoming Document Attachment"; + begin + if not FilterIncomingDocumentRecordFromRecordRef(IncomingDocumentAttachment, IncomingDocument, MainRecordRef) then + exit(false); + exit(not IncomingDocumentAttachment.IsEmpty()); + end; + + local procedure FilterIncomingDocumentRecordFromRecordRef(var IncomingDocumentAttachment: Record "Incoming Document Attachment"; var IncomingDocument: Record "Incoming Document"; MainRecordRef: RecordRef): Boolean begin Clear(IncomingDocument); if not IncomingDocument.FindFromIncomingDocumentEntryNo(MainRecordRef, IncomingDocument) then @@ -193,7 +242,7 @@ codeunit 5579 "Digital Voucher Impl." if IncomingDocument."Entry No." = 0 then exit(false); IncomingDocumentAttachment.SetRange("Incoming Document Entry No.", IncomingDocument."Entry No."); - exit(not IncomingDocumentAttachment.IsEmpty()); + exit(true); end; local procedure AttachGenJnlLinePDFToIncomingDocument(RecRef: RecordRef) @@ -223,6 +272,88 @@ codeunit 5579 "Digital Voucher Impl." ConnectedGenJnlLine := CurrGenJnlLine; end; + local procedure CopyDigitalVoucherToCorrectiveDocument(DigitalVoucherEntryType: Enum "Digital Voucher Entry Type"; RecordVar: Variant; DocNo: Code[20]; PostingDate: Date): Integer + var + DigitalVoucherEntrySetup: Record "Digital Voucher Entry Setup"; + InvIncomingDocument: Record "Incoming Document"; + InvIncomingDocumentAttachment: Record "Incoming Document Attachment"; + ImportAttachmentIncDoc: Codeunit "Import Attachment - Inc. Doc."; + RecRef: RecordRef; + begin + if not DigitalVoucherFeature.IsFeatureEnabled() then + exit; + if not GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntryType) then + exit; + if DigitalVoucherEntrySetup."Generate Automatically" then + exit; + RecRef.GetTable(RecordVar); + if not FilterIncomingDocumentRecordFromRecordRef(InvIncomingDocumentAttachment, InvIncomingDocument, RecRef) then + exit; + if not InvIncomingDocumentAttachment.FindFirst() then + exit; + InvIncomingDocumentAttachment.Reset(); + InvIncomingDocumentAttachment.SetRange("Document No.", DocNo); + InvIncomingDocumentAttachment.SetRange("Posting Date", PostingDate); + ImportAttachmentIncDoc.CreateNewAttachment(InvIncomingDocumentAttachment); + InvIncomingDocumentAttachment.Insert(true); + exit(InvIncomingDocumentAttachment."Incoming Document Entry No."); + end; + + local procedure IsPaymentReconciliationJournal(DigitalVoucherEntryType: Enum "Digital Voucher Entry Type"; RecRef: RecordRef): Boolean + var + SourceCodeSetup: Record "Source Code Setup"; + GenJournalLine: Record "Gen. Journal Line"; + FieldRef: FieldRef; + SourceCodeValue: Text; + begin + if DigitalVoucherEntryType <> DigitalVoucherEntryType::"Purchase Journal" then + exit(false); + if not SourceCodeSetup.Get() then + exit(false); + FieldRef := RecRef.Field(GenJournalLine.FieldNo("Source Code")); + if not Evaluate(SourceCodeValue, FieldRef.Value()) then + exit(false); + exit(SourceCodeValue = SourceCodeSetup."Payment Reconciliation Journal"); + end; + + local procedure AttachDigitalVoucherFromReportPDF(ReportUsage: Enum "Report Selection Usage"; RecRef: RecordRef; IsInvoice: Boolean; PostingDate: Date; DocNo: Code[20]; AccountTableNo: Integer; AccountNo: Code[20]; StandardReportID: Integer) + var + TempAttachReportSelections: Record "Report Selections" temporary; + SalesHeader: Record "Sales Header"; + TempBlob: Codeunit "Temp Blob"; + DocType: Text; + begin + FindReportSelections(TempAttachReportSelections, ReportUsage, AccountTableNo, AccountNo, StandardReportID); + RecRef.SetRecFilter(); + TempAttachReportSelections.SaveReportAsPDFInTempBlob(TempBlob, TempAttachReportSelections."Report ID", RecRef, TempAttachReportSelections."Custom Report Layout Code", ReportUsage); + if IsInvoice then + DocType := Format(SalesHeader."Document Type"::Invoice) + else + DocType := Format(SalesHeader."Document Type"::"Credit Memo"); + AttachBlobToIncomingDocument(TempBlob, DocType, PostingDate, DocNo); + end; + + local procedure FindReportSelections(var TempAttachReportSelections: Record "Report Selections" temporary; ReportUsage: Enum "Report Selection Usage"; AccountTableNo: Integer; AccountNo: Code[20]; StandardReportID: Integer) + var + ReportSelections: Record "Report Selections"; + begin + ReportSelections.SetRange(Usage, ReportUsage); + ReportSelections.SetFilter("Report ID", '<>0'); + ReportSelections.FindReportSelections(TempAttachReportSelections, AccountNo, AccountTableNo); + TempAttachReportSelections.SetRange("Use for Email Body", false); + TempAttachReportSelections.SetRange("Use for Email Attachment", false); + if TempAttachReportSelections.FindFirst() then + exit; + TempAttachReportSelections.SetRange("Use for Email Body"); + TempAttachReportSelections.SetRange("Use for Email Attachment"); + if TempAttachReportSelections.FindFirst() then + exit; + Clear(TempAttachReportSelections); + TempAttachReportSelections.Usage := ReportUsage; + TempAttachReportSelections."Report ID" := StandardReportID; + TempAttachReportSelections.Insert(); + end; + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Guided Experience", 'OnRegisterAssistedSetup', '', true, true)] local procedure InsertIntoAssistedSetup() var @@ -249,7 +380,7 @@ codeunit 5579 "Digital Voucher Impl." exit; if not SalesHeader.Invoice then exit; - DigitalVoucherEntrySetup.Get(DigitalVoucherEntrySetup."Entry Type"::"Sales Document"); + GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntrySetup."Entry Type"::"Sales Document"); if DigitalVoucherEntrySetup."Check Type" = DigitalVoucherEntrySetup."Check Type"::"No Check" then exit; DigitalVoucherCheck := DigitalVoucherEntrySetup."Check Type"; @@ -257,6 +388,30 @@ codeunit 5579 "Digital Voucher Impl." DigitalVoucherCheck.CheckVoucherIsAttachedToDocument(ErrorMessageMgt, DigitalVoucherEntrySetup."Entry Type", RecRef); end; + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Service-Post", 'OnInitializeOnAfterCheckAndSetPostingConstants', '', true, true)] + local procedure OnInitializeOnAfterCheckAndSetPostingConstants(var PassedServiceHeader: Record "Service Header"; var PassedInvoice: Boolean; PreviewMode: Boolean) + var + DigitalVoucherEntrySetup: Record "Digital Voucher Entry Setup"; + DummyErrorMessageMgt: Codeunit "Error Message Management"; + RecRef: RecordRef; + DigitalVoucherCheck: Interface "Digital Voucher Check"; + begin + if PreviewMode then + exit; + if not DigitalVoucherFeature.IsFeatureEnabled() then + exit; + if not PassedInvoice then + exit; + if PreviewMode then + exit; + GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntrySetup."Entry Type"::"Sales Document"); + if DigitalVoucherEntrySetup."Check Type" = DigitalVoucherEntrySetup."Check Type"::"No Check" then + exit; + DigitalVoucherCheck := DigitalVoucherEntrySetup."Check Type"; + RecRef.GetTable(PassedServiceHeader); + DigitalVoucherCheck.CheckVoucherIsAttachedToDocument(DummyErrorMessageMgt, DigitalVoucherEntrySetup."Entry Type", RecRef); + end; + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post Prepayments", 'OnAfterCheckPrepmtDoc', '', true, true)] local procedure OnAfterCheckSalesPrepmtDoc(SalesHeader: Record "Sales Header"; DocumentType: Option Invoice,"Credit Memo"; CommitIsSuppressed: Boolean; var ErrorMessageMgt: Codeunit "Error Message Management") begin @@ -294,7 +449,9 @@ codeunit 5579 "Digital Voucher Impl." exit; if GenJournalLine."System-Created Entry" then exit; - if not DigitalVoucherEntrySetup.Get(DigitalVoucherEntry.GetVoucherEntryTypeFromGenJnlLine(GenJournalLine)) then + if not (GenJournalLine."Document Type" in [GenJournalLine."Document Type"::Invoice, GenJournalLine."Document Type"::"Credit Memo"]) then + exit; + if not GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntry.GetVoucherEntryTypeFromGenJnlLine(GenJournalLine)) then exit; HandleDigitalVoucherForEntryTypeAndDoc(ErrorMessageMgt, DigitalVoucherEntrySetup, GenJournalLine); end; @@ -308,7 +465,31 @@ codeunit 5579 "Digital Voucher Impl." exit; if not SalesHeader.Invoice then exit; - HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Sales Document", SalesInvoiceHeader); + if SalesInvoiceHeader."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Sales Document", SalesInvoiceHeader); + if SalesCrMemoHeader."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Sales Document", SalesCrMemoHeader); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Service-Post", 'OnAfterPostServiceDoc', '', true, true)] + local procedure CheckServiceVoucherOnAfterPostServiceDoc(ServInvoiceNo: Code[20]; ServCrMemoNo: Code[20]; PassedInvoice: Boolean) + var + ServInvHeader: Record "Service Invoice Header"; + ServCrMemoHeader: Record "Service Cr.Memo Header"; + RecVar: Variant; + begin + if not DigitalVoucherFeature.IsFeatureEnabled() then + exit; + if not PassedInvoice then + exit; + if ServInvoiceNo = '' then begin + ServCrMemoHeader.Get(ServCrMemoNo); + RecVar := ServCrMemoHeader; + end else begin + ServInvHeader.Get(ServInvoiceNo); + RecVar := ServInvHeader; + end; + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Sales Document", RecVar); end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post Prepayments", 'OnAfterPostPrepayments', '', true, true)] @@ -316,7 +497,10 @@ codeunit 5579 "Digital Voucher Impl." begin if not DigitalVoucherFeature.IsFeatureEnabled() then exit; - HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Sales Document", SalesInvoiceHeader); + if SalesInvoiceHeader."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Sales Document", SalesInvoiceHeader); + if SalesCrMemoHeader."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Sales Document", SalesCrMemoHeader); end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch.-Post", 'OnAfterFinalizePostingOnBeforeCommit', '', true, true)] @@ -328,7 +512,10 @@ codeunit 5579 "Digital Voucher Impl." exit; if not PurchHeader.Invoice then exit; - HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Purchase Document", PurchInvHeader); + if PurchInvHeader."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Purchase Document", PurchInvHeader); + if PurchCrMemoHdr."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Purchase Document", PurchCrMemoHdr); end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purchase-Post Prepayments", 'OnAfterPostPrepayments', '', true, true)] @@ -336,7 +523,10 @@ codeunit 5579 "Digital Voucher Impl." begin if not DigitalVoucherFeature.IsFeatureEnabled() then exit; - HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Purchase Document", PurchInvHeader); + if PurchInvHeader."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Purchase Document", PurchInvHeader); + if PurchCrMemoHdr."No." <> '' then + HandleDigitalVoucherForPostedDocument("Digital Voucher Entry Type"::"Purchase Document", PurchCrMemoHdr); end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"Gen. Jnl.-Post Batch", 'OnProcessLinesOnAfterPostGenJnlLines', '', true, true)] @@ -412,9 +602,10 @@ codeunit 5579 "Digital Voucher Impl." end; [EventSubscriber(ObjectType::Table, Database::"Digital Voucher Setup", 'OnBeforeModifyEvent', '', false, false)] - local procedure CheckIfChangeIsAllowedOnModifyDigitalVoucherSetup(var Rec: Record "Digital Voucher Setup"; var xRec: Record "Digital Voucher Setup"; RunTrigger: Boolean) + local procedure CheckIfChangeIsAllowedOnModifyDigitalVoucherSetup(var Rec: Record "Digital Voucher Setup") begin - DigitalVoucherFeature.CheckIfDigitalVoucherSetupChangeIsAllowed(); + if not Rec.Enabled then + DigitalVoucherFeature.CheckIfDigitalVoucherSetupChangeIsAllowed(); end; [EventSubscriber(ObjectType::Table, Database::"Email Item", 'OnAttachIncomingDocumentsOnAfterSetFilter', '', false, false)] @@ -429,8 +620,27 @@ codeunit 5579 "Digital Voucher Impl." DigitalVoucherFeature.CheckIfDigitalVoucherSetupChangeIsAllowed(); end; + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Correct Posted Purch. Invoice", 'OnAfterCreateCopyDocument', '', false, false)] + local procedure CopyDigitalVoucherOnAfterCreateCopyPurchDocument(var PurchaseHeader: Record "Purchase Header"; PurchInvHeader: Record "Purch. Inv. Header") + begin + PurchaseHeader."Incoming Document Entry No." := + CopyDigitalVoucherToCorrectiveDocument("Digital Voucher Entry Type"::"Purchase Document", PurchInvHeader, PurchaseHeader."No.", PurchaseHeader."Posting Date"); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Correct Posted Sales Invoice", 'OnAfterCreateCorrectiveSalesCrMemo', '', false, false)] + local procedure CopyDigitalVoucherOnAfterCreateCorrectiveSalesCrMemo(SalesInvoiceHeader: Record "Sales Invoice Header"; var SalesHeader: Record "Sales Header") + begin + SalesHeader."Incoming Document Entry No." := + CopyDigitalVoucherToCorrectiveDocument("Digital Voucher Entry Type"::"Sales Document", SalesInvoiceHeader, SalesHeader."No.", SalesHeader."Posting Date"); + end; + [IntegrationEvent(false, false)] local procedure OnGenerateDigitalVoucherForDocumentOnCaseElse(RecRef: RecordRef) begin end; + + [InternalEvent(false, false)] + internal procedure OnHandleDigitalVoucherEntrySetupWhenEnforced(EntryType: Enum "Digital Voucher Entry Type") + begin + end; } diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachOrNoteCheck.Codeunit.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachOrNoteCheck.Codeunit.al index 51d1b3db33..e0d18f03c0 100644 --- a/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachOrNoteCheck.Codeunit.al +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachOrNoteCheck.Codeunit.al @@ -28,7 +28,7 @@ codeunit 5581 "Voucher Attach Or Note Check" implements "Digital Voucher Check" IncomingDocument: Record "Incoming Document"; VoucherAttached: Boolean; begin - DigitalVoucherEntrySetup.Get(DigitalVoucherEntryType); + DigitalVoucherImpl.GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntryType); VoucherAttached := DigitalVoucherImpl.GetIncomingDocumentRecordFromRecordRef(IncomingDocument, RecRef); if VoucherAttached and DigitalVoucherEntrySetup."Skip If Manually Added" then exit; diff --git a/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachmentCheck.Codeunit.al b/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachmentCheck.Codeunit.al index 7668aa33ac..83898a2745 100644 --- a/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachmentCheck.Codeunit.al +++ b/Apps/W1/EnforcedDigitalVouchers/app/src/Implementation/VoucherAttachmentCheck.Codeunit.al @@ -5,6 +5,7 @@ namespace Microsoft.EServices.EDocument; using System.Utilities; +using Microsoft.Service.Document; codeunit 5580 "Voucher Attachment Check" implements "Digital Voucher Check" { @@ -16,11 +17,13 @@ codeunit 5580 "Voucher Attachment Check" implements "Digital Voucher Check" procedure CheckVoucherIsAttachedToDocument(var ErrorMessageMgt: Codeunit "Error Message Management"; DigitalVoucherEntryType: Enum "Digital Voucher Entry Type"; RecRef: RecordRef) begin - if not DigitalVoucherImpl.CheckDigitalVoucherForDocument(DigitalVoucherEntryType, RecRef) then - if DigitalVoucherEntryType in [DigitalVoucherEntryType::"General Journal", DigitalVoucherEntryType::"Purchase Journal", DigitalVoucherEntryType::"Sales Journal"] then - error(NotPossibleToPostWithoutVoucherErr) - else - ErrorMessageMgt.LogSimpleErrorMessage(NotPossibleToPostWithoutVoucherErr); + if DigitalVoucherImpl.CheckDigitalVoucherForDocument(DigitalVoucherEntryType, RecRef) then + exit; + if (DigitalVoucherEntryType in [DigitalVoucherEntryType::"General Journal", DigitalVoucherEntryType::"Purchase Journal", DigitalVoucherEntryType::"Sales Journal"]) or + (RecRef.Number() = Database::"Service Header") + then + error(NotPossibleToPostWithoutVoucherErr); + ErrorMessageMgt.LogSimpleErrorMessage(NotPossibleToPostWithoutVoucherErr); end; procedure GenerateDigitalVoucherForPostedDocument(DigitalVoucherEntryType: Enum "Digital Voucher Entry Type"; RecRef: RecordRef) @@ -29,7 +32,7 @@ codeunit 5580 "Voucher Attachment Check" implements "Digital Voucher Check" IncomingDocument: Record "Incoming Document"; VoucherAttached: Boolean; begin - DigitalVoucherEntrySetup.Get(DigitalVoucherEntryType); + DigitalVoucherImpl.GetDigitalVoucherEntrySetup(DigitalVoucherEntrySetup, DigitalVoucherEntryType); VoucherAttached := DigitalVoucherImpl.GetIncomingDocumentRecordFromRecordRef(IncomingDocument, RecRef); if VoucherAttached and DigitalVoucherEntrySetup."Skip If Manually Added" then exit; diff --git a/Apps/W1/EnforcedDigitalVouchers/test/src/DigitalVouchersTests.Codeunit.al b/Apps/W1/EnforcedDigitalVouchers/test/src/DigitalVouchersTests.Codeunit.al index a3d1f90f3e..0d4be7f312 100644 --- a/Apps/W1/EnforcedDigitalVouchers/test/src/DigitalVouchersTests.Codeunit.al +++ b/Apps/W1/EnforcedDigitalVouchers/test/src/DigitalVouchersTests.Codeunit.al @@ -17,6 +17,8 @@ codeunit 139515 "Digital Vouchers Tests" Assert: Codeunit Assert; LibraryWorkflow: Codeunit "Library - Workflow"; ActiveDirectoryMockEvents: Codeunit "Active Directory Mock Events"; + LibrarySmallBusiness: Codeunit "Library - Small Business"; + LibraryService: Codeunit "Library - Service"; IsInitialized: Boolean; NotPossibleToPostWithoutVoucherErr: Label 'Not possible to post without attaching the digital voucher.'; DialogErrorCodeTok: Label 'Dialog', Locked = true; @@ -24,6 +26,8 @@ codeunit 139515 "Digital Vouchers Tests" DetachQst: Label 'Do you want to remove the reference from this incoming document to posted document'; RemovePostedRecordManuallyMsg: Label 'The reference to the posted record has been removed.\\Remember to correct the posted record if needed.'; DoYouWantToPostQst: Label 'Do you want to post the journal lines?'; + PaymentLineAppliedMsg: Label '%1 payment lines out of 1 are applied.\\', Comment = '%1 - number'; + DoYouWantTPostPmtQst: Label 'Do you want to post the payments?'; trigger OnRun() begin @@ -45,7 +49,7 @@ codeunit 139515 "Digital Vouchers Tests" // [GIVEN] Digital voucher entry setup for purchase document is "Attachment" InitSetupCheckOnly("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); // [WHEN] Post purchase document - DocNo := ReceiveAndInvoicePurchaseDocument(); + DocNo := ReceiveAndInvoicePurchaseInvoice(); // [THEN] The document is posted without the digital voucher AssertVendorLedgerEntryExists(DocNo); UnbindSubscription(DigVouchersDisableEnforce); @@ -66,7 +70,7 @@ codeunit 139515 "Digital Vouchers Tests" // [GIVEN] Digital voucher entry setup for purchase document is "No Check" InitSetupCheckOnly("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::"No Check"); // [WHEN] Post purchase document - DocNo := ReceiveAndInvoicePurchaseDocument(); + DocNo := ReceiveAndInvoicePurchaseInvoice(); // [THEN] The document is posted without the digital voucher AssertVendorLedgerEntryExists(DocNo); UnbindSubscription(DigVouchersDisableEnforce); @@ -86,7 +90,7 @@ codeunit 139515 "Digital Vouchers Tests" // [GIVEN] Digital Voucher Entry Setup for Purchase Document is "Attachment" InitSetupCheckOnly("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); // [WHEN] Post purchase document - asserterror ReceiveAndInvoicePurchaseDocument(); + asserterror ReceiveAndInvoicePurchaseInvoice(); // [THEN] Error "Not possible to post without the voucher" is shown Assert.ExpectedErrorCode(DialogErrorCodeTok); Assert.ExpectedError(NotPossibleToPostWithoutVoucherErr); @@ -109,7 +113,7 @@ codeunit 139515 "Digital Vouchers Tests" InitSetupCheckOnly("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); // [GIVEN] Purchase invoice and Incoming document with attachment is created for the purchase document // [WHEN] Post the purchase document - DocNo := ReceiveAndInvoicePurchaseDocumentWithIncDoc(); + DocNo := ReceiveAndInvoicePurchaseInvoiceWithIncDoc(); // [THEN] The document is posted with the digital voucher AssertVendorLedgerEntryExists(DocNo); UnbindSubscription(DigVouchersDisableEnforce); @@ -133,7 +137,7 @@ codeunit 139515 "Digital Vouchers Tests" // [GIVEN] Digital voucher entry setup for purchase document is "Attachment", "Generate Automatically" is enabled InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); // [WHEN] Post purchase document - DocNo := ReceiveAndInvoicePurchaseDocument(PurchHeader); + DocNo := ReceiveAndInvoicePurchaseInvoice(PurchHeader); // [THEN] Incoming document with attachment is connected to the posted purchase document VerifyIncomingDocumentWithAttachmentsExists(PurchHeader."Posting Date", DocNo, 1); NotificationLifecycleMgt.RecallAllNotifications(); @@ -159,7 +163,7 @@ codeunit 139515 "Digital Vouchers Tests" InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); // [GIVEN] Purcnase invoice and Incoming document with attachment is created for the purchase document // [WHEN] Post purchase document - DocNo := ReceiveAndInvoicePurchaseDocumentWithIncDoc(PurchHeader); + DocNo := ReceiveAndInvoicePurchaseInvoiceWithIncDoc(PurchHeader); // [THEN] Incoming document with two attachments is connected to the posted purchase document VerifyIncomingDocumentWithAttachmentsExists(PurchHeader."Posting Date", DocNo, 2); NotificationLifecycleMgt.RecallAllNotifications(); @@ -185,7 +189,7 @@ codeunit 139515 "Digital Vouchers Tests" InitSetupGenerateAutomaticallySkipIfManuallyAdded("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); // [GIVEN] Purchase invoice and Incoming document with attachment is created for the purchase document // [WHEN] Post purchase document - DocNo := ReceiveAndInvoicePurchaseDocumentWithIncDoc(PurchHeader); + DocNo := ReceiveAndInvoicePurchaseInvoiceWithIncDoc(PurchHeader); // [THEN] Incoming document with one attachment is connected to the posted purchase document VerifyIncomingDocumentWithAttachmentsExists(PurchHeader."Posting Date", DocNo, 1); NotificationLifecycleMgt.RecallAllNotifications(); @@ -391,13 +395,13 @@ codeunit 139515 "Digital Vouchers Tests" GenJournalTemplate: Record "Gen. Journal Template"; GenJournalBatch: Record "Gen. Journal Batch"; IncomingDocument: Record "Incoming Document"; - DigVouchersEnableEnforce: Codeunit "Dig. Vouchers Enable Enforce"; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; i: Integer; begin // [SCENARIO 537486] Stan can post multiple general journals lines with different documents and digital voucher set to by automatically generated Initialize(); - BindSubscription(DigVouchersEnableEnforce); + BindSubscription(DigVouchersDisableEnforce); // [GIVEN] Digital voucher entry setup for general journal is "Attachment" and "Generate Automatically" option is enabled InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"General Journal", "Digital Voucher Check Type"::Attachment); // [GIVEN] General journal lines with the same template and batch are created @@ -410,7 +414,7 @@ codeunit 139515 "Digital Vouchers Tests" for i := 1 to ArrayLen(GenJournalLine) do LibraryJournals.CreateGenJournalLine( GenJournalLine[i], GenJournalTemplate.Name, GenJournalBatch.Name, - GenJournalLine[i]."Document Type"::" ", GenJournalLine[i]."Account Type"::"G/L Account", + GenJournalLine[i]."Document Type"::Invoice, GenJournalLine[i]."Account Type"::"G/L Account", LibraryERM.CreateGLAccountNo(), GenJournalLine[i]."Bal. Account Type"::"G/L Account", LibraryERM.CreateGLAccountNo(), LibraryRandom.RandDec(100, 2)); GenJournalLineToPost.SetRange("Journal Template Name", GenJournalTemplate.Name); @@ -425,16 +429,337 @@ codeunit 139515 "Digital Vouchers Tests" IncomingDocument.FindByDocumentNoAndPostingDate( IncomingDocument, GenJournalLine[i]."Document No.", Format(GenJournalLine[i]."Posting Date")), 'Digital voucher has not been generated'); - UnbindSubscription(DigVouchersEnableEnforce); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure PurchInvVoucherFeatureEnabledAttachmentCorrect() + var + PurchInvHeader: Record "Purch. Inv. Header"; + PurchCrMemoHdr: Record "Purch. Cr. Memo Hdr."; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + CorrectPostedPurchInvoice: Codeunit "Correct Posted Purch. Invoice"; + begin + // [FEATURE] [Purchase] + // [SCENARIO 538880] Stan can post a corrective purchase credit memo the digital voucher feature is enabled with the attachment check + + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionPurchaseInvoice(); + // [GIVEN] Digital voucher entry setup for purchase document is "Attachment", "Generate Automatically" is not enabled + InitSetupCheckOnly("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); + // [GIVEN] Posted purchase invoice and Incoming document with attachment + PurchInvHeader.Get(ReceiveAndInvoicePurchaseInvoiceWithIncDoc()); + // [WHEN] Correct the posted purchase invoice + CorrectPostedPurchInvoice.CancelPostedInvoice(PurchInvHeader); + // [THEN] Incoming document with attachment is connected to the posted corrective credit memo + LibrarySmallBusiness.FindPurchCorrectiveCrMemo(PurchCrMemoHdr, PurchInvHeader); + VerifyIncomingDocumentWithAttachmentsExists(PurchCrMemoHdr."Posting Date", PurchCrMemoHdr."No.", 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure SalesInvVoucherFeatureEnabledAttachmentCorrect() + var + SalesInvHeader: Record "Sales Invoice Header"; + SalesCrMemoHeader: Record "Sales Cr.Memo Header"; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + CorrectPostedSalesInvoice: Codeunit "Correct Posted Sales Invoice"; + begin + // [FEATURE] [Sales] + // [SCENARIO 538880] Stan can post a corrective sales credit memo the digital voucher feature is enabled with the attachment check + + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionSalesInvoice(); + // [GIVEN] Digital voucher entry setup for sales document is "Attachment", "Generate Automatically" is not enabled + InitSetupCheckOnly("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [GIVEN] Posted sales invoice and Incoming document with attachment + SalesInvHeader.Get(ShipAndInvoiceSalesDocumentWithIncDoc()); + // [WHEN] Correct the posted sales invoice + CorrectPostedSalesInvoice.CancelPostedInvoice(SalesInvHeader); + // [THEN] Incoming document with attachment is connected to the posted corrective credit memo + LibrarySmallBusiness.FindSalesCorrectiveCrMemo(SalesCrMemoHeader, SalesInvHeader); + VerifyIncomingDocumentWithAttachmentsExists(SalesCrMemoHeader."Posting Date", SalesCrMemoHeader."No.", 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure ServiceInvNoVoucherFeatureEnabledAttachment() + var + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + begin + // [FEATURE] [Service] + // [SCENARIO 475787] Stan cannot post a service invoice without a digital voucher when there is attachment check and the feature is enabled + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher functionality is enabled + EnableDigitalVoucherFeature(); + // [GIVEN] Digital Voucher Entry Setup for sales Document is "Attachment" + InitSetupCheckOnly("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [GIVEN] Service invoice without incoming document + // [WHEN] Post service document + asserterror PostServiceInvoice(); + // [THEN] Error "Not possible to post without the voucher" is shown + Assert.ExpectedErrorCode(DialogErrorCodeTok); + Assert.ExpectedError(NotPossibleToPostWithoutVoucherErr); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure ServInvVoucherFeatureEnabledAttachment() + var + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + DocNo: Code[20]; + begin + // [FEATURE] [Service] + // [SCENARIO 475787] Stan can post a service invoice with the manually attached digital voucher when there is attachment check and the feature is enabled + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + // [GIVEN] Digital voucher entry setup for sales document is "Attachment" + InitSetupCheckOnly("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [GIVEN] Service invoice with incoming document + // [WHEN] Post the service document + DocNo := PostServiceInvoiceWithIncDoc(); + // [THEN] The document is posted with the digital voucher + VerifyIncomingDocumentWithAttachmentsExists(WorkDate(), DocNo, 1); + + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure ServInvVoucherFeatureEnabledAttachmentAutogenerated() + var + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + DocNo: Code[20]; + begin + // [FEATURE] [Service] + // [SCENARIO 475787] Stan can post a service invoice with a digital voucher generated automatically when there is attachment check and the feature is enabled + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionServiceInvoice(); + // [GIVEN] Digital voucher entry setup for sales document is "Attachment", "Generate Automatically" is enabled + InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [GIVEN] Service invoice without incoming document + // [WHEN] Post the service document + DocNo := PostServiceInvoice(); + // [THEN] The document is posted with the digital voucher + VerifyIncomingDocumentWithAttachmentsExists(WorkDate(), DocNo, 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure ServCrMemoVoucherFeatureEnabledAttachmentAutogenerated() + var + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + DocNo: Code[20]; + begin + // [FEATURE] [Service] + // [SCENARIO 475787] Stan can post a service credit memo with a digital voucher generated automatically when there is attachment check and the feature is enabled + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionServiceCrMemo(); + // [GIVEN] Digital voucher entry setup for sales document is "Attachment", "Generate Automatically" is enabled + InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [GIVEN] Service credit memo without incoming document + // [WHEN] Post the service credit memo + DocNo := PostServiceCrMemo(); + // [THEN] The document is posted with the digital voucher + VerifyIncomingDocumentWithAttachmentsExists(WorkDate(), DocNo, 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + [HandlerFunctions('MessageHandler,ConfirmHandler')] + procedure PaymentReconciliationDoesNotRequireDigitalVoucher() + var + BankAccReconciliation: Record "Bank Acc. Reconciliation"; + VendLedgEntry: Record "Vendor Ledger Entry"; + PostedPmtReconHdr: Record "Posted Payment Recon. Hdr"; + BankAccReconPostYesNo: Codeunit "Bank Acc. Recon. Post (Yes/No)"; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + BankAccountNo: Code[20]; + begin + // [SCENARIO 539186] Stan can post a payment reconciliation without a digital voucher + + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled for purchase document and purchase journal + EnableDigitalVoucherFeature(); + InitSetupCheckOnly("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); + InitSetupCheckOnly("Digital Voucher Entry Type"::"Purchase Journal", "Digital Voucher Check Type"::Attachment); + + // [GIVEN] Payment account reconciliation with the purchase invoice + BankAccountNo := CreateBankAccForPaymentReconciliation(); + LibraryERM.FindVendorLedgerEntry( + VendLedgEntry, VendLedgEntry."Document Type"::Invoice, ReceiveAndInvoicePurchaseInvoiceWithIncDoc()); + CreatePmtReconForVendor(BankAccReconciliation, VendLedgEntry, BankAccountNo); + LibraryVariableStorage.Enqueue(StrSubstNo(PaymentLineAppliedMsg, 1)); + LibraryVariableStorage.Enqueue(DoYouWantTPostPmtQst); + LibraryVariableStorage.Enqueue(true); + CODEUNIT.Run(CODEUNIT::"Match Bank Pmt. Appl.", BankAccReconciliation); + + // [WHEN] Post payment account reconciliation + Assert.IsTrue(BankAccReconPostYesNo.BankAccReconPostYesNo(BankAccReconciliation), 'Not all payments posted.'); + + // [THEN] Payment Acc. Reconciliation has been posted + PostedPmtReconHdr.Get(BankAccReconciliation."Bank Account No.", BankAccReconciliation."Statement No."); + + LibraryVariableStorage.AssertEmpty(); + + UnbindSubscription(DigVouchersDisableEnforce); + NotificationLifecycleMgt.RecallAllNotifications(); + end; + + [Test] + procedure SalesCrMemoVoucherFeatureEnabledGenerateAutomatically() + var + SalesCrMemoHeader: Record "Sales Cr.Memo Header"; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + begin + // [FEATURE] [Sales] + // [SCENARIO 539494] Stan can post a sales credit memo with the digital voucher automatically generated + + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionSalesCrMemo(); + // [GIVEN] Digital voucher entry setup for sales document is "Attachment", "Generate Automatically" is not enabled + InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [When] Post sales credit memo + SalesCrMemoHeader.Get(ReceiveAndInvoiceSalesCrMemo()); + // [THEN] Incoming document with attachment is connected to the posted sales credit memo + VerifyIncomingDocumentWithAttachmentsExists(SalesCrMemoHeader."Posting Date", SalesCrMemoHeader."No.", 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure PurchCrMemoVoucherFeatureEnabledGenerateAutomatically() + var + PurchCrMemoHdr: Record "Purch. Cr. Memo Hdr."; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + begin + // [FEATURE] [Purchase] + // [SCENARIO 539494] Stan can post a purchase credit memo with the digital voucher automatically generated + + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionPurchaseCrMemo(); + // [GIVEN] Digital voucher entry setup for purchase document is "Attachment", "Generate Automatically" is not enabled + InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Purchase Document", "Digital Voucher Check Type"::Attachment); + // [When] Post purchase credit memo + PurchCrMemoHdr.Get(ShipAndInvoicePurchaseCrMemo()); + // [THEN] Incoming document with attachment is connected to the posted purchase credit memo + VerifyIncomingDocumentWithAttachmentsExists(PurchCrMemoHdr."Posting Date", PurchCrMemoHdr."No.", 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure PrepmtSalesInvVoucherFeatureEnabledGenerateAutomatically() + var + SalesInvHeader: Record "Sales Invoice Header"; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + begin + // [FEATURE] [Sales] + // [SCENARIO 539494] Stan can post a prepayment sales invoice with the digital voucher automatically generated + + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionSalesInvoice(); + // [GIVEN] Digital voucher entry setup for sales document is "Attachment", "Generate Automatically" is not enabled + InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [WHEN] Post prepayment sales invoice + SalesInvHeader.Get(PostSalesPrepmtInv()); + // [THEN] Incoming document with attachment is connected to the posted prepayment sales invoice + VerifyIncomingDocumentWithAttachmentsExists(SalesInvHeader."Posting Date", SalesInvHeader."No.", 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); + end; + + [Test] + procedure PrepmtSalesCrMemoVoucherFeatureEnabledGenerateAutomatically() + var + SalesHeader: Record "Sales Header"; + DigVouchersDisableEnforce: Codeunit "Dig. Vouchers Disable Enforce"; + NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt."; + NoSeries: Codeunit "No. Series"; + DocumentNo: Code[20]; + begin + // [FEATURE] [Sales] + // [SCENARIO 539494] Stan can post a prepayment sales credit memo with the digital voucher automatically generated + + Initialize(); + BindSubscription(DigVouchersDisableEnforce); + // [GIVEN] Digital voucher feature is enabled + EnableDigitalVoucherFeature(); + InitializeReportSelectionSalesInvoice(); + // [GIVEN] Digital voucher entry setup for sales document is "Attachment", "Generate Automatically" is not enabled + InitSetupGenerateAutomatically("Digital Voucher Entry Type"::"Sales Document", "Digital Voucher Check Type"::Attachment); + // [GIVEN] Posted prepayment sales invoice + CreateSalesPrepmtInv(SalesHeader); + LibrarySales.PostSalesPrepaymentInvoice(SalesHeader); + DocumentNo := NoSeries.PeekNextNo(SalesHeader."Prepmt. Cr. Memo No. Series"); + // [WHEN] Post prepayment sales credit memo + LibrarySales.PostSalesPrepaymentCrMemo(SalesHeader); + // [THEN] Incoming document with attachment is connected to the posted prepayment sales credit memo + VerifyIncomingDocumentWithAttachmentsExists(SalesHeader."Posting Date", DocumentNo, 1); + + NotificationLifecycleMgt.RecallAllNotifications(); + UnbindSubscription(DigVouchersDisableEnforce); end; local procedure Initialize() + var + CompanyInformation: Record "Company Information"; + LibraryERMCountryData: Codeunit "Library - ERM Country Data"; begin + CompanyInformation.Get(); + CompanyInformation.Validate("Allow Blank Payment Info.", true); + CompanyInformation.Modify(true); LibraryTestInitialize.OnTestInitialize(Codeunit::"Digital Vouchers Tests"); if IsInitialized then exit; LibraryTestInitialize.OnBeforeTestSuiteInitialize(Codeunit::"Digital Vouchers Tests"); + LibraryERMCountryData.UpdateSalesReceivablesSetup(); + LibraryERMCountryData.UpdatePurchasesPayablesSetup(); + LibraryERMCountryData.UpdateJournalTemplMandatory(false); IsInitialized := true; Commit(); LibraryTestInitialize.OnAfterTestSuiteInitialize(CODEUNIT::"Digital Vouchers Tests"); @@ -488,18 +813,86 @@ codeunit 139515 "Digital Vouchers Tests" end; local procedure InitializeReportSelectionPurchaseInvoice() + begin + InitializeReportSelection("Report Selection Usage"::"P.Invoice", Report::"Purchase - Invoice"); + end; + + local procedure InitializeReportSelectionPurchaseCrMemo() + begin + InitializeReportSelection("Report Selection Usage"::"P.Cr.Memo", Report::"Purchase - Credit Memo"); + end; + + local procedure InitializeReportSelectionServiceInvoice() + begin + InitializeReportSelection("Report Selection Usage"::"SM.Invoice", Report::"Service - Invoice"); + end; + + local procedure InitializeReportSelectionServiceCrMemo() + begin + InitializeReportSelection("Report Selection Usage"::"SM.Credit Memo", Report::"Service - Credit Memo"); + end; + + local procedure InitializeReportSelection(RepSelectionUsage: Enum "Report Selection Usage"; ReportId: Integer) + var + ReportSelections: Record "Report Selections"; + begin + ReportSelections.SetRange("Usage", RepSelectionUsage); + ReportSelections.DeleteAll(); + ReportSelections.Usage := RepSelectionUsage; + ReportSelections."Report ID" := ReportId; + ReportSelections.Insert(); + end; + + local procedure InitializeReportSelectionSalesInvoice() var ReportSelections: Record "Report Selections"; Usage: Enum "Report Selection Usage"; begin - Usage := "Report Selection Usage"::"P.Invoice"; + Usage := "Report Selection Usage"::"S.Invoice"; ReportSelections.SetRange("Usage", Usage); ReportSelections.DeleteAll(); ReportSelections.Usage := Usage; - ReportSelections."Report ID" := Report::"Purchase - Invoice"; + ReportSelections."Report ID" := Report::"Standard Sales - Invoice"; ReportSelections.Insert(); end; + local procedure InitializeReportSelectionSalesCrMemo() + var + ReportSelections: Record "Report Selections"; + Usage: Enum "Report Selection Usage"; + begin + Usage := "Report Selection Usage"::"S.Cr.Memo"; + ReportSelections.SetRange("Usage", Usage); + ReportSelections.DeleteAll(); + ReportSelections.Usage := Usage; + ReportSelections."Report ID" := Report::"Standard Sales - Credit Memo"; + ReportSelections.Insert(); + end; + + local procedure CreateBankAccForPaymentReconciliation(): Code[20] + var + BankAccount: Record "Bank Account"; + begin + LibraryERM.CreateBankAccount(BankAccount); + BankAccount.Validate("Last Statement No.", Format(LibraryRandom.RandInt(10))); + BankAccount.Modify(true); + exit(BankAccount."No."); + end; + + local procedure CreatePmtReconForVendor(var BankAccReconciliation: Record "Bank Acc. Reconciliation"; VendLedgEntry: Record "Vendor Ledger Entry"; BankAccountNo: Code[20]) + var + BankAccReconciliationLine: Record "Bank Acc. Reconciliation Line"; + begin + VendLedgEntry.CalcFields("Remaining Amount"); + LibraryERM.CreateBankAccReconciliation( + BankAccReconciliation, BankAccountNo, BankAccReconciliation."Statement Type"::"Payment Application"); + CreateBankAccReconciliationLine( + BankAccReconciliation, BankAccReconciliationLine, BankAccReconciliationLine."Account Type"::Vendor, + VendLedgEntry."Vendor No.", VendLedgEntry."Remaining Amount", WorkDate()); + BankAccReconciliation.Validate("Post Payments Only", true); + BankAccReconciliationLine.Modify(true); + end; + local procedure MockIncomingDocument(PostingDate: Date; DocNo: Code[20]): Integer var IncomingDocument: Record "Incoming Document"; @@ -515,27 +908,35 @@ codeunit 139515 "Digital Vouchers Tests" exit(IncomingDocument."Entry No."); end; - local procedure ReceiveAndInvoicePurchaseDocument(): Code[20] + local procedure ReceiveAndInvoicePurchaseInvoice(): Code[20] var PurchaseHeader: Record "Purchase Header"; begin - exit(ReceiveAndInvoicePurchaseDocument(PurchaseHeader)); + exit(ReceiveAndInvoicePurchaseInvoice(PurchaseHeader)); end; - local procedure ReceiveAndInvoicePurchaseDocumentWithIncDoc(): Code[20] + local procedure ReceiveAndInvoicePurchaseInvoiceWithIncDoc(): Code[20] var PurchaseHeader: Record "Purchase Header"; begin - exit(ReceiveAndInvoicePurchaseDocumentWithIncDoc(PurchaseHeader)); + exit(ReceiveAndInvoicePurchaseInvoiceWithIncDoc(PurchaseHeader)); end; - local procedure ReceiveAndInvoicePurchaseDocument(var PurchaseHeader: Record "Purchase Header"): Code[20] + local procedure ReceiveAndInvoicePurchaseInvoice(var PurchaseHeader: Record "Purchase Header"): Code[20] begin LibraryPurchase.CreatePurchaseInvoice(PurchaseHeader); exit(LibraryPurchase.PostPurchaseDocument(PurchaseHeader, true, true)); end; - local procedure ReceiveAndInvoicePurchaseDocumentWithIncDoc(var PurchaseHeader: Record "Purchase Header"): Code[20] + local procedure ShipAndInvoicePurchaseCrMemo(): Code[20] + var + PurchaseHeader: Record "Purchase Header"; + begin + LibraryPurchase.CreatePurchaseCreditMemo(PurchaseHeader); + exit(LibraryPurchase.PostPurchaseDocument(PurchaseHeader, true, true)); + end; + + local procedure ReceiveAndInvoicePurchaseInvoiceWithIncDoc(var PurchaseHeader: Record "Purchase Header"): Code[20] begin LibraryPurchase.CreatePurchaseInvoice(PurchaseHeader); PurchaseHeader.Validate("Incoming Document Entry No.", MockIncomingDocument(PurchaseHeader."Posting Date", PurchaseHeader."No.")); @@ -543,6 +944,113 @@ codeunit 139515 "Digital Vouchers Tests" exit(LibraryPurchase.PostPurchaseDocument(PurchaseHeader, true, true)); end; + local procedure ReceiveAndInvoiceSalesCrMemo(): Code[20] + var + SalesHeader: Record "Sales Header"; + begin + LibrarySales.CreateSalesCreditMemo(SalesHeader); + exit(LibrarySales.PostSalesDocument(SalesHeader, true, true)); + end; + + local procedure ShipAndInvoiceSalesDocumentWithIncDoc(): Code[20] + var + SalesHeader: Record "Sales Header"; + begin + LibrarySales.CreateSalesInvoice(SalesHeader); + SalesHeader.Validate("Incoming Document Entry No.", MockIncomingDocument(SalesHeader."Posting Date", SalesHeader."No.")); + SalesHeader.Modify(true); + exit(LibrarySales.PostSalesDocument(SalesHeader, true, true)); + end; + + local procedure PostSalesPrepmtInv(): Code[20] + var + SalesHeader: Record "Sales Header"; + begin + CreateSalesPrepmtInv(SalesHeader); + exit(LibrarySales.PostSalesPrepaymentInvoice(SalesHeader)); + end; + + local procedure CreateSalesPrepmtInv(var SalesHeader: Record "Sales Header") + var + SalesLine: Record "Sales Line"; + GeneralPostingSetup: Record "General Posting Setup"; + begin + LibrarySales.CreateSalesHeader(SalesHeader, SalesHeader."Document Type"::Order, LibrarySales.CreateCustomerNo()); + SalesHeader.Validate("Prepayment %", LibraryRandom.RandInt(50)); + SalesHeader.Modify(true); + LibrarySales.CreateSalesLine( + SalesLine, SalesHeader, SalesLine.Type::"G/L Account", + LibraryERM.CreateGLAccountWithSalesSetup(), LibraryRandom.RandInt(5)); + SalesLine.Validate("Unit Price", LibraryRandom.RandDec(100, 1)); + SalesLine.Modify(true); + GeneralPostingSetup.Get(SalesLine."Gen. Bus. Posting Group", SalesLine."Gen. Prod. Posting Group"); + GeneralPostingSetup."Sales Prepayments Account" := LibraryERM.CreateGLAccountWithSalesSetup(); + GeneralPostingSetup.Modify(true); + end; + + local procedure PostServiceInvoice(): Code[20] + var + ServiceHeader: Record "Service Header"; + begin + CreateServiceDocument(ServiceHeader, ServiceHeader."Document Type"::Invoice, LibrarySales.CreateCustomerNo()); + exit(GetServInvNoAfterPosting(ServiceHeader)); + end; + + local procedure PostServiceInvoiceWithIncDoc(): Code[20] + var + ServiceHeader: Record "Service Header"; + begin + CreateServiceDocument(ServiceHeader, ServiceHeader."Document Type"::Invoice, LibrarySales.CreateCustomerNo()); + ServiceHeader.Validate("Incoming Document Entry No.", MockIncomingDocument(ServiceHeader."Posting Date", ServiceHeader."No.")); + ServiceHeader.Modify(true); + exit(GetServInvNoAfterPosting(ServiceHeader)); + end; + + local procedure GetServInvNoAfterPosting(var ServiceHeader: Record "Service Header"): Code[20] + var + ServInvHeader: Record "Service Invoice Header"; + begin + LibraryService.PostServiceOrder(ServiceHeader, true, false, true); + ServInvHeader.SetRange("Pre-Assigned No.", ServiceHeader."No."); + ServInvHeader.FindFirst(); + exit(ServInvHeader."No."); + end; + + local procedure PostServiceCrMemo(): Code[20] + var + ServiceHeader: Record "Service Header"; + begin + CreateServiceDocument(ServiceHeader, ServiceHeader."Document Type"::"Credit Memo", LibrarySales.CreateCustomerNo()); + exit(GetServCrMemoNoAfterPosting(ServiceHeader)); + end; + + local procedure GetServCrMemoNoAfterPosting(var ServiceHeader: Record "Service Header"): Code[20] + var + ServCrMemoHeader: Record "Service Cr.Memo Header"; + begin + LibraryService.PostServiceOrder(ServiceHeader, true, false, true); + ServCrMemoHeader.SetRange("Pre-Assigned No.", ServiceHeader."No."); + ServCrMemoHeader.FindFirst(); + exit(ServCrMemoHeader."No."); + end; + + local procedure CreateServiceDocument(var ServiceHeader: Record "Service Header"; DocType: Enum "Service Document Type"; CustNo: Code[20]) + var + ServiceLine: Record "Service Line"; + ServiceItem: Record "Service Item"; + ServiceItemLine: Record "Service Item Line"; + begin + LibraryService.CreateServiceHeader(ServiceHeader, DocType, CustNo); + ServiceHeader.Validate("Order Date", WorkDate()); + ServiceHeader.Modify(true); + LibraryService.CreateServiceItem(ServiceItem, ServiceHeader."Customer No."); + LibraryService.CreateServiceItemLine(ServiceItemLine, ServiceHeader, ServiceItem."No."); + LibraryService.CreateServiceLineWithQuantity( + ServiceLine, ServiceHeader, ServiceLine.Type::Item, LibraryInventory.CreateItemNo(), LibraryRandom.RandInt(10)); + ServiceLine.Validate("Unit Price", LibraryRandom.RandDecInRange(1000, 2000, 2)); + ServiceLine.Modify(true); + end; + local procedure AssertVendorLedgerEntryExists(DocNo: Code[20]) var VendorLedgerEntry: Record "Vendor Ledger Entry"; @@ -585,6 +1093,18 @@ codeunit 139515 "Digital Vouchers Tests" ActiveDirectoryMockEvents.Enable(); end; + local procedure CreateBankAccReconciliationLine(BankAccReconciliation: Record "Bank Acc. Reconciliation"; var BankAccReconciliationLine: Record "Bank Acc. Reconciliation Line"; AccountType: Enum "Gen. Journal Account Type"; AccountNo: Code[20]; Amount: Decimal; Date: Date) + begin + LibraryERM.CreateBankAccReconciliationLn(BankAccReconciliationLine, BankAccReconciliation); + BankAccReconciliationLine.Validate("Account Type", AccountType); + BankAccReconciliationLine.Validate("Account No.", AccountNo); + BankAccReconciliationLine.Validate("Document No.", LibraryUtility.GenerateGUID()); + BankAccReconciliationLine.Validate("Statement Amount", Amount); + BankAccReconciliationLine.Validate("Transaction Date", Date); + BankAccReconciliationLine.Validate(Description, AccountNo); + BankAccReconciliationLine.Modify(true); + end; + local procedure VerifyIncomingDocumentWithAttachmentsExists(PostingDate: Date; DocNo: Code[20]; AttachmentsCount: Integer) var IncomingDocument: Record "Incoming Document"; diff --git a/Apps/W1/ExcelReports/app/ReportLayouts/Excel/FixedAsset/FixedAssetAnalysisExcel.xlsx b/Apps/W1/ExcelReports/app/ReportLayouts/Excel/FixedAsset/FixedAssetAnalysisExcel.xlsx index 9ea27a44d011c51e0b3af123d0de8f86d9c45f57..1890373466c10d2b62005ce09d7a9068c9caa802 100644 GIT binary patch delta 38745 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 delta 37541 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� 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 diff --git a/Apps/W1/ExcelReports/app/ReportLayouts/Excel/FixedAsset/FixedAssetDetailsExcel.xlsx b/Apps/W1/ExcelReports/app/ReportLayouts/Excel/FixedAsset/FixedAssetDetailsExcel.xlsx index 337b6825778ed1295ec7856b0cebf5beabcd5700..a22397783102ddb5308962a739e64dc9130f8c8e 100644 GIT binary patch delta 22770 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 E2aHkT)&Kwi delta 20446 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 diff --git a/Apps/W1/ExcelReports/app/ReportLayouts/Excel/FixedAsset/FixedAssetProjectedValueExcel.xlsx b/Apps/W1/ExcelReports/app/ReportLayouts/Excel/FixedAsset/FixedAssetProjectedValueExcel.xlsx index 3088883453583d42af93dbc0c78b0d8230e37494..4d43ad7719425ecee47bf96c4459ba94d68b745a 100644 GIT binary patch delta 22848 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 QAb|fY;Af^y_@8_K1FiYPhyVZp delta 19837 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 Cq*QkR diff --git a/Apps/W1/ExcelReports/app/ReportLayouts/Excel/GeneralLedger/ConsolidatedTrialBalanceExcel.xlsx b/Apps/W1/ExcelReports/app/ReportLayouts/Excel/GeneralLedger/ConsolidatedTrialBalanceExcel.xlsx index 06f02c1c86cfc7aa3e761567884f26a1d89502f5..91103723d8c16df4329112f033efe8be657ddf8c 100644 GIT binary patch literal 492606 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

O3Ai7@iXSqlcfH@iboa*Z6iD8ujCa3#{JWziq&C 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 z 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 diff --git a/Apps/W1/ExcelReports/app/ReportLayouts/Excel/GeneralLedger/TrialBalanceExcel.xlsx b/Apps/W1/ExcelReports/app/ReportLayouts/Excel/GeneralLedger/TrialBalanceExcel.xlsx index 7353230c1eb6fb63a836c742d7044620701ea12b..895aa07d0db0934a7252f15eec28b864e076b8a6 100644 GIT binary patch literal 468103 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

MZbB-_#%s8Kat>L=8`kL9&sZhu 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 GfBPSzgCIEo delta 52342 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 KeP>ez^Zx+Q8eww) diff --git a/Apps/W1/ExcelReports/app/ReportLayouts/Excel/Purchase/AgedAccountsPayableExcel.xlsx b/Apps/W1/ExcelReports/app/ReportLayouts/Excel/Purchase/AgedAccountsPayableExcel.xlsx index 2276ff6b84f93ef0051cc1b5a859e8f4a6a165aa..73ed4e217f0427a023280ffc7cc075c1a0f6d0f2 100644 GIT binary patch delta 32823 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 Xo+f=!jvo<1?|_ev=-?UW{sR3U5#Q`J diff --git a/Apps/W1/ExcelReports/app/src/Customer/EXRCustomerTopList.Report.al b/Apps/W1/ExcelReports/app/src/Customer/EXRCustomerTopList.Report.al index b901080a78..514f5e847c 100644 --- a/Apps/W1/ExcelReports/app/src/Customer/EXRCustomerTopList.Report.al +++ b/Apps/W1/ExcelReports/app/src/Customer/EXRCustomerTopList.Report.al @@ -139,7 +139,7 @@ report 4409 "EXR Customer Top List" if EXTTopCustomerSale.Read() then repeat InsertAggregatedSales(EXTTopCustomerSale.Customer_No, EXTTopCustomerSale.Sum_Purch_LCY); - CustomerFilter += EXTTopCustomerSale.Customer_No + '|'; + CustomerFilter += EscapeCustomerNoFilter(EXTTopCustomerSale.Customer_No) + '|'; until (not EXTTopCustomerSale.Read()); exit(CustomerFilter.TrimEnd('|')); @@ -156,12 +156,17 @@ report 4409 "EXR Customer Top List" if EXTTopCustomerBalance.Read() then repeat InsertAggregatedSales(EXTTopCustomerBalance.Customer_No, EXTTopCustomerBalance.Balance_LCY); - CustomerFilter += EXTTopCustomerBalance.Customer_No + '|'; + CustomerFilter += EscapeCustomerNoFilter(EXTTopCustomerBalance.Customer_No) + '|'; until (not EXTTopCustomerBalance.Read()); exit(CustomerFilter.TrimEnd('|')); end; + local procedure EscapeCustomerNoFilter(CustomerNo: Code[20]): Text + begin + exit('''' + CustomerNo + ''''); + end; + local procedure ChangeShowType(NewShowType: Option) begin GlobalExtTopCustomerReportBuffer."Ranking Based On" := NewShowType; @@ -198,7 +203,7 @@ report 4409 "EXR Customer Top List" EXTTopCustomerBalance.Open(); if EXTTopCustomerBalance.Read() then repeat - TopCustomerData.SetFilter(TopCustomerData."Customer No.", EXTTopCustomerBalance.Customer_No); + TopCustomerData.SetFilter(TopCustomerData."Customer No.", EscapeCustomerNoFilter(EXTTopCustomerBalance.Customer_No)); if TopCustomerData.FindFirst() then begin TopCustomerData."Amount 2 (LCY)" := EXTTopCustomerBalance.Balance_LCY; if Customer.Get(TopCustomerData."Customer No.") then diff --git a/Apps/W1/ExcelReports/app/src/Financials/EXRConsolidatedTrialBalance.Report.al b/Apps/W1/ExcelReports/app/src/Financials/EXRConsolidatedTrialBalance.Report.al index afaef257ce..4f1137482b 100644 --- a/Apps/W1/ExcelReports/app/src/Financials/EXRConsolidatedTrialBalance.Report.al +++ b/Apps/W1/ExcelReports/app/src/Financials/EXRConsolidatedTrialBalance.Report.al @@ -1,8 +1,8 @@ namespace Microsoft.Finance.ExcelReports; using Microsoft.Finance.GeneralLedger.Account; -using Microsoft.Finance.Consolidation; using Microsoft.Finance.Dimension; +using Microsoft.Finance.Consolidation; report 4410 "EXR Consolidated Trial Balance" { @@ -17,9 +17,10 @@ report 4410 "EXR Consolidated Trial Balance" dataset { - dataitem(TrialBalanceData; "G/L Account") + dataitem(GLAccounts; "G/L Account") { DataItemTableView = sorting("No."); + RequestFilterFields = "No."; column(AccountNumber; "No.") { IncludeCaption = true; } column(AccountName; Name) { IncludeCaption = true; } column(IncomeBalance; "Income/Balance") { IncludeCaption = true; } @@ -28,52 +29,45 @@ report 4410 "EXR Consolidated Trial Balance" column(AccountType; "Account Type") { IncludeCaption = true; } column(Indentation; Indentation) { IncludeCaption = true; } column(IndentedAccountName; IndentedAccountName) { } - dataitem(EXRTrialBalanceBuffer; "EXR Trial Balance Buffer") - { - DataItemLink = "G/L Account No." = field("No."); - column(Dimension1Code; "Dimension 1 Code") { IncludeCaption = true; } - column(Dimension2Code; "Dimension 2 Code") { IncludeCaption = true; } - column(NetChange; "Net Change") { IncludeCaption = true; } - column(Balance; Balance) { IncludeCaption = true; } - column(NetChangeACY; "Net Change (ACY)") { IncludeCaption = true; } - column(BalanceACY; "Balance (ACY)") { IncludeCaption = true; } - column(BusinessUnitCode; "Business Unit Code") { IncludeCaption = true; } - } + trigger OnAfterGetRecord() - var - TrialBalance: Codeunit "Trial Balance"; begin - IndentedAccountName := PadStr('', TrialBalanceData.Indentation * 2, ' ') + TrialBalanceData.Name; - TrialBalance.InsertBreakdownForGLAccount(TrialBalanceData, Dimension1Values, Dimension2Values, BusinessUnitCodes, EXRTrialBalanceBuffer); + IndentedAccountName := PadStr('', GLAccounts.Indentation * 2, ' ') + GLAccounts.Name; end; + } + dataitem(Dimension1; "Dimension Value") + { + DataItemTableView = sorting("Code"); + UseTemporary = true; - trigger OnPreDataItem() - var - BusinessUnit: Record "Business Unit"; - DimensionValue: Record "Dimension Value"; - begin - if EndingDate = 0D then - Error(EnterAnEndingDateErr); - TrialBalanceData.SetRange("Date Filter", StartingDate, EndingDate); + column(Dim1Code; Dimension1."Code") { IncludeCaption = true; } + column(Dim1Name; Dimension1.Name) { IncludeCaption = true; } + } + dataitem(Dimension2; "Dimension Value") + { + DataItemTableView = sorting("Code"); + UseTemporary = true; - DimensionValue.SetRange("Global Dimension No.", 1); - if DimensionValue.FindSet() then - repeat - Dimension1Values.Add(DimensionValue.Code); - until DimensionValue.Next() = 0; - Dimension1Values.Add(''); - DimensionValue.SetRange("Global Dimension No.", 2); - if DimensionValue.FindSet() then - repeat - Dimension2Values.Add(DimensionValue.Code); - until DimensionValue.Next() = 0; - Dimension2Values.Add(''); - if BusinessUnit.FindSet() then - repeat - BusinessUnitCodes.Add(BusinessUnit.Code); - until BusinessUnit.Next() = 0; - BusinessUnitCodes.Add(''); - end; + column(Dim2Code; Dimension2."Code") { IncludeCaption = true; } + column(Dim2Name; Dimension2.Name) { IncludeCaption = true; } + } + dataitem(BusinessUnits; "Business Unit") + { + DataItemTableView = sorting("Code"); + column(Code; Code) { IncludeCaption = true; } + column(Name; Name) { IncludeCaption = true; } + } + dataitem(TrialBalanceData; "EXR Trial Balance Buffer") + { + RequestFilterFields = "Business Unit Code"; + column(Account; "G/L Account No.") { IncludeCaption = true; } + column(Dimension1Code; "Dimension 1 Code") { IncludeCaption = true; } + column(Dimension2Code; "Dimension 2 Code") { IncludeCaption = true; } + column(NetChange; "Net Change") { IncludeCaption = true; } + column(Balance; Balance) { IncludeCaption = true; } + column(NetChangeACY; "Net Change (ACY)") { IncludeCaption = true; } + column(BalanceACY; "Balance (ACY)") { IncludeCaption = true; } + column(BusinessUnitCode; "Business Unit Code") { IncludeCaption = true; } } } requestpage @@ -126,10 +120,20 @@ report 4410 "EXR Consolidated Trial Balance" ByBusinessUnitLCY = 'By Business Unit (LCY)', Comment = 'Worksheet name, shouldn''t exceed 31 characters'; ByBusinessUnitACY = 'By Business Unit (ACY)', Comment = 'Worksheet name, shouldn''t exceed 31 characters'; } + + trigger OnPreReport() + var + TrialBalance: Codeunit "Trial Balance"; + begin + if EndingDate = 0D then + Error(EnterAnEndingDateErr); + GLAccounts.SetRange("Date Filter", StartingDate, EndingDate); + + TrialBalance.ConfigureTrialBalance(true, true); + TrialBalance.InsertTrialBalanceReportData(GLAccounts, Dimension1, Dimension2, TrialBalanceData); + end; + var - Dimension1Values: List of [Code[20]]; - Dimension2Values: List of [Code[20]]; - BusinessUnitCodes: List of [Code[20]]; IndentedAccountName: Text; StartingDate, EndingDate : Date; EnterAnEndingDateErr: Label 'Please enter an ending date.'; diff --git a/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetAnalysisExcel.Report.al b/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetAnalysisExcel.Report.al index d741914eb9..4651977cbf 100644 --- a/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetAnalysisExcel.Report.al +++ b/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetAnalysisExcel.Report.al @@ -7,6 +7,7 @@ using Microsoft.FixedAssets.Posting; report 4412 "EXR Fixed Asset Analysis Excel" { ApplicationArea = All; + AdditionalSearchTerms = 'FA Analysis Excel,FA Analysis'; Caption = 'Fixed Asset Analysis Excel (Preview)'; DataAccessIntent = ReadOnly; DefaultRenderingLayout = FixedAssetAnalysisExcel; @@ -19,7 +20,7 @@ report 4412 "EXR Fixed Asset Analysis Excel" dataitem(FixedAssetData; "Fixed Asset") { DataItemTableView = sorting("No."); - PrintOnlyIfDetail = true; + RequestFilterFields = "No.", "FA Class Code", "FA Subclass Code"; column(AssetNumber; "No.") { IncludeCaption = true; } column(AssetDescription; Description) { IncludeCaption = true; } column(FixedAssetClassCode; "FA Class Code") { IncludeCaption = true; } @@ -28,6 +29,8 @@ report 4412 "EXR Fixed Asset Analysis Excel" column(BudgetedAsset; "Budgeted Asset") { IncludeCaption = true; } column(AcquisitionDateField; AcquisitionDate) { } column(DisposalDateField; DisposalDate) { } + column(GlobalDimension1Code; "Global Dimension 1 Code") { IncludeCaption = true; } + column(GlobalDimension2Code; "Global Dimension 2 Code") { IncludeCaption = true; } dataitem(FAPostingType; "FA Posting Type") { DataItemTableView = where("FA Entry" = const(true)); diff --git a/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetDetailsExcel.Report.al b/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetDetailsExcel.Report.al index 71906ed7d8..817b8e6376 100644 --- a/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetDetailsExcel.Report.al +++ b/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetDetailsExcel.Report.al @@ -7,6 +7,7 @@ using Microsoft.FixedAssets.Ledger; report 4411 "EXR Fixed Asset Details Excel" { ApplicationArea = All; + AdditionalSearchTerms = 'FA Details Excel,FA Details'; Caption = 'Fixed Asset Details Excel (Preview)'; DataAccessIntent = ReadOnly; DefaultRenderingLayout = FixedAssetDetailsExcel; @@ -28,6 +29,8 @@ report 4411 "EXR Fixed Asset Details Excel" column(FixedAssetSubclassCode; "FA Subclass Code") { IncludeCaption = true; } column(FixedAssetLocation; "FA Location Code") { IncludeCaption = true; } column(BudgetedAsset; "Budgeted Asset") { IncludeCaption = true; } + column(GlobalDimension1Code; "Global Dimension 1 Code") { IncludeCaption = true; } + column(GlobalDimension2Code; "Global Dimension 2 Code") { IncludeCaption = true; } dataitem(FixedAssetLedgerEntry; "FA Ledger Entry") { DataItemTableView = sorting("FA No.", "Depreciation Book Code", "FA Posting Date"); diff --git a/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetProjected.Report.al b/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetProjected.Report.al index 4d156fec0a..2a0057a3ff 100644 --- a/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetProjected.Report.al +++ b/Apps/W1/ExcelReports/app/src/Financials/EXRFixedAssetProjected.Report.al @@ -8,6 +8,7 @@ using Microsoft.FixedAssets.Ledger; report 4413 "EXR Fixed Asset Projected" { ApplicationArea = All; + AdditionalSearchTerms = 'FA Projected Value, FA Projected Value Excel'; Caption = 'Fixed Asset Projected Value Excel (Preview)'; DataAccessIntent = ReadOnly; DefaultRenderingLayout = FixedAssetProjectedValueExcel; @@ -20,12 +21,15 @@ report 4413 "EXR Fixed Asset Projected" dataitem(FixedAssetData; "Fixed Asset") { DataItemTableView = sorting("No."); + RequestFilterFields = "No.", "FA Class Code", "FA Subclass Code"; PrintOnlyIfDetail = true; column(AssetNumber; "No.") { IncludeCaption = true; } column(AssetDescription; Description) { IncludeCaption = true; } column(FixedAssetClassCode; "FA Class Code") { IncludeCaption = true; } column(FixedAssetSubclassCode; "FA Subclass Code") { IncludeCaption = true; } column(FixedAssetLocationCode; "FA Location Code") { IncludeCaption = true; } + column(GlobalDimension1Code; "Global Dimension 1 Code") { IncludeCaption = true; } + column(GlobalDimension2Code; "Global Dimension 2 Code") { IncludeCaption = true; } dataitem(FixedAssetLedgerEntries; "FA Ledger Entry") { DataItemLink = "FA No." = field("No."); @@ -55,8 +59,13 @@ report 4413 "EXR Fixed Asset Projected" } trigger OnAfterGetRecord() begin - if FixedAssetData.Inactive or FixedAssetData.Blocked then + Clear(GlobalFADepreciationBook); + GlobalFADepreciationBook.SetAutoCalcFields("Book Value", "Custom 1"); + if not GlobalFADepreciationBook.Get(FixedAssetData."No.", GlobalDepreciationBook.Code) then; + + if ShouldFixedAssetBeSkipped(FixedAssetData) then CurrReport.Skip(); + InsertPostedAndProjectedEntries(FixedAssetData."No.", FixedAssetLedgerEntries); FirstFixedAssetLedgerEntry := true; end; @@ -82,23 +91,23 @@ report 4413 "EXR Fixed Asset Projected" ToolTip = 'Specifies the code for the depreciation book to be included in the report or batch job.'; ShowMandatory = true; } - field(FirstDepreciationDateField; FirstDepreciationDate) + field(FirstDepreciationDateField; StartDateProjection) { ApplicationArea = All; Caption = 'First Depreciation Date'; ToolTip = 'Specifies the date to be used as the first date in the period for which you want to calculate projected depreciation.'; ShowMandatory = true; } - field(SecondDepreciationDateField; SecondDepreciationDate) + field(SecondDepreciationDateField; EndDateProjection) { ApplicationArea = All; - Caption = 'Second Depreciation Date'; + Caption = 'Last Depreciation Date'; ToolTip = 'Specifies the Fixed Asset posting date of the last posted depreciation.'; ShowMandatory = true; } - field(PeriodLengthField; PeriodLength) + field(PeriodLengthField; GlobalPeriodLength) { - ApplicationArea = FixedAssets; + ApplicationArea = All; BlankZero = true; Caption = 'Number of Days'; MinValue = 0; @@ -106,11 +115,11 @@ report 4413 "EXR Fixed Asset Projected" trigger OnValidate() begin - if PeriodLength > 0 then - UseAccountingPeriod := false; + if GlobalPeriodLength > 0 then + GlobalUseAccountingPeriod := false; end; } - field(DaysInFirstPeriodField; DaysInFirstPeriod) + field(DaysInFirstPeriodField; GlobalDaysInFirstPeriod) { ApplicationArea = All; BlankZero = true; @@ -124,17 +133,23 @@ report 4413 "EXR Fixed Asset Projected" Caption = 'Posted Entries From'; ToolTip = 'Specifies the fixed asset posting date from which the report includes all types of posted entries.'; } - field(ProjectedDisposalField; ProjectedDisposal) + field(ProjectedDisposalField; GlobalProjectDisposal) { ApplicationArea = All; Caption = 'Projected Disposal'; ToolTip = 'Specifies if you want the report to include projected disposals: the contents of the Projected Proceeds on Disposal field and the Projected Disposal Date field on the FA depreciation book.'; } - field(UseAccountingPeriodField; UseAccountingPeriod) + field(UseAccountingPeriodField; GlobalUseAccountingPeriod) { - ApplicationArea = FixedAssets; + ApplicationArea = All; Caption = 'Use Accounting Period'; ToolTip = 'Specifies if you want the periods between the starting date and the ending date to correspond to the accounting periods you have specified in the Accounting Period table. When you select this field, the Number of Days field is cleared.'; + + trigger OnValidate() + begin + if GlobalUseAccountingPeriod then + GlobalPeriodLength := 0; + end; } } } @@ -158,125 +173,345 @@ report 4413 "EXR Fixed Asset Projected" BookValueCaption = 'Book Value'; ProjectedEntryCaption = 'Projected entry'; } + trigger OnPreReport() + begin + GlobalDepreciationBook.Get(SelectedDepreciationBookCode); + if (StartDateProjection = 0D) or (EndDateProjection = 0D) then + Error(SpecifyStartingAndEndingDatesErr); + if StartDateProjection > EndDateProjection then + Error(SpecifyStartingAndEndingDatesErr); + end; + + var + GlobalDepreciationBook: Record "Depreciation Book"; + GlobalFADepreciationBook: Record "FA Depreciation Book"; + CalculateDepreciation: Codeunit "Calculate Depreciation"; + DepreciationCalculation: Codeunit "Depreciation Calculation"; + FADateCalculation: Codeunit "FA Date Calculation"; + CalculateDisposal: Codeunit "Calculate Disposal"; + TableDeprCalculation: Codeunit "Table Depr. Calculation"; + ProjectionTok: Label 'PROJECTED', Locked = true; + SelectedDepreciationBookCode: Code[10]; + StartDateProjection, EndDateProjection : Date; + BookValue: Decimal; + GlobalPeriodLength: Integer; + GlobalDaysInFirstPeriod: Integer; + IncludePostedFrom: Date; + GlobalProjectDisposal: Boolean; + GlobalUseAccountingPeriod: Boolean; + ProjectedEntry: Boolean; + FirstFixedAssetLedgerEntry: Boolean; + ConfigureAccountingPeriodsErr: Label 'There is no accounting period configured after %1. These accounting periods are required when using a fiscal year of 365 days and the setting ''Use Accounting Periods'' is enabled.', Comment = '%1 is a date'; + SpecifyStartingAndEndingDatesErr: Label 'Please specify valid starting and ending dates.'; + PeriodLengthErr: Label 'The period length must be greater than %1 and at most %2.', Comment = '%1, %2 - number of days'; + + local procedure ShouldFixedAssetBeSkipped(FixedAsset: Record "Fixed Asset"): Boolean + begin + if GlobalDepreciationBook.Code = '' then + exit(true); + if FixedAsset.Inactive then + exit(true); + if (GlobalFADepreciationBook."Acquisition Date" = 0D) or (GlobalFADepreciationBook."Acquisition Date" > EndDateProjection) then + exit(true); + if GlobalFADepreciationBook."Last Depreciation Date" > EndDateProjection then + exit(true); + exit(GlobalFADepreciationBook."Disposal Date" > 0D); + end; local procedure InsertPostedAndProjectedEntries(FixedAssetNo: Code[20]; var TempFixedAssetLedgerEntry: Record "FA Ledger Entry" temporary) var - TempProjectedDepreciationDates: Record "Accounting Period" temporary; + ProjectionsStart, ProjectionsEnd : Date; + DaysInFiscalYear, PeriodLength : Integer; + BiggestPostedEntryNo: Integer; + ProjectDisposal: Boolean; begin - TempFixedAssetLedgerEntry.DeleteAll(); - InsertPostedEntries(FixedAssetNo, IncludePostedFrom, SelectedDepreciationBookCode, TempFixedAssetLedgerEntry); - TempProjectedDepreciationDates."Starting Date" := FirstDepreciationDate; - TempProjectedDepreciationDates.Insert(); + DaysInFiscalYear := GetDaysInFiscalYear(GlobalDepreciationBook); + if GlobalPeriodLength = 0 then + PeriodLength := DaysInFiscalYear + else + PeriodLength := GlobalPeriodLength; + if not IsPeriodLengthWithinLimits(PeriodLength, GlobalDepreciationBook) then + Error(PeriodLengthErr, MinPeriodLength(), GetDaysInFiscalYear(GlobalDepreciationBook)); - if UseAccountingPeriod then - InsertDatesForAccountingPeriods(TempProjectedDepreciationDates, FirstDepreciationDate, SecondDepreciationDate); + ProjectDisposal := ShouldProjectDisposal(GlobalProjectDisposal, EndDateProjection, GlobalFADepreciationBook); + ProjectionsStart := StartDateProjection; + ProjectionsEnd := EndDateProjection; + if ProjectDisposal then + ProjectionsEnd := GlobalFADepreciationBook."Projected Disposal Date"; + if ProjectionsStart > ProjectionsEnd then + ProjectionsStart := ProjectionsEnd; + + TempFixedAssetLedgerEntry.DeleteAll(); + BiggestPostedEntryNo := InsertPostedEntries(FixedAssetNo, IncludePostedFrom, SelectedDepreciationBookCode, TempFixedAssetLedgerEntry); + TempFixedAssetLedgerEntry."Entry No." := BiggestPostedEntryNo; + InsertProjectedEntries(ProjectionsStart, ProjectionsEnd, GlobalDaysInFirstPeriod, PeriodLength, GlobalUseAccountingPeriod, ProjectDisposal, GlobalDepreciationBook, GlobalFADepreciationBook, TempFixedAssetLedgerEntry); + end; - TempProjectedDepreciationDates."Starting Date" := SecondDepreciationDate; - TempProjectedDepreciationDates.Insert(); + local procedure ShouldProjectDisposal(ProjectDisposalSetting: Boolean; EndProjectionsDate: Date; FADepreciationBook: Record "FA Depreciation Book"): Boolean + begin + if not ProjectDisposalSetting then + exit(false); + if FADepreciationBook."Projected Disposal Date" = 0D then + exit(false); + exit(FADepreciationBook."Projected Disposal Date" <= EndProjectionsDate); + end; - InsertProjectedEntries(FixedAssetNo, SelectedDepreciationBookCode, TempProjectedDepreciationDates, TempFixedAssetLedgerEntry); + local procedure CalculatedDepreciationIsZero(LastDepreciationAmount: Decimal; LastCustom1Amount: Decimal): Boolean + begin + exit((LastDepreciationAmount = 0) and (LastCustom1Amount = 0)); end; - local procedure InsertProjectedEntries(FixedAssetNo: Code[20]; DepreciationBookCode: Code[10]; var TempProjectedDepreciationDates: Record "Accounting Period" temporary; var TempFixedAssetLedgerEntry: Record "FA Ledger Entry" temporary) + local procedure InsertProjectedEntries(ProjectionsStart: Date; ProjectionsEnd: Date; DaysInFirstPeriod: Integer; PeriodLength: Integer; UseAccountingPeriods: Boolean; ProjectDisposal: Boolean; DepreciationBook: Record "Depreciation Book"; FADepreciationBook: Record "FA Depreciation Book"; var TempFixedAssetLedgerEntry: Record "FA Ledger Entry" temporary) var - DepreciationBook: Record "Depreciation Book"; - FADepreciationBook: Record "FA Depreciation Book"; - CalculateDepreciation: Codeunit "Calculate Depreciation"; - DepreciationCalculation: Codeunit "Depreciation Calculation"; - DateFromProjection: Date; + FixedAssetNo: Code[20]; + DepreciationBookCode: Code[10]; + ProjectionDate: Date; DepreciationAmount, Custom1Amount : Decimal; - NumberOfDays, Custom1NumberOfDays, DaysInPeriod : Integer; EntryAmounts: array[4] of Decimal; - First: Boolean; + NumberOfDays, Custom1NumberOfDays, DaysInPeriod : Integer; + PreviousProjectionDate: Date; + DateFromProjection: Date; + EndCurrentFiscalYear: Date; + FiscalYear365Days: Boolean; + ProjectingFromPostedValues: Boolean; + AssetWasDepreciated: Boolean; + LastProjectionInserted: Boolean; begin - if TempProjectedDepreciationDates.IsEmpty() then - exit; + FixedAssetNo := FADepreciationBook."FA No."; + DepreciationBookCode := FADepreciationBook."Depreciation Book Code"; + FiscalYear365Days := DepreciationBook."Fiscal Year 365 Days"; + DateFromProjection := 0D; + ProjectionDate := ProjectionsStart; + DaysInPeriod := DaysInFirstPeriod; + ProjectingFromPostedValues := true; + InitializeProjectionEntryAmounts(ProjectionsStart, DepreciationBook, FADepreciationBook, EntryAmounts); + InitializeFiscalYearEndDate(DepreciationBook, ProjectionsStart, EndCurrentFiscalYear); + while not LastProjectionInserted do begin + if not ProjectingFromPostedValues then + DateFromProjection := DepreciationCalculation.ToMorrow(PreviousProjectionDate, FiscalYear365Days); + + CalculateDepreciation.Calculate(DepreciationAmount, Custom1Amount, NumberOfDays, Custom1NumberOfDays, FixedAssetNo, DepreciationBookCode, ProjectionDate, EntryAmounts, DateFromProjection, DaysInPeriod); + AssetWasDepreciated := HasAssetBeenDepreciated(ProjectingFromPostedValues, DepreciationAmount, Custom1Amount, DateFromProjection, ProjectionDate, FADepreciationBook); + + if ProjectingFromPostedValues and AssetWasDepreciated then begin + ProjectingFromPostedValues := false; + InitializeDepreciationInFiscalYear(ProjectionDate, FADepreciationBook, EntryAmounts); + DaysInPeriod := 0; + end; + + if ProjectionDate = EndCurrentFiscalYear then begin + EntryAmounts[3] := 0; + UpdateToNextFiscalYearEndDate(DepreciationBook, EndCurrentFiscalYear); + end; - FADepreciationBook.SetAutoCalcFields("Book Value", "Custom 1"); - FADepreciationBook.Get(FixedAssetNo, DepreciationBookCode); - DepreciationBook.Get(DepreciationBookCode); + if AssetWasDepreciated then begin + AccumulateProjectionEntryAmounts(DepreciationAmount, Custom1Amount, EntryAmounts); + if ProjectDisposal then + CalculateDisposal.CalcGainLoss(FixedAssetNo, DepreciationBookCode, EntryAmounts); + end; + + InsertProjectedFixedAssetLedgerEntry(ProjectionDate, FixedAssetNo, DepreciationAmount, NumberOfDays, TempFixedAssetLedgerEntry); + LastProjectionInserted := ProjectionDate >= ProjectionsEnd; + + PreviousProjectionDate := ProjectionDate; + ProjectionDate := GetNextProjectionDate(ProjectionDate, UseAccountingPeriods, PeriodLength, EndCurrentFiscalYear, ProjectionsEnd, DepreciationBook, FADepreciationBook); + PeriodLength := GetPeriodLengthBetweenNextProjections(PreviousProjectionDate, ProjectionDate, DepreciationBook); + end; + end; + + local procedure HasAssetBeenDepreciated(ProjectingFromPostedValues: Boolean; DepreciationAmount: Decimal; Custom1Amount: Decimal; LastDateFromProjection: Date; ProjectionDate: Date; FADepreciationBook: Record "FA Depreciation Book"): Boolean + begin + if ProjectingFromPostedValues then + exit(not CalculatedDepreciationIsZero(DepreciationAmount, Custom1Amount)); + if not CalculatedDepreciationIsZero(DepreciationAmount, Custom1Amount) then + exit(true); + if FADepreciationBook."Depreciation Method" <> FADepreciationBook."Depreciation Method"::"User-Defined" then + exit(false); + exit(TableDeprCalculation.GetTablePercent(FADepreciationBook."Depreciation Book Code", FADepreciationBook."Depreciation Table Code", FADepreciationBook."First User-Defined Depr. Date", LastDateFromProjection, ProjectionDate) = 0) + end; + + local procedure AccumulateProjectionEntryAmounts(DepreciationAmount: Decimal; Custom1Amount: Decimal; var EntryAmounts: array[4] of Decimal) + begin + EntryAmounts[1] += DepreciationAmount + Custom1Amount; + EntryAmounts[2] += Custom1Amount; + EntryAmounts[3] += DepreciationAmount + Custom1Amount; + end; + + local procedure InitializeProjectionEntryAmounts(ProjectionsStart: Date; DepreciationBook: Record "Depreciation Book"; FADepreciationBook: Record "FA Depreciation Book"; var EntryAmounts: array[4] of Decimal) + begin EntryAmounts[1] := FADepreciationBook."Book Value"; EntryAmounts[2] := FADepreciationBook."Custom 1"; - EntryAmounts[3] := DepreciationCalculation.DeprInFiscalYear(FixedAssetNo, DepreciationBookCode, FirstDepreciationDate); - DateFromProjection := 0D; - First := true; - TempProjectedDepreciationDates.FindSet(); - repeat - CalculateDepreciation.Calculate(DepreciationAmount, Custom1Amount, NumberOfDays, Custom1NumberOfDays, FixedAssetNo, DepreciationBookCode, TempProjectedDepreciationDates."Starting Date", EntryAmounts, DateFromProjection, DaysInPeriod); - DateFromProjection := DepreciationCalculation.ToMorrow(TempProjectedDepreciationDates."Starting Date", DepreciationBook."Fiscal Year 365 Days"); - EntryAmounts[1] += DepreciationAmount + Custom1Amount; - EntryAmounts[2] += Custom1Amount; - EntryAmounts[3] += DepreciationAmount + Custom1Amount; - if First then begin - EntryAmounts[3] := DepreciationCalculation.DeprInFiscalYear(FixedAssetNo, DepreciationBookCode, TempProjectedDepreciationDates."Starting Date"); - First := false; - end; - TempFixedAssetLedgerEntry."FA No." := FixedAssetNo; - TempFixedAssetLedgerEntry."FA Posting Date" := TempProjectedDepreciationDates."Starting Date"; - TempFixedAssetLedgerEntry."FA Posting Type" := TempFixedAssetLedgerEntry."FA Posting Type"::Depreciation; - TempFixedAssetLedgerEntry.Amount := DepreciationAmount; - TempFixedAssetLedgerEntry."No. of Depreciation Days" := NumberOfDays; - TempFixedAssetLedgerEntry."Entry No." += 1; - TempFixedAssetLedgerEntry."Reason Code" := ProjectionTok; - TempFixedAssetLedgerEntry.Insert(); - until TempProjectedDepreciationDates.Next() = 0; + InitializeDepreciationInFiscalYear(ProjectionsStart, FADepreciationBook, EntryAmounts); + if DepreciationBook."Use Custom 1 Depreciation" then + EntryAmounts[4] := GetDepreciationBasis(DepreciationBook, FADepreciationBook); end; - local procedure InsertDatesForAccountingPeriods(var TempProjectedDepreciationDates: Record "Accounting Period" temporary; FromDate: Date; ToDate: Date) + local procedure InitializeDepreciationInFiscalYear(ReferenceDate: Date; FADepreciationBook: Record "FA Depreciation Book"; var EntryAmounts: array[4] of Decimal) + begin + EntryAmounts[3] := DepreciationCalculation.DeprInFiscalYear(FADepreciationBook."FA No.", FADepreciationBook."Depreciation Book Code", ReferenceDate); + end; + + local procedure GetDepreciationBasis(DepreciationBook: Record "Depreciation Book"; FADepreciationBook: Record "FA Depreciation Book"): Decimal + var + FALedgerEntry: Record "FA Ledger Entry"; + begin + FALedgerEntry.ReadIsolation := IsolationLevel::ReadUncommitted; + FALedgerEntry.SetCurrentKey("FA No.", "Depreciation Book Code", "Part of Book Value", "FA Posting Date"); + FALedgerEntry.SetRange("FA No.", FADepreciationBook."FA No."); + FALedgerEntry.SetRange("Depreciation Book Code", DepreciationBook.Code); + FALedgerEntry.SetRange("Part of Book Value", true); + FALedgerEntry.SetRange("FA Posting Date", 0D, FADepreciationBook."Depr. Ending Date (Custom 1)"); + FALedgerEntry.CalcSums(Amount); + exit(FALedgerEntry.Amount); + end; + + local procedure InsertProjectedFixedAssetLedgerEntry(PostingDate: Date; FixedAssetNo: Code[20]; Amount: Decimal; NumberOfDepreciationDays: Integer; var TempFixedAssetLedgerEntry: Record "FA Ledger Entry" temporary) + begin + TempFixedAssetLedgerEntry."FA No." := FixedAssetNo; + TempFixedAssetLedgerEntry."FA Posting Date" := PostingDate; + TempFixedAssetLedgerEntry."FA Posting Type" := TempFixedAssetLedgerEntry."FA Posting Type"::Depreciation; + TempFixedAssetLedgerEntry.Amount := Amount; + TempFixedAssetLedgerEntry."No. of Depreciation Days" := NumberOfDepreciationDays; + TempFixedAssetLedgerEntry."Entry No." += 1; + TempFixedAssetLedgerEntry."Reason Code" := ProjectionTok; + TempFixedAssetLedgerEntry.Insert(); + end; + + local procedure GetNextProjectionDate(Previous: Date; UseAccountingPeriods: Boolean; PeriodLength: Integer; EndCurrentFiscalYear: Date; ProjectionsEnd: Date; DepreciationBook: Record "Depreciation Book"; FADepreciationBook: Record "FA Depreciation Book"): Date + var + Next: Date; + FiscalYear365Days: Boolean; + begin + FiscalYear365Days := DepreciationBook."Fiscal Year 365 Days"; + + if UseAccountingPeriods then + Next := GetNextProjectionDateFromAccountingPeriods(Previous, PeriodLength, FiscalYear365Days) + else + Next := GetNextProjectionDateAsNextPeriod(Previous, PeriodLength, FiscalYear365Days); + if ShouldNextProjectionDateBeCustomDepreciationDate(Previous, Next, DepreciationBook, FADepreciationBook) then + Next := FADepreciationBook."Depr. Ending Date (Custom 1)"; + if PeriodIncludesDate(Previous, Next, FADepreciationBook."Temp. Ending Date") then + Next := FADepreciationBook."Temp. Ending Date"; + if PeriodIncludesDate(Previous, Next, EndCurrentFiscalYear) then + Next := EndCurrentFiscalYear; + if Next > ProjectionsEnd then + Next := ProjectionsEnd; + exit(Next); + end; + + local procedure GetNextProjectionDateFromAccountingPeriods(Previous: Date; PeriodLength: Integer; FiscalYear365Days: Boolean): Date var AccountingPeriod: Record "Accounting Period"; + NextAccountingPeriodMinDate: Date; begin - AccountingPeriod.SetRange("Starting Date", FromDate + 2, ToDate); - if AccountingPeriod.IsEmpty() then - exit; - AccountingPeriod.FindSet(); - repeat - TempProjectedDepreciationDates."Starting Date" := AccountingPeriod."Starting Date" - 1; - TempProjectedDepreciationDates.Insert(); - until AccountingPeriod.Next() = 0; + NextAccountingPeriodMinDate := DepreciationCalculation.ToMorrow(Previous, FiscalYear365Days) + 1; + AccountingPeriod.SetFilter("Starting Date", '>= %1', NextAccountingPeriodMinDate); + if not AccountingPeriod.FindFirst() then begin + if FiscalYear365Days then + Error(ConfigureAccountingPeriodsErr, NextAccountingPeriodMinDate); + exit(GetNextProjectionDateAsNextPeriod(Previous, PeriodLength, FiscalYear365Days)); + end; + if Date2DMY(AccountingPeriod."Starting Date", 1) <> 31 then + exit(DepreciationCalculation.Yesterday(AccountingPeriod."Starting Date", FiscalYear365Days)); + exit(AccountingPeriod."Starting Date" - 1); end; - local procedure InsertPostedEntries(FixedAssetNo: Code[20]; MinFAPostingDate: Date; FixedAssetDepreciationBookCode: Code[10]; var TempFixedAssetLedgerEntry: Record "FA Ledger Entry" temporary) + local procedure GetNextProjectionDateAsNextPeriod(Previous: Date; PeriodLength: Integer; FiscalYear365Days: Boolean): Date + begin + exit(FADateCalculation.CalculateDate(Previous, PeriodLength, FiscalYear365Days)); + end; + + local procedure GetPeriodLengthBetweenNextProjections(Previous: Date; Next: Date; DepreciationBook: Record "Depreciation Book"): Integer + var + DayAfterPrevious: Date; + FiscalYear365Days: Boolean; + DepreciationDaysBetween: Integer; + begin + FiscalYear365Days := DepreciationBook."Fiscal Year 365 Days"; + DayAfterPrevious := DepreciationCalculation.ToMorrow(Previous, FiscalYear365Days); + DepreciationDaysBetween := DepreciationCalculation.DeprDays(DayAfterPrevious, Next, FiscalYear365Days); + if IsPeriodLengthWithinLimits(DepreciationDaysBetween, DepreciationBook) then + exit(DepreciationDaysBetween); + exit(GetDaysInFiscalYear(DepreciationBook)); + end; + + local procedure InitializeFiscalYearEndDate(DepreciationBook: Record "Depreciation Book"; ReferenceDate: Date; var EndFiscalYear: Date) + var + StartFiscalYear: Date; + DaysInFiscalYear: Integer; + FiscalYear365Days: Boolean; + begin + FiscalYear365Days := DepreciationBook."Fiscal Year 365 Days"; + DaysInFiscalYear := GetDaysInFiscalYear(DepreciationBook); + StartFiscalYear := FADateCalculation.GetFiscalYear(DepreciationBook.Code, ReferenceDate); + EndFiscalYear := FADateCalculation.CalculateDate(DepreciationCalculation.Yesterday(StartFiscalYear, FiscalYear365Days), DaysInFiscalYear, FiscalYear365Days); + end; + + local procedure UpdateToNextFiscalYearEndDate(DepreciationBook: Record "Depreciation Book"; var EndFiscalYear: Date) + var + DaysInFiscalYear: Integer; + FiscalYear365Days: Boolean; + begin + FiscalYear365Days := DepreciationBook."Fiscal Year 365 Days"; + DaysInFiscalYear := GetDaysInFiscalYear(DepreciationBook); + EndFiscalYear := FADateCalculation.CalculateDate(EndFiscalYear, DaysInFiscalYear, FiscalYear365Days); + end; + + local procedure GetDaysInFiscalYear(DepreciationBook: Record "Depreciation Book"): Integer + begin + if DepreciationBook."No. of Days in Fiscal Year" > 0 then + exit(DepreciationBook."No. of Days in Fiscal Year"); + if DepreciationBook."Fiscal Year 365 Days" then + exit(365); + exit(360); + end; + + local procedure ShouldNextProjectionDateBeCustomDepreciationDate(Previous: Date; Next: Date; DepreciationBook: Record "Depreciation Book"; FADepreciationBook: Record "FA Depreciation Book"): Boolean + begin + if not DepreciationBook."Use Custom 1 Depreciation" then + exit(false); + exit(PeriodIncludesDate(Previous, Next, FADepreciationBook."Depr. Ending Date (Custom 1)")); + end; + + local procedure PeriodIncludesDate(PeriodStart: Date; PeriodEnd: Date; DateToCheck: Date): Boolean + begin + exit((PeriodStart < DateToCheck) and (PeriodEnd > DateToCheck)); + end; + + local procedure IsPeriodLengthWithinLimits(PeriodLength: Integer; DepreciationBook: Record "Depreciation Book"): Boolean + begin + exit((PeriodLength > MinPeriodLength()) and (PeriodLength <= GetDaysInFiscalYear(DepreciationBook))); + end; + + local procedure MinPeriodLength(): Integer + begin + exit(5); + end; + + local procedure InsertPostedEntries(FixedAssetNo: Code[20]; MinFAPostingDate: Date; FixedAssetDepreciationBookCode: Code[10]; var TempFixedAssetLedgerEntry: Record "FA Ledger Entry" temporary): Integer var FixedAssetLedgerEntry: Record "FA Ledger Entry"; + BiggestEntryNo: Integer; begin + BiggestEntryNo := 0; if MinFAPostingDate = 0D then - exit; + exit(BiggestEntryNo); + FixedAssetLedgerEntry.SetCurrentKey("FA No.", "Depreciation Book Code", "Posting Date"); + FixedAssetLedgerEntry.SetAscending("Posting Date", true); FixedAssetLedgerEntry.SetRange("FA No.", FixedAssetNo); FixedAssetLedgerEntry.SetRange("Depreciation Book Code", FixedAssetDepreciationBookCode); FixedAssetLedgerEntry.SetFilter("FA Posting Date", '>=%1', MinFAPostingDate); if FixedAssetLedgerEntry.IsEmpty() then - exit; + exit(BiggestEntryNo); FixedAssetLedgerEntry.FindSet(); repeat TempFixedAssetLedgerEntry.Copy(FixedAssetLedgerEntry); Clear(TempFixedAssetLedgerEntry."Reason Code"); TempFixedAssetLedgerEntry.Insert(); + if BiggestEntryNo < TempFixedAssetLedgerEntry."Entry No." then + BiggestEntryNo := TempFixedAssetLedgerEntry."Entry No."; until FixedAssetLedgerEntry.Next() = 0; + exit(BiggestEntryNo); end; - trigger OnPreReport() - var - DepreciationBook: Record "Depreciation Book"; - begin - DepreciationBook.Get(SelectedDepreciationBookCode); - if (FirstDepreciationDate = 0D) or (SecondDepreciationDate = 0D) then - Error(SpecifyStartingAndEndingDatesErr); - if FirstDepreciationDate > SecondDepreciationDate then - Error(SpecifyStartingAndEndingDatesErr); - end; - - var - ProjectionTok: Label 'PROJECTED', Locked = true; - SelectedDepreciationBookCode: Code[10]; - FirstDepreciationDate, SecondDepreciationDate : Date; - BookValue: Decimal; - PeriodLength: Integer; - DaysInFirstPeriod: Integer; - IncludePostedFrom: Date; - ProjectedDisposal: Boolean; - UseAccountingPeriod: Boolean; - ProjectedEntry: Boolean; - FirstFixedAssetLedgerEntry: Boolean; - SpecifyStartingAndEndingDatesErr: Label 'Please specify valid starting and ending dates.'; } \ No newline at end of file diff --git a/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceBudgetExcel.Report.al b/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceBudgetExcel.Report.al index 96211067b5..3c1a0a948e 100644 --- a/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceBudgetExcel.Report.al +++ b/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceBudgetExcel.Report.al @@ -21,7 +21,7 @@ report 4406 "EXR Trial BalanceBudgetExcel" dataset { - dataitem(TrialBalanceBudgetData; "G/L Account") + dataitem(GLAccounts; "G/L Account") { DataItemTableView = sorting("No."); RequestFilterFields = "No.", "Account Type", "Date Filter", "Budget Filter"; @@ -34,59 +34,39 @@ report 4406 "EXR Trial BalanceBudgetExcel" column(Indentation; Indentation) { IncludeCaption = true; } column(IndentedAccountName; IndentedAccountName) { } - dataitem(EXRTrialBalanceBuffer; "EXR Trial Balance Buffer") - { - DataItemLink = "G/L Account No." = field("No."); - column(Account; "G/L Account No.") { IncludeCaption = true; } - column(Dimension1Code; "Dimension 1 Code") { IncludeCaption = true; } - column(Dimension2Code; "Dimension 2 Code") { IncludeCaption = true; } - column(NetChange; "Net Change") { IncludeCaption = true; } - column(Balance; Balance) { IncludeCaption = true; } - column(NetBudget; "Budget (Net)") { IncludeCaption = true; } - column(BalanceBudget; "Budget (Bal. at Date)") { IncludeCaption = true; } - column(BudgetNetPct; "% of Budget Net") { IncludeCaption = true; } - column(BudgetBalPct; "% of Budget Bal.") { IncludeCaption = true; } - } trigger OnAfterGetRecord() - var - TrialBalance: Codeunit "Trial Balance"; begin - IndentedAccountName := PadStr('', TrialBalanceBudgetData.Indentation * 2, ' ') + TrialBalanceBudgetData.Name; - TrialBalance.InsertBreakdownForGLAccount(TrialBalanceBudgetData, Dimension1Values, Dimension2Values, EXRTrialBalanceBuffer); - end; - - trigger OnPreDataItem() - var - DimensionValue: Record "Dimension Value"; - begin - DimensionValue.SetRange("Global Dimension No.", 1); - if DimensionValue.FindSet() then - repeat - Dimension1Values.Add(DimensionValue.Code); - until DimensionValue.Next() = 0; - Dimension1Values.Add(''); - DimensionValue.SetRange("Global Dimension No.", 2); - if DimensionValue.FindSet() then - repeat - Dimension2Values.Add(DimensionValue.Code); - until DimensionValue.Next() = 0; - Dimension2Values.Add(''); + IndentedAccountName := PadStr('', GLAccounts.Indentation * 2, ' ') + GLAccounts.Name; end; } dataitem(Dimension1; "Dimension Value") { - DataItemTableView = sorting("Code") where("Global Dimension No." = const(1)); + DataItemTableView = sorting("Code"); + UseTemporary = true; column(Dim1Code; Dimension1."Code") { IncludeCaption = true; } column(Dim1Name; Dimension1.Name) { IncludeCaption = true; } } dataitem(Dimension2; "Dimension Value") { - DataItemTableView = sorting("Code") where("Global Dimension No." = const(2)); + DataItemTableView = sorting("Code"); + UseTemporary = true; column(Dim2Code; Dimension2."Code") { IncludeCaption = true; } column(Dim2Name; Dimension2.Name) { IncludeCaption = true; } } + dataitem(TrialBalanceBudgetData; "EXR Trial Balance Buffer") + { + column(Account; "G/L Account No.") { IncludeCaption = true; } + column(Dimension1Code; "Dimension 1 Code") { IncludeCaption = true; } + column(Dimension2Code; "Dimension 2 Code") { IncludeCaption = true; } + column(NetChange; "Net Change") { IncludeCaption = true; } + column(Balance; Balance) { IncludeCaption = true; } + column(NetBudget; "Budget (Net)") { IncludeCaption = true; } + column(BalanceBudget; "Budget (Bal. at Date)") { IncludeCaption = true; } + column(BudgetNetPct; "% of Budget Net") { IncludeCaption = true; } + column(BudgetBalPct; "% of Budget Bal.") { IncludeCaption = true; } + } } requestpage { @@ -113,15 +93,15 @@ report 4406 "EXR Trial BalanceBudgetExcel" TrialBalancevsBudget = 'Trial Balance vs. Budget'; } trigger OnPreReport() + var + TrialBalance: Codeunit "Trial Balance"; begin TrialBalanceBudgetData.SecurityFiltering(SecurityFilter::Filtered); CompanyInformation.Get(); + TrialBalance.ConfigureTrialBalance(true, false); + TrialBalance.InsertTrialBalanceReportData(GLAccounts, Dimension1, Dimension2, TrialBalanceBudgetData); end; - var - Dimension1Values: List of [Code[20]]; - Dimension2Values: List of [Code[20]]; - protected var CompanyInformation: Record "Company Information"; IndentedAccountName: Text; diff --git a/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceExcel.Report.al b/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceExcel.Report.al index 931cc28e11..cb5bfd9a08 100644 --- a/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceExcel.Report.al +++ b/Apps/W1/ExcelReports/app/src/Financials/EXRTrialBalanceExcel.Report.al @@ -22,7 +22,7 @@ report 4405 "EXR Trial Balance Excel" dataset { - dataitem(TrialBalanceData; "G/L Account") + dataitem(GLAccounts; "G/L Account") { DataItemTableView = sorting("No."); RequestFilterFields = "No.", "Account Type", "Date Filter", "Budget Filter"; @@ -35,67 +35,45 @@ report 4405 "EXR Trial Balance Excel" column(Indentation; Indentation) { IncludeCaption = true; } column(IndentedAccountName; IndentedAccountName) { } - dataitem(EXRTrialBalanceBuffer; "EXR Trial Balance Buffer") - { - DataItemLink = "G/L Account No." = field("No."); - column(Account; "G/L Account No.") { IncludeCaption = true; } - column(Dimension1Code; "Dimension 1 Code") { IncludeCaption = true; } - column(Dimension2Code; "Dimension 2 Code") { IncludeCaption = true; } - column(NetChange; "Net Change") { IncludeCaption = true; } - column(NetChangeDebit; "Net Change (Debit)") { IncludeCaption = true; } - column(NetChangeCredit; "Net Change (Credit)") { IncludeCaption = true; } - column(Balance; Balance) { IncludeCaption = true; } - column(BalanceDebit; "Balance (Debit)") { IncludeCaption = true; } - column(BalanceCredit; "Balance (Credit)") { IncludeCaption = true; } - column(NetChangeACY; "Net Change (ACY)") { IncludeCaption = true; } - column(NetChangeDebitACY; "Net Change (Debit) (ACY)") { IncludeCaption = true; } - column(NetChangeCreditACY; "Net Change (Credit) (ACY)") { IncludeCaption = true; } - column(BalanceACY; "Balance (ACY)") { IncludeCaption = true; } - column(BalanceDebitACY; "Balance (Debit) (ACY)") { IncludeCaption = true; } - column(BalanceCreditACY; "Balance (Credit) (ACY)") { IncludeCaption = true; } - } - trigger OnAfterGetRecord() - var - TrialBalance: Codeunit "Trial Balance"; begin - IndentedAccountName := PadStr('', TrialBalanceData.Indentation * 2, ' ') + TrialBalanceData.Name; - TrialBalance.InsertBreakdownForGLAccount(TrialBalanceData, Dimension1Values, Dimension2Values, EXRTrialBalanceBuffer); + IndentedAccountName := PadStr('', GLAccounts.Indentation * 2, ' ') + GLAccounts.Name; end; - - trigger OnPreDataItem() - var - DimensionValue: Record "Dimension Value"; - begin - DimensionValue.SetRange("Global Dimension No.", 1); - if DimensionValue.FindSet() then - repeat - Dimension1Values.Add(DimensionValue.Code); - until DimensionValue.Next() = 0; - Dimension1Values.Add(''); - DimensionValue.SetRange("Global Dimension No.", 2); - if DimensionValue.FindSet() then - repeat - Dimension2Values.Add(DimensionValue.Code); - until DimensionValue.Next() = 0; - Dimension2Values.Add(''); - end; - } dataitem(Dimension1; "Dimension Value") { - DataItemTableView = sorting("Code") where("Global Dimension No." = const(1)); + DataItemTableView = sorting("Code"); + UseTemporary = true; column(Dim1Code; Dimension1."Code") { IncludeCaption = true; } column(Dim1Name; Dimension1.Name) { IncludeCaption = true; } } dataitem(Dimension2; "Dimension Value") { - DataItemTableView = sorting("Code") where("Global Dimension No." = const(2)); + DataItemTableView = sorting("Code"); + UseTemporary = true; column(Dim2Code; Dimension2."Code") { IncludeCaption = true; } column(Dim2Name; Dimension2.Name) { IncludeCaption = true; } } + dataitem(TrialBalanceData; "EXR Trial Balance Buffer") + { + column(Account; "G/L Account No.") { IncludeCaption = true; } + column(Dimension1Code; "Dimension 1 Code") { IncludeCaption = true; } + column(Dimension2Code; "Dimension 2 Code") { IncludeCaption = true; } + column(NetChange; "Net Change") { IncludeCaption = true; } + column(NetChangeDebit; "Net Change (Debit)") { IncludeCaption = true; } + column(NetChangeCredit; "Net Change (Credit)") { IncludeCaption = true; } + column(Balance; Balance) { IncludeCaption = true; } + column(BalanceDebit; "Balance (Debit)") { IncludeCaption = true; } + column(BalanceCredit; "Balance (Credit)") { IncludeCaption = true; } + column(NetChangeACY; "Net Change (ACY)") { IncludeCaption = true; } + column(NetChangeDebitACY; "Net Change (Debit) (ACY)") { IncludeCaption = true; } + column(NetChangeCreditACY; "Net Change (Credit) (ACY)") { IncludeCaption = true; } + column(BalanceACY; "Balance (ACY)") { IncludeCaption = true; } + column(BalanceDebitACY; "Balance (Debit) (ACY)") { IncludeCaption = true; } + column(BalanceCreditACY; "Balance (Credit) (ACY)") { IncludeCaption = true; } + } } requestpage { @@ -122,14 +100,15 @@ report 4405 "EXR Trial Balance Excel" } trigger OnPreReport() + var + TrialBalance: Codeunit "Trial Balance"; begin TrialBalanceData.SecurityFiltering(SecurityFilter::Filtered); CompanyInformation.Get(); + TrialBalance.ConfigureTrialBalance(true, false); + TrialBalance.InsertTrialBalanceReportData(GLAccounts, Dimension1, Dimension2, TrialBalanceData); end; - var - Dimension1Values: List of [Code[20]]; - Dimension2Values: List of [Code[20]]; protected var CompanyInformation: Record "Company Information"; diff --git a/Apps/W1/ExcelReports/app/src/Financials/TrialBalance.Codeunit.al b/Apps/W1/ExcelReports/app/src/Financials/TrialBalance.Codeunit.al index 807b3f1363..d1f05efd65 100644 --- a/Apps/W1/ExcelReports/app/src/Financials/TrialBalance.Codeunit.al +++ b/Apps/W1/ExcelReports/app/src/Financials/TrialBalance.Codeunit.al @@ -1,75 +1,165 @@ namespace Microsoft.Finance.ExcelReports; using Microsoft.Finance.GeneralLedger.Account; +using Microsoft.Finance.Consolidation; +using Microsoft.Finance.Dimension; codeunit 4410 "Trial Balance" { - internal procedure InsertBreakdownForGLAccount(var GLAccount: Record "G/L Account"; Dimension1Values: List of [Code[20]]; Dimension2Values: List of [Code[20]]; var EXRTrialBalanceBuffer: Record "EXR Trial Balance Buffer") var - i, j : Integer; + GlobalBreakdownByDimension: Boolean; + GlobalBreakdownByBusinessUnit: Boolean; + BlankLbl: Label '(BLANK)'; + + internal procedure ConfigureTrialBalance(BreakdownByDimension: Boolean; BreakdownByBusinessUnit: Boolean) begin - Clear(EXRTrialBalanceBuffer); - EXRTrialBalanceBuffer.DeleteAll(); - for i := 1 to Dimension1Values.Count do - for j := 1 to Dimension2Values.Count do - InsertGLAccountTotalsForFilters(Dimension1Values.Get(i), Dimension2Values.Get(j), GLAccount, EXRTrialBalanceBuffer); + GlobalBreakdownByDimension := BreakdownByDimension; + GlobalBreakdownByBusinessUnit := BreakdownByBusinessUnit; + end; + + internal procedure InsertTrialBalanceReportData(var GLAccount: Record "G/L Account"; var Dimension1Values: Record "Dimension Value" temporary; var Dimension2Values: Record "Dimension Value" temporary; var TrialBalanceData: Record "EXR Trial Balance Buffer") + var + DimensionValue: Record "Dimension Value"; + BusinessUnitFilters, Dimension1Filters, Dimension2Filters : List of [Code[20]]; + begin + if not GLAccount.FindSet() then + exit; + + if GlobalBreakdownByDimension then begin + DimensionValue.SetRange("Global Dimension No.", 1); + InsertDimensionFiltersFromDimensionValues(DimensionValue, Dimension1Filters); + DimensionValue.SetRange("Global Dimension No.", 2); + InsertDimensionFiltersFromDimensionValues(DimensionValue, Dimension2Filters); + end; + if GlobalBreakdownByBusinessUnit then + InsertBusinessUnitFilters(BusinessUnitFilters); + + Clear(TrialBalanceData); + TrialBalanceData.DeleteAll(); + repeat + InsertBreakdownForGLAccount(GLAccount, Dimension1Filters, Dimension2Filters, BusinessUnitFilters, TrialBalanceData, Dimension1Values, Dimension2Values); + until GLAccount.Next() = 0; end; - internal procedure InsertBreakdownForGLAccount(var GLAccount: Record "G/L Account"; Dimension1Values: List of [Code[20]]; Dimension2Values: List of [Code[20]]; BusinessUnitCodes: List of [Code[20]]; var EXRTrialBalanceBuffer: Record "EXR Trial Balance Buffer") + local procedure InsertBusinessUnitFilters(var BusinessUnitFilters: List of [Code[20]]) + var + BusinessUnit: Record "Business Unit"; + begin + BusinessUnitFilters.Add(''); + if not BusinessUnit.FindSet() then + exit; + repeat + BusinessUnitFilters.Add(BusinessUnit.Code); + until BusinessUnit.Next() = 0; + end; + + local procedure InsertDimensionFiltersFromDimensionValues(var DimensionValue: Record "Dimension Value"; var DimensionFilters: List of [Code[20]]) + begin + DimensionFilters.Add(''); + if not DimensionValue.FindSet() then + exit; + repeat + DimensionFilters.Add(DimensionValue.Code); + until DimensionValue.Next() = 0; + end; + + local procedure InsertBreakdownForGLAccount(var GLAccount: Record "G/L Account"; Dimension1Filters: List of [Code[20]]; Dimension2Filters: List of [Code[20]]; BusinessUnitCodeFilters: List of [Code[20]]; var TrialBalanceData: Record "EXR Trial Balance Buffer"; var Dimension1Values: Record "Dimension Value" temporary; var Dimension2Values: Record "Dimension Value" temporary) var i, j, k : Integer; begin - Clear(EXRTrialBalanceBuffer); - EXRTrialBalanceBuffer.DeleteAll(); - for i := 1 to Dimension1Values.Count do - for j := 1 to Dimension2Values.Count do - for k := 1 to BusinessUnitCodes.Count do - InsertGLAccountTotalsForFilters(Dimension1Values.Get(i), Dimension2Values.Get(j), BusinessUnitCodes.Get(k), GLAccount, EXRTrialBalanceBuffer); + if GlobalBreakdownByDimension then + for i := 1 to Dimension1Filters.Count do + for j := 1 to Dimension2Filters.Count do + if GlobalBreakdownByBusinessUnit then + for k := 1 to BusinessUnitCodeFilters.Count do + InsertGLAccountTotalsForFilters(Dimension1Filters.Get(i), Dimension2Filters.Get(j), BusinessUnitCodeFilters.Get(k), GLAccount, TrialBalanceData, Dimension1Values, Dimension2Values) + else + InsertGLAccountTotalsForFilters(Dimension1Filters.Get(i), Dimension2Filters.Get(j), GLAccount, TrialBalanceData, Dimension1Values, Dimension2Values) + else + if GlobalBreakdownByBusinessUnit then + for i := 1 to BusinessUnitCodeFilters.Count do + InsertGLAccountTotalsForFilters(BusinessUnitCodeFilters.Get(i), GLAccount, TrialBalanceData) + else + InsertGLAccountTotalsForFilters(GLAccount, TrialBalanceData); end; - local procedure InsertGLAccountTotalsForFilters(Dimension1ValueCode: Code[20]; Dimension2ValueCode: Code[20]; var GLAccount: Record "G/L Account"; var EXRTrialBalanceBuffer: Record "EXR Trial Balance Buffer") + local procedure InsertGLAccountTotalsForFilters(var GLAccount: Record "G/L Account"; var TrialBalanceData: Record "EXR Trial Balance Buffer") var - LocalGlAccount: Record "G/L Account"; + TempDimension1Values: Record "Dimension Value" temporary; + TempDimension2Values: Record "Dimension Value" temporary; begin - LocalGlAccount.Copy(GLAccount); - SetGLAccountFilters(LocalGlAccount, Dimension1ValueCode, Dimension2ValueCode); - InsertTrialBalanceDataForGLAccountWithFilters(LocalGlAccount, EXRTrialBalanceBuffer); + InsertGLAccountTotalsForFilters('', '', '', GLAccount, TrialBalanceData, TempDimension1Values, TempDimension2Values); end; - local procedure InsertGLAccountTotalsForFilters(Dimension1ValueCode: Code[20]; Dimension2ValueCode: Code[20]; BusinessUnitCode: Code[20]; var GLAccount: Record "G/L Account"; var EXRTrialBalanceBuffer: Record "EXR Trial Balance Buffer") + local procedure InsertGLAccountTotalsForFilters(BusinessUnitCode: Code[20]; var GLAccount: Record "G/L Account"; var TrialBalanceData: Record "EXR Trial Balance Buffer") var - LocalGlAccount: Record "G/L Account"; + TempDimension1Values: Record "Dimension Value" temporary; + TempDimension2Values: Record "Dimension Value" temporary; begin - LocalGlAccount.Copy(GLAccount); - SetGLAccountFilters(LocalGLAccount, Dimension1ValueCode, Dimension2ValueCode, BusinessUnitCode); - InsertTrialBalanceDataForGLAccountWithFilters(LocalGlAccount, EXRTrialBalanceBuffer); + InsertGLAccountTotalsForFilters('', '', BusinessUnitCode, GLAccount, TrialBalanceData, TempDimension1Values, TempDimension2Values); end; - local procedure SetGLAccountFilters(var GLAccount: Record "G/L Account"; Dimension1ValueCode: Code[20]; Dimension2ValueCode: Code[20]) + local procedure InsertGLAccountTotalsForFilters(Dimension1ValueCode: Code[20]; Dimension2ValueCode: Code[20]; var GLAccount: Record "G/L Account"; var TrialBalanceData: Record "EXR Trial Balance Buffer"; var Dimension1Values: Record "Dimension Value" temporary; var Dimension2Values: Record "Dimension Value" temporary) begin - GLAccount.SetFilter("Global Dimension 1 Filter", Dimension1ValueCode); - GLAccount.SetFilter("Global Dimension 2 Filter", Dimension2ValueCode); + InsertGLAccountTotalsForFilters(Dimension1ValueCode, Dimension2ValueCode, '', GLAccount, TrialBalanceData, Dimension1Values, Dimension2Values); end; - local procedure SetGLAccountFilters(var GLAccount: Record "G/L Account"; Dimension1ValueCode: Code[20]; Dimension2ValueCode: Code[20]; BusinessUnitCode: Code[20]) + local procedure InsertGLAccountTotalsForFilters(Dimension1ValueCode: Code[20]; Dimension2ValueCode: Code[20]; BusinessUnitCode: Code[20]; var GLAccount: Record "G/L Account"; var TrialBalanceData: Record "EXR Trial Balance Buffer"; var Dimension1Values: Record "Dimension Value" temporary; var Dimension2Values: Record "Dimension Value" temporary) + var + LocalGlAccount: Record "G/L Account"; begin - SetGLAccountFilters(GLAccount, Dimension1ValueCode, Dimension2ValueCode); - GLAccount.SetFilter("Business Unit Filter", BusinessUnitCode); + LocalGlAccount.Copy(GLAccount); + if GlobalBreakdownByDimension then begin + GLAccount.SetFilter("Global Dimension 1 Filter", Dimension1ValueCode); + GLAccount.SetFilter("Global Dimension 2 Filter", Dimension2ValueCode); + end; + if GlobalBreakdownByBusinessUnit then + GLAccount.SetFilter("Business Unit Filter", BusinessUnitCode); + InsertTrialBalanceDataForGLAccountWithFilters(LocalGlAccount, TrialBalanceData, Dimension1Values, Dimension2Values); end; - local procedure InsertTrialBalanceDataForGLAccountWithFilters(var GLAccount: Record "G/L Account"; var EXRTrialBalanceBuffer: Record "EXR Trial Balance Buffer") + local procedure InsertTrialBalanceDataForGLAccountWithFilters(var GLAccount: Record "G/L Account"; var TrialBalanceData: Record "EXR Trial Balance Buffer"; var Dimension1Values: Record "Dimension Value" temporary; var Dimension2Values: Record "Dimension Value" temporary) begin GlAccount.CalcFields("Net Change", "Balance at Date", "Additional-Currency Net Change", "Add.-Currency Balance at Date", "Budgeted Amount", "Budget at Date"); - EXRTrialBalanceBuffer."G/L Account No." := GlAccount."No."; - EXRTrialBalanceBuffer."Dimension 1 Code" := CopyStr(GLAccount.GetFilter("Global Dimension 1 Filter"), 1, MaxStrLen(EXRTrialBalanceBuffer."Dimension 1 Code")); - EXRTrialBalanceBuffer."Dimension 2 Code" := CopyStr(GLAccount.GetFilter("Global Dimension 2 Filter"), 1, MaxStrLen(EXRTrialBalanceBuffer."Dimension 2 Code")); - EXRTrialBalanceBuffer."Business Unit Code" := CopyStr(GLAccount.GetFilter("Business Unit Filter"), 1, MaxStrLen(EXRTrialBalanceBuffer."Business Unit Code")); - EXRTrialBalanceBuffer.Validate("Net Change", GLAccount."Net Change"); - EXRTrialBalanceBuffer.Validate(Balance, GLAccount."Balance at Date"); - EXRTrialBalanceBuffer.Validate("Net Change (ACY)", GLAccount."Additional-Currency Net Change"); - EXRTrialBalanceBuffer.Validate("Balance (ACY)", GLAccount."Add.-Currency Balance at Date"); - EXRTrialBalanceBuffer.Validate("Budget (Net)", GLAccount."Budgeted Amount"); - EXRTrialBalanceBuffer.Validate("Budget (Bal. at Date)", GLAccount."Budget at Date"); - EXRTrialBalanceBuffer.CalculateBudgetComparisons(); - EXRTrialBalanceBuffer.Insert(true); + TrialBalanceData."G/L Account No." := GlAccount."No."; + TrialBalanceData."Dimension 1 Code" := CopyStr(GLAccount.GetFilter("Global Dimension 1 Filter"), 1, MaxStrLen(TrialBalanceData."Dimension 1 Code")); + TrialBalanceData."Dimension 2 Code" := CopyStr(GLAccount.GetFilter("Global Dimension 2 Filter"), 1, MaxStrLen(TrialBalanceData."Dimension 2 Code")); + TrialBalanceData."Business Unit Code" := CopyStr(GLAccount.GetFilter("Business Unit Filter"), 1, MaxStrLen(TrialBalanceData."Business Unit Code")); + TrialBalanceData.Validate("Net Change", GLAccount."Net Change"); + TrialBalanceData.Validate(Balance, GLAccount."Balance at Date"); + TrialBalanceData.Validate("Net Change (ACY)", GLAccount."Additional-Currency Net Change"); + TrialBalanceData.Validate("Balance (ACY)", GLAccount."Add.-Currency Balance at Date"); + TrialBalanceData.Validate("Budget (Net)", GLAccount."Budgeted Amount"); + TrialBalanceData.Validate("Budget (Bal. at Date)", GLAccount."Budget at Date"); + TrialBalanceData.CalculateBudgetComparisons(); + TrialBalanceData.CheckAllZero(); + if not TrialBalanceData."All Zero" then begin + TrialBalanceData.Insert(true); + if GlobalBreakdownByDimension then begin + InsertUsedDimensionValue(1, TrialBalanceData."Dimension 1 Code", Dimension1Values); + InsertUsedDimensionValue(2, TrialBalanceData."Dimension 2 Code", Dimension2Values); + end; + end; + end; + + local procedure InsertUsedDimensionValue(GlobalDimensionNo: Integer; DimensionCode: Code[20]; var InsertedDimensionValues: Record "Dimension Value" temporary) + var + DimensionValue: Record "Dimension Value"; + begin + Clear(InsertedDimensionValues); + if DimensionCode <> '' then + InsertedDimensionValues.SetRange("Global Dimension No.", GlobalDimensionNo); + InsertedDimensionValues.SetRange(Code, DimensionCode); + if not InsertedDimensionValues.IsEmpty() then + exit; + if DimensionCode = '' then begin + InsertedDimensionValues."Dimension Code" := DimensionCode; + InsertedDimensionValues.Name := BlankLbl; + InsertedDimensionValues.Insert(); + exit; + end; + DimensionValue.CopyFilters(InsertedDimensionValues); + DimensionValue.FindFirst(); + InsertedDimensionValues.Copy(DimensionValue); + InsertedDimensionValues.Insert(); end; } \ No newline at end of file diff --git a/Apps/W1/ExcelReports/app/src/RoleCenters/EXRAccountantRoleCenter.PageExt.al b/Apps/W1/ExcelReports/app/src/RoleCenters/EXRAccountantRoleCenter.PageExt.al index 6e9d923ec4..9a732e268e 100644 --- a/Apps/W1/ExcelReports/app/src/RoleCenters/EXRAccountantRoleCenter.PageExt.al +++ b/Apps/W1/ExcelReports/app/src/RoleCenters/EXRAccountantRoleCenter.PageExt.al @@ -80,6 +80,38 @@ pageextension 4401 "EXR Accountant Role Center" extends "Accountant Role Center" RunObject = report "EXR Aged Acc Payable Excel"; ToolTip = 'Open a spreadsheet that shows the Aged Accounts Payable data.'; } + action(EXRConsolidatedTrialBalance) + { + ApplicationArea = Basic, Suite; + Caption = 'Consolidated Trial Balance Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Consolidated Trial Balance"; + ToolTip = 'Open an Excel workbook that shows the G/L entries totals in the different business units.'; + } + action(EXRFixedAssetAnalysisExcel) + { + ApplicationArea = Basic, Suite; + Caption = 'Fixed Asset Analysis Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Fixed Asset Analysis Excel"; + ToolTip = 'Open an Excel workbook that shows a comparison of fixed asset values across a date range.'; + } + action(EXRFixedAssetDetailsExcel) + { + ApplicationArea = Basic, Suite; + Caption = 'Fixed Asset Details Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Fixed Asset Details Excel"; + ToolTip = 'Open an Excel workbook that shows fixed asset ledger entries.'; + } + action(EXRFixedAssetProjected) + { + ApplicationArea = Basic, Suite; + Caption = 'Fixed Asset Projected Value Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Fixed Asset Projected"; + ToolTip = 'Open an Excel workbook that shows posted fixed asset ledger entries and projected fixed asset ledger entries.'; + } } } } \ No newline at end of file diff --git a/Apps/W1/ExcelReports/app/src/RoleCenters/EXRFinRoleCenter.PageExt.al b/Apps/W1/ExcelReports/app/src/RoleCenters/EXRFinRoleCenter.PageExt.al index 8a02dec755..a7ca922889 100644 --- a/Apps/W1/ExcelReports/app/src/RoleCenters/EXRFinRoleCenter.PageExt.al +++ b/Apps/W1/ExcelReports/app/src/RoleCenters/EXRFinRoleCenter.PageExt.al @@ -72,6 +72,38 @@ pageextension 4406 EXRFinRoleCenter extends "Finance Manager Role Center" RunObject = report "EXR Aged Acc Payable Excel"; ToolTip = 'Open a spreadsheet that shows the Aged Accounts Payable data.'; } + action(EXRConsolidatedTrialBalance) + { + ApplicationArea = Basic, Suite; + Caption = 'Consolidated Trial Balance Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Consolidated Trial Balance"; + ToolTip = 'Open an Excel workbook that shows the G/L entries totals in the different business units.'; + } + action(EXRFixedAssetAnalysisExcel) + { + ApplicationArea = Basic, Suite; + Caption = 'Fixed Asset Analysis Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Fixed Asset Analysis Excel"; + ToolTip = 'Open an Excel workbook that shows a comparison of fixed asset values across a date range.'; + } + action(EXRFixedAssetDetailsExcel) + { + ApplicationArea = Basic, Suite; + Caption = 'Fixed Asset Details Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Fixed Asset Details Excel"; + ToolTip = 'Open an Excel workbook that shows fixed asset ledger entries.'; + } + action(EXRFixedAssetProjected) + { + ApplicationArea = Basic, Suite; + Caption = 'Fixed Asset Projected Value Excel (Preview)'; + Image = "Report"; + RunObject = report "EXR Fixed Asset Projected"; + ToolTip = 'Open an Excel workbook that shows posted fixed asset ledger entries and projected fixed asset ledger entries.'; + } } } } diff --git a/Apps/W1/ExcelReports/app/src/Vendor/EXRVendorTopList.Report.al b/Apps/W1/ExcelReports/app/src/Vendor/EXRVendorTopList.Report.al index 1dda3fb95d..62dd7ee09a 100644 --- a/Apps/W1/ExcelReports/app/src/Vendor/EXRVendorTopList.Report.al +++ b/Apps/W1/ExcelReports/app/src/Vendor/EXRVendorTopList.Report.al @@ -140,7 +140,7 @@ report 4404 "EXR Vendor Top List" if EXTTopVendorPurchase.Read() then repeat InsertAggregatedPurchases(EXTTopVendorPurchase.Vendor_No, EXTTopVendorPurchase.Sum_Purch_LCY); - VendorFilter += EXTTopVendorPurchase.Vendor_No + '|'; + VendorFilter += EscapeVendorNoFilter(EXTTopVendorPurchase.Vendor_No) + '|'; until (not EXTTopVendorPurchase.Read()); exit(VendorFilter.TrimEnd('|')); @@ -157,12 +157,17 @@ report 4404 "EXR Vendor Top List" if EXTTopVendorBalance.Read() then repeat InsertAggregatedPurchases(EXTTopVendorBalance.Vendor_No, EXTTopVendorBalance.Balance_LCY); - VendorFilter += EXTTopVendorBalance.Vendor_No + '|'; + VendorFilter += EscapeVendorNoFilter(EXTTopVendorBalance.Vendor_No) + '|'; until (not EXTTopVendorBalance.Read()); exit(VendorFilter.TrimEnd('|')); end; + local procedure EscapeVendorNoFilter(VendorNo: Code[20]): Text + begin + exit('''' + VendorNo + ''''); + end; + local procedure ChangeShowType(NewShowType: Option) begin GlobalExtTopVendorReportBuffer."Ranking Based On" := NewShowType; @@ -179,7 +184,7 @@ report 4404 "EXR Vendor Top List" EXTTopVendorPurchase.Open(); if EXTTopVendorPurchase.Read() then repeat - TopVendorData.SetFilter(TopVendorData."Vendor No.", EXTTopVendorPurchase.Vendor_No); + TopVendorData.SetFilter(TopVendorData."Vendor No.", EscapeVendorNoFilter(EXTTopVendorPurchase.Vendor_No)); if TopVendorData.FindFirst() then begin TopVendorData."Amount 2 (LCY)" := EXTTopVendorPurchase.Sum_Purch_LCY; if Vendor.Get(TopVendorData."Vendor No.") then diff --git a/Apps/W1/FieldServiceIntegration/app/.objidconfig b/Apps/W1/FieldServiceIntegration/app/.objidconfig deleted file mode 100644 index 692e082f09..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/.objidconfig +++ /dev/null @@ -1,3 +0,0 @@ -{ - "appPoolId": "0ef705b60e6900f11232505938e0e8a87867b9eac95b5a0d58dd87d6cbb44014" -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/app.json b/Apps/W1/FieldServiceIntegration/app/app.json deleted file mode 100644 index 3b530945a2..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/app.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": "1ba1031e-eae9-4f20-b9d2-d19b6d1e3f29", - "name": "Field Service Integration", - "publisher": "Microsoft", - "version": "25.0.0.0", - "brief": "Field Service Integration", - "description": "Field Service Integration", - "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724009", - "EULA": "https://go.microsoft.com/fwlink/?linkid=2182906", - "help": "https://go.microsoft.com/fwlink/?linkid=2206519", - "contextSensitiveHelpUrl": "https://learn.microsoft.com/dynamics365/business-central/", - "url": "https://go.microsoft.com/fwlink/?LinkId=724011", - "logo": "ExtensionLogo.png", - "dependencies": [ - - ], - "internalsVisibleTo": [ - { - "id": "41b3ab6e-3f20-47c7-a67f-feccc4d58a55", - "name": "Field Service Integration Test Library", - "publisher": "Microsoft" - } - ], - "screenshots": [ - - ], - "platform": "25.0.0.0", - "idRanges": [ - { - "from": 6610, - "to": 6640 - } - ], - "target": "OnPrem", - "resourceExposurePolicy": { - "allowDebugging": true, - "allowDownloadingSource": true, - "includeSourceInSymbolFile": true - }, - "application": "25.0.0.0", - "features": [ - "NoImplicitWith", - "TranslationFile" - ] -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSAssistedSetupSubscriber.Codeunit.al b/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSAssistedSetupSubscriber.Codeunit.al deleted file mode 100644 index 1e06de493d..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSAssistedSetupSubscriber.Codeunit.al +++ /dev/null @@ -1,50 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using System.Environment.Configuration; -using System.Globalization; -using System.Media; -using Microsoft.Integration.D365Sales; - -codeunit 6613 "FS Assisted Setup Subscriber" -{ - var - CRMConnectionSetupTitleTxt: Label 'Set up a connection to %1', Comment = '%1 = CRM product name'; - CRMConnectionSetupShortTitleTxt: Label 'Connect to %1', Comment = '%1 = CRM product name', MaxLength = 32; - FSConnectionSetupHelpTxt: Label 'https://go.microsoft.com/fwlink/?linkid=2270903', Locked = true; - CRMConnectionSetupDescriptionTxt: Label 'Connect your Dynamics 365 services for better insights. Data is exchanged between the apps for better productivity.'; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Guided Experience", 'OnRegisterAssistedSetup', '', false, false)] - local procedure RegisterFSAssistedSetup() - var - ApplicationAreaMgmtFacade: Codeunit "Application Area Mgmt. Facade"; - begin - if not ApplicationAreaMgmtFacade.IsBasicOnlyEnabled() then - RegisterAssistedSetup(); - end; - - internal procedure RegisterAssistedSetup() - var - GuidedExperience: Codeunit "Guided Experience"; - Language: Codeunit Language; - CRMProductName: Codeunit "CRM Product Name"; - AssistedSetupGroup: Enum "Assisted Setup Group"; - VideoCategory: Enum "Video Category"; - GuidedExperienceType: Enum "Guided Experience Type"; - CurrentGlobalLanguage: Integer; - begin - CurrentGlobalLanguage := GlobalLanguage; - if not GuidedExperience.Exists(GuidedExperienceType::"Assisted Setup", ObjectType::Page, Page::"FS Connection Setup Wizard") then begin - GuidedExperience.InsertAssistedSetup(StrSubstNo(CRMConnectionSetupTitleTxt, CRMProductName.FSServiceName()), - StrSubstNo(CRMConnectionSetupShortTitleTxt, CRMProductName.FSServiceName()), CRMConnectionSetupDescriptionTxt, 10, ObjectType::Page, - Page::"FS Connection Setup Wizard", AssistedSetupGroup::Connect, '', VideoCategory::Connect, FSConnectionSetupHelpTxt); - GlobalLanguage(Language.GetDefaultApplicationLanguageId()); - GuidedExperience.AddTranslationForSetupObjectTitle(GuidedExperienceType::"Assisted Setup", ObjectType::Page, - Page::"FS Connection Setup Wizard", Language.GetDefaultApplicationLanguageId(), StrSubstNo(CRMConnectionSetupTitleTxt, CRMProductName.FSServiceName())); - GlobalLanguage(CurrentGlobalLanguage); - end; - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSDataClassification.Codeunit.al b/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSDataClassification.Codeunit.al deleted file mode 100644 index 8b333e2c78..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSDataClassification.Codeunit.al +++ /dev/null @@ -1,39 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Utilities; -using System.Privacy; - -codeunit 6614 "FS Data Classification" -{ - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Data Classification Eval. Data", 'OnCreateEvaluationDataOnAfterClassifyTablesToNormal', '', false, false)] - local procedure OnClassifyTables() - begin - ClassifyTables(); - end; - - - local procedure ClassifyTables() - var - DataClassificationMgt: Codeunit "Data Classification Mgt."; - begin - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Connection Setup"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Bookable Resource"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Bookable Resource Booking"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS BookableResourceBookingHdr"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Customer Asset"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Customer Asset Category"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Project Task"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Resource Pay Type"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Warehouse"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Work Order"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Work Order Product"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Work Order Service"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Work Order Incident"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Work Order Substatus"); - DataClassificationMgt.SetTableFieldsToNormal(Database::"FS Work Order Type"); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSInstall.Codeunit.al b/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSInstall.Codeunit.al deleted file mode 100644 index dad4a55041..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSInstall.Codeunit.al +++ /dev/null @@ -1,131 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using System.Upgrade; -using Microsoft.Integration.SyncEngine; -using System.Environment.Configuration; - -codeunit 6616 "FS Install" -{ - Subtype = Install; - - trigger OnInstallAppPerCompany() - begin - UpgradeConnectionSetup(); - UpgradeIntegrationTableMappings(); - UpgradeAssistedSetup(); - end; - - local procedure UpgradeConnectionSetup() - var - FSConnectionSetupOld: Record Microsoft.Integration.FieldService."FS Connection Setup"; - FSConnectionSetupNew: Record "FS Connection Setup"; - UpgradeTag: Codeunit "Upgrade Tag"; - begin - if UpgradeTag.HasUpgradeTag(GetConnectionSetupUpgradeTag()) then - exit; - - if FSConnectionSetupOld.FindFirst() then begin - FSConnectionSetupNew.Init(); - FSConnectionSetupNew.TransferFields(FSConnectionSetupOld); - FSConnectionSetupNew.Insert(); - FSConnectionSetupOld."Is Enabled" := false; - FSConnectionSetupOld.Modify(); - end; - - UpgradeTag.SetUpgradeTag(GetConnectionSetupUpgradeTag()); - end; - - local procedure UpgradeIntegrationTableMappings() - var - IntegrationTableMapping: Record "Integration Table Mapping"; - UpgradeTag: Codeunit "Upgrade Tag"; - begin - if UpgradeTag.HasUpgradeTag(GetIntegrationTableMappingsUpgradeTag()) then - exit; - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Bookable Resource"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Bookable Resource"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Bookable Resource Booking"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Bookable Resource Booking"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS BookableResourceBookingHdr"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS BookableResourceBookingHdr"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Customer Asset"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Customer Asset"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Customer Asset Category"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Customer Asset Category"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Project Task"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Project Task"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Resource Pay Type"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Resource Pay Type"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Work Order"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Work Order"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Work Order Incident"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Work Order Incident"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Work Order Product"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Work Order Product"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Work Order Service"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Work Order Service"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Work Order Substatus"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Work Order Substatus"); - - IntegrationTableMapping.SetRange("Integration Table ID", Database::Microsoft.Integration.FieldService."FS Work Order Type"); - IntegrationTableMapping.ModifyAll("Integration Table ID", Database::"FS Work Order Type"); - - UpgradeTag.SetUpgradeTag(GetIntegrationTableMappingsUpgradeTag()); - end; - - local procedure UpgradeAssistedSetup() - var - GuidedExperience: Codeunit "Guided Experience"; - UpgradeTag: Codeunit "Upgrade Tag"; - begin - if UpgradeTag.HasUpgradeTag(GetAssistedSetupUpgradeTag()) then - exit; - -#if not CLEAN25 - GuidedExperience.Remove("Guided Experience Type"::"Assisted Setup", ObjectType::Page, Page::Microsoft.Integration.FieldService."FS Connection Setup Wizard"); -#else - GuidedExperience.Remove("Guided Experience Type"::"Assisted Setup", ObjectType::Page, 6421); // 6421 is the ID of the FS Connection Setup Wizard page in Base Application -#endif - - UpgradeTag.SetUpgradeTag(GetAssistedSetupUpgradeTag()); - end; - - local procedure GetConnectionSetupUpgradeTag(): Code[250] - begin - exit('MS-527221-ConnectionSetupUpgradeTag-20240510'); - end; - - local procedure GetIntegrationTableMappingsUpgradeTag(): Code[250] - begin - exit('MS-527221-IntegrationTableMappingsUpgradeTag-20240510'); - end; - - local procedure GetAssistedSetupUpgradeTag(): Code[250] - begin - exit('MS-527221-AssistedSetupUpgradeTag-20240510'); - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Upgrade Tag", 'OnGetPerCompanyUpgradeTags', '', false, false)] - local procedure RegisterPerCompanyTags(var PerCompanyUpgradeTags: List of [Code[250]]) - begin - PerCompanyUpgradeTags.Add(GetConnectionSetupUpgradeTag()); - PerCompanyUpgradeTags.Add(GetIntegrationTableMappingsUpgradeTag()); - PerCompanyUpgradeTags.Add(GetAssistedSetupUpgradeTag()); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntTableSubscriber.Codeunit.al b/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntTableSubscriber.Codeunit.al deleted file mode 100644 index 7ec11ca2a4..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntTableSubscriber.Codeunit.al +++ /dev/null @@ -1,1200 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Projects.Project.Job; -using Microsoft.Foundation.NoSeries; -using Microsoft.Projects.Project.Setup; -using Microsoft.Integration.SyncEngine; -using Microsoft.Sales.Customer; -using System.Telemetry; -using Microsoft.Projects.Project.Posting; -using Microsoft.Projects.Project.Journal; -using Microsoft.Projects.Resources.Resource; -using Microsoft.Integration.D365Sales; -using Microsoft.Inventory.Item; -using Microsoft.Projects.Project.Planning; -using Microsoft.Projects.Project.Ledger; -using Microsoft.Sales.History; - -codeunit 6610 "FS Int. Table Subscriber" -{ - SingleInstance = true; - - var - CDSIntegrationMgt: Codeunit "CDS Integration Mgt."; - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - CRMSynchHelper: Codeunit "CRM Synch. Helper"; - RecordMustBeCoupledErr: Label '%1 %2 must be coupled to %3.', Comment = '%1 = table caption, %2 = primary key value, %3 - service name'; - RecordCoupledToDeletedErr: Label '%1 %2 is coupled to a deleted record.', Comment = '%1 = table caption, %2 = primary key value'; - JobJournalIncorrectSetupErr: Label 'You must set up %1 correctly on %2.', Comment = '%1 = a table name, %2 = a table name'; - CategoryTok: Label 'AL Field Service Integration', Locked = true; - MustBeCoupledErr: Label '%1 %2 must be coupled to a Business Central %3', Comment = '%1 = a table name, %2 - a guid, %3 = a table name'; - DoesntExistErr: Label '%1 %2 doesn''t exist in %3', Comment = '%1 = a table name, %2 - a guid, %3 = Field Service service name'; - CoupledToDeletedErr: Label '%1 %2 is coupled to a deleted Business Central %3. You must re-couple it.', Comment = '%1 = a table name, %2 - a guid, %3 = a table name'; - CoupledToNonServiceErr: Label 'To synchronize this work order service, %1 %2 must be coupled to an item whose type is not set to Inventory. It is curretly coupled to item %3.', Comment = '%1 = a table name, %2 - a guid, %3 = an item name'; - CoupledToBlockedItemErr: Label 'To synchronize this work order service, %1 %2 must be coupled to an item that is not blocked. It is curretly coupled to item %3.', Comment = '%1 = a table name, %2 - a guid, %3 = an item name'; - CoupledToItemWithWrongUOMErr: Label 'To synchronize this work order service, %1 %2 must be coupled to an item that has base unit of measure set to %4. It is curretly coupled to item %3.', Comment = '%1 = a table name, %2 - a guid, %3 = an item name, %4 - unit of measure name'; - UnableToModifyWOSTxt: Label 'Unable to update work order service.', Locked = true; - UnableToModifyWOPTxt: Label 'Unable to update work order product.', Locked = true; - TestServerAddressTok: Label '@@test@@', Locked = true; - FSConnEnabledTelemetryErr: Label 'User is trying to set up the connection with Dataverse, while the existing connections with Field Service is enabled.', Locked = true; - FSConnEnabledErr: Label 'To set up the connection with Dataverse, you must first disable the existing connection with Field Service.'; - ShowFSConnectionSetupLbl: Label 'Field Service Integration Setup'; - ShowFSConnectionSetupDescLbl: Label 'Shows Field Service Integration Setup page where you can disable the connection.'; - CompanyFilterStrengthenedQst: Label 'This will make the synchronization engine process only %1 entities that correspond to the current company. Do you want to continue?', Comment = '%1 - a table caption'; - CompanyFilterStrengthenedFSMsg: Label 'The synchronization will consider only %1 entities whose work order in %3 has an External Project that belongs to company %2.', Comment = '%1 - a table caption; %2 - current company name; %3 - Dynamics 365 service name'; - InsufficientPermissionsTxt: Label 'Insufficient permissions.', Locked = true; - NoProjectUsageLinkTxt: Label 'Unable to find Project Usage Link.', Locked = true; - NoProjectPlanningLineTxt: Label 'Unable to find Project Planning Line.', Locked = true; - MultiCompanySyncEnabledTxt: Label 'Multi-Company Synch Enabled', Locked = true; - FSEntitySynchTxt: Label 'Synching a field service entity.', Locked = true; - - - [EventSubscriber(ObjectType::Table, Database::"CDS Connection Setup", 'OnEnsureConnectionSetupIsDisabled', '', false, false)] - local procedure OnEnsureConnectionSetupIsDisabled() - var - FSConnectionSetup: Record "FS Connection Setup"; - ErrorInfo: ErrorInfo; - begin - if FSConnectionSetup.Get() then - if FSConnectionSetup.IsEnabled() then - if FSConnectionSetup."Server Address" <> TestServerAddressTok then begin - Session.LogMessage('0000MQW', FSConnEnabledTelemetryErr, Verbosity::Warning, DataClassification::CustomerContent, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - ErrorInfo.Message := FSConnEnabledErr; - ErrorInfo.AddNavigationAction(ShowFSConnectionSetupLbl, ShowFSConnectionSetupDescLbl); - ErrorInfo.PageNo(Page::"FS Connection Setup"); - Error(ErrorInfo); - end; - end; - - [EventSubscriber(ObjectType::Table, Database::"Integration Table Mapping", 'OnEnableMultiCompanySynchronization', '', false, false)] - local procedure OnEnableMultiCompanySynchronization(var IntegrationTableMapping: Record "Integration Table Mapping"; var IsHandled: Boolean) - var - FSConnectionSetup: Record "FS Connection Setup"; - CDSCompany: Record "CDS Company"; - FSSetupDefaults: Codeunit "FS Setup Defaults"; - CRMProductName: Codeunit "CRM Product Name"; - IntegrationRecordRef: RecordRef; - CompanyIdFieldRef: FieldRef; - MessageTxt: Text; - begin - if IsHandled then - exit; - - if IntegrationTableMapping.Type <> IntegrationTableMapping.Type::Dataverse then - exit; - - if not FSConnectionSetup.IsEnabled() then - exit; - - if IntegrationTableMapping."Table ID" = Database::"Job Journal Line" then begin - IsHandled := true; - IntegrationRecordRef.Open(IntegrationTableMapping."Integration Table ID"); - - if not CDSIntegrationMgt.FindCompanyIdField(IntegrationRecordRef, CompanyIdFieldRef) then - exit; - - if not CDSIntegrationMgt.GetCDSCompany(CDSCompany) then - exit; - - if GuiAllowed() then - if not Confirm(StrSubstNo(CompanyFilterStrengthenedQst, IntegrationRecordRef.Caption())) then - Error(''); - - IntegrationRecordRef.SetView(IntegrationTableMapping.GetIntegrationTableFilter()); - CompanyIdFieldRef.SetRange(CDSCompany.CompanyId); - IntegrationTableMapping.SetIntegrationTableFilter(FSSetupDefaults.GetTableFilterFromView(IntegrationTableMapping."Integration Table ID", IntegrationRecordRef.Caption(), IntegrationRecordRef.GetView())); - MessageTxt := StrSubstNo(CompanyFilterStrengthenedFSMsg, IntegrationRecordRef.Caption(), CompanyName(), CRMProductName.FSServiceName()); - if IntegrationTableMapping.Modify() then - if GuiAllowed() then - if MessageTxt <> '' then - Message(MessageTxt); - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Rec. Synch. Invoke", 'OnBeforeTransferRecordFields', '', false, false)] - local procedure OnBeforeTransferRecordFields(SourceRecordRef: RecordRef; var DestinationRecordRef: RecordRef) - var - FSConnectionSetup: Record "FS Connection Setup"; - FSProjectTask: Record "FS Project Task"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - CRMIntegrationRecord: Record "CRM Integration Record"; - JobJournalLine: Record "Job Journal Line"; - JobTask: Record "Job Task"; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - case GetSourceDestCode(SourceRecordRef, DestinationRecordRef) of - 'FS Work Order Product-Job Journal Line', - 'FS Work Order Service-Job Journal Line': - begin - if SourceRecordRef.Number = Database::"FS Work Order Product" then begin - SourceRecordRef.SetTable(FSWorkOrderProduct); - FSProjectTask.Get(FSWorkOrderProduct.ProjectTask); - end - else begin - SourceRecordRef.SetTable(FSWorkOrderService); - FSProjectTask.Get(FSWorkOrderService.ProjectTask); - end; - - if not CRMIntegrationRecord.FindByCRMID(FSProjectTask.ProjectTaskId) then - Error(RecordMustBeCoupledErr, FSProjectTask.TableCaption, Format(FSProjectTask.ProjectTaskId), 'Business Central'); - - if not JobTask.GetBySystemId(CRMIntegrationRecord."Integration ID") then - Error(RecordCoupledToDeletedErr, FSProjectTask.TableCaption, Format(FSProjectTask.ProjectTaskId)); - - DestinationRecordRef.SetTable(JobJournalLine); - JobJournalLine."Job No." := JobTask."Job No."; - JobJournalLine."Job Task No." := JobTask."Job Task No."; - DestinationRecordRef.GetTable(JobJournalLine); - end; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Record Synch.", 'OnTransferFieldData', '', false, false)] - local procedure OnTransferFieldData(SourceFieldRef: FieldRef; DestinationFieldRef: FieldRef; var NewValue: Variant; var IsValueFound: Boolean; var NeedsConversion: Boolean) - var - FSConnectionSetup: Record "FS Connection Setup"; - FSWorkOrderService: Record "FS Work Order Service"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSBookableResourceBooking: Record "FS Bookable Resource Booking"; - JobJournalLine: Record "Job Journal Line"; - SourceRecordRef: RecordRef; - DestinationRecordRef: RecordRef; - DurationInHours: Decimal; - DurationInMinutes: Decimal; - Quantity: Decimal; - QuantityToTransferToInvoice: Decimal; - QuantityCurrentlyConsumed: Decimal; - QuantityCurrentlyInvoiced: Decimal; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - if IsValueFound then - exit; - - if SourceFieldRef.Number() = DestinationFieldRef.Number() then - if SourceFieldRef.Record().Number() = DestinationFieldRef.Record().Number() then - exit; - - if SourceFieldRef.Record().Number = Database::"FS Work Order Service" then - case SourceFieldRef.Name() of - FSWorkOrderService.FieldName(Duration), - FSWorkOrderService.FieldName(DurationToBill): - begin - SourceRecordRef := SourceFieldRef.Record(); - SourceRecordRef.SetTable(FSWorkOrderService); - SetCurrentProjectPlanningQuantities(SourceRecordRef, QuantityCurrentlyConsumed, QuantityCurrentlyInvoiced); - DestinationRecordRef := DestinationFieldRef.Record(); - DestinationRecordRef.SetTable(JobJournalLine); - if SourceFieldRef.Name() = FSWorkOrderService.FieldName(Duration) then begin - DurationInMinutes := FSWorkOrderService.Duration; - DurationInHours := (DurationInMinutes / 60); - NewValue := DurationInHours - QuantityCurrentlyConsumed; - end; - if SourceFieldRef.Name() = FSWorkOrderService.FieldName(DurationToBill) then begin - DurationInMinutes := FSWorkOrderService.DurationToBill; - DurationInHours := (DurationInMinutes / 60); - if JobJournalLine."Line Type" in [JobJournalLine."Line Type"::Budget, JobJournalLine."Line Type"::" "] then - NewValue := 0 - else - NewValue := DurationInHours - QuantityCurrentlyInvoiced; - end; - IsValueFound := true; - NeedsConversion := false; - exit; - end; - FSWorkOrderService.FieldName(Description): - begin - SourceRecordRef := SourceFieldRef.Record(); - SourceRecordRef.SetTable(FSWorkOrderService); - DestinationRecordRef := DestinationFieldRef.Record(); - DestinationRecordRef.SetTable(JobJournalLine); - - if JobJournalLine.Type = JobJournalLine.Type::Resource then - if FSBookableResourceBooking.Get(FSWorkOrderService.Booking) then - if SourceFieldRef.Name() = FSWorkOrderService.FieldName(Description) then begin - NewValue := FSBookableResourceBooking.Name; - IsValueFound := true; - NeedsConversion := false; - exit; - end; - - if JobJournalLine.Type = JobJournalLine.Type::Item then - if SourceFieldRef.Name() = FSWorkOrderService.FieldName(Description) then begin - NewValue := FSWorkOrderService.Name; - IsValueFound := true; - NeedsConversion := false; - exit; - end; - end; - end; - - if SourceFieldRef.Record().Number = Database::"FS Work Order Product" then - case SourceFieldRef.Name() of - FSWorkOrderProduct.FieldName(Quantity), - FSWorkOrderProduct.FieldName(QtyToBill): - begin - SourceRecordRef := SourceFieldRef.Record(); - SourceRecordRef.SetTable(FSWorkOrderProduct); - SetCurrentProjectPlanningQuantities(SourceRecordRef, QuantityCurrentlyConsumed, QuantityCurrentlyInvoiced); - if SourceFieldRef.Name() = FSWorkOrderProduct.FieldName(Quantity) then begin - Quantity := FSWorkOrderProduct.Quantity - QuantityCurrentlyConsumed; - NewValue := Quantity; - end; - if SourceFieldRef.Name() = FSWorkOrderProduct.FieldName(QtyToBill) then begin - QuantityToTransferToInvoice := FSWorkOrderProduct.QtyToBill - QuantityCurrentlyInvoiced; - NewValue := QuantityToTransferToInvoice; - end; - IsValueFound := true; - NeedsConversion := false; - exit; - end; - FSWorkOrderProduct.FieldName(Description): - begin - SourceRecordRef := SourceFieldRef.Record(); - SourceRecordRef.SetTable(FSWorkOrderProduct); - - NewValue := FSWorkOrderProduct.Name; - IsValueFound := true; - NeedsConversion := false; - exit; - end; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Rec. Synch. Invoke", 'OnAfterInsertRecord', '', false, false)] - local procedure HandleOnAfterInsertRecord(SourceRecordRef: RecordRef; DestinationRecordRef: RecordRef) - var - FSConnectionSetup: Record "FS Connection Setup"; - JobJournalLine: Record "Job Journal Line"; - BudgetJobJournalLine: Record "Job Journal Line"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - CRMIntegrationRecord: Record "CRM Integration Record"; - SalesInvoiceHeader: Record "Sales Invoice Header"; - JobPlanningLineInvoice: Record "Job Planning Line Invoice"; - JobUsageLink: Record "Job Usage Link"; - SourceDestCode: Text; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - SourceDestCode := GetSourceDestCode(SourceRecordRef, DestinationRecordRef); - - case SourceDestCode of - 'FS Work Order Product-Job Journal Line': - begin - SourceRecordRef.SetTable(FSWorkOrderProduct); - DestinationRecordRef.SetTable(JobJournalLine); - ConditionallyPostJobJournalLine(FSConnectionSetup, FSWorkOrderProduct, JobJournalLine); - end; - 'FS Work Order Service-Job Journal Line': - begin - SourceRecordRef.SetTable(FSWorkOrderService); - DestinationRecordRef.SetTable(JobJournalLine); - BudgetJobJournalLine.ReadIsolation(IsolationLevel::ReadCommitted); - if BudgetJobJournalLine.Get(JobJournalLine."Journal Template Name", JobJournalLine."Journal Batch Name", JobJournalLine."Line No." - BudgetJobJournalLineNoOffset()) then - if BudgetJobJournalLine."Line Type" = BudgetJobJournalLine."Line Type"::Budget then - if not CRMIntegrationRecord.Get(FSWorkOrderService.WorkOrderServiceId, BudgetJobJournalLine.SystemId) then begin - // Budget job journal line is created in the OnBeforeInsertRecord subscriber. We must couple it here. - // If we try to couple it in the OnBeforeInsert subscriber, the synch engine will find it and just update the Integration Id with the other journal line's system id. - // We want to commit the coupling of the budget journal line before we attempt posting, because posting could fail and roll back the coupling of the budget line - CRMIntegrationRecord.InsertRecord(FSWorkOrderService.WorkOrderServiceId, BudgetJobJournalLine.SystemId, Database::"Job Journal Line"); - Commit(); - end; - ConditionallyPostJobJournalLine(FSConnectionSetup, FSWorkOrderService, JobJournalLine); - end; - 'Sales Invoice Header-CRM Invoice': - begin - SourceRecordRef.SetTable(SalesInvoiceHeader); - JobPlanningLineInvoice.ReadIsolation := JobPlanningLineInvoice.ReadIsolation::ReadCommitted; - JobPlanningLineInvoice.SetRange("Document Type", JobPlanningLineInvoice."Document Type"::"Posted Invoice"); - JobPlanningLineInvoice.SetRange("Document No.", SalesInvoiceHeader."No."); - if JobPlanningLineInvoice.FindSet() then - repeat - JobUsageLink.SetRange("Job No.", JobPlanningLineInvoice."Job No."); - JobUsageLink.SetRange("Job Task No.", JobPlanningLineInvoice."Job Task No."); - JobUsageLink.SetRange("Line No.", JobPlanningLineInvoice."Job Planning Line No."); - if JobUsageLink.FindFirst() then - if not IsNullGuid(JobUsageLink."External Id") then - if FSWorkorderProduct.Get(JobUsageLink."External Id") then begin - FSWorkOrderProduct.QuantityInvoiced += JobPlanningLineInvoice."Quantity Transferred"; - if not TryModifyWorkOrderProduct(FSWorkOrderProduct) then begin - Session.LogMessage('0000MMV', UnableToModifyWOPTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - ClearLastError(); - end; - end - else - if FSWorkorderService.Get(JobUsageLink."External Id") then begin - FSWorkorderService.DurationInvoiced += (JobPlanningLineInvoice."Quantity Transferred" * 60); - if not TryModifyWorkOrderService(FSWorkOrderService) then begin - Session.LogMessage('0000MMW', UnableToModifyWOSTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - ClearLastError(); - end; - end; - until JobPlanningLineInvoice.Next() = 0; - end; - end; - end; - - local procedure BudgetJobJournalLineNoOffset(): Integer - begin - // When a Work Order Service that has a coupled bookable resource is synchronized to BC - // Two project journal lines are coupled: one billable line for the service item and one budget line for the resource - // This is the offset number of the second line no. from the first line no. - exit(37); - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Rec. Synch. Invoke", 'OnBeforeIgnoreUnchangedRecordHandled', '', false, false)] - local procedure HandleOnBeforeIgnoreUnchangedRecordHandled(SourceRecordRef: RecordRef; DestinationRecordRef: RecordRef) - var - FSConnectionSetup: Record "FS Connection Setup"; - JobJournalLine: Record "Job Journal Line"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - SourceDestCode: Text; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - SourceDestCode := GetSourceDestCode(SourceRecordRef, DestinationRecordRef); - - case SourceDestCode of - 'FS Work Order Product-Job Journal Line': - begin - SourceRecordRef.SetTable(FSWorkOrderProduct); - DestinationRecordRef.SetTable(JobJournalLine); - ConditionallyPostJobJournalLine(FSConnectionSetup, FSWorkOrderProduct, JobJournalLine); - end; - 'FS Work Order Service-Job Journal Line': - begin - SourceRecordRef.SetTable(FSWorkOrderService); - DestinationRecordRef.SetTable(JobJournalLine); - UpdateCorrelatedJobJournalLine(SourceRecordRef, DestinationRecordRef); - ConditionallyPostJobJournalLine(FSConnectionSetup, FSWorkOrderService, JobJournalLine); - end; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Rec. Synch. Invoke", 'OnBeforeModifyRecord', '', false, false)] - local procedure HandleOnBeforeModifyRecord(IntegrationTableMapping: Record "Integration Table Mapping"; SourceRecordRef: RecordRef; var DestinationRecordRef: RecordRef) - var - FSConnectionSetup: Record "FS Connection Setup"; - SourceDestCode: Text; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - SourceDestCode := GetSourceDestCode(SourceRecordRef, DestinationRecordRef); - - case SourceDestCode of - 'FS Work Order Service-Job Journal Line': - UpdateCorrelatedJobJournalLine(SourceRecordRef, DestinationRecordRef); - end; - end; - - local procedure UpdateCorrelatedJobJournalLine(var SourceRecordRef: RecordRef; var DestinationRecordRef: RecordRef) - var - JobJournalLine: Record "Job Journal Line"; - FSWorkOrderService: Record "FS Work Order Service"; - CorrelatedJobJournalLine: Record "Job Journal Line"; - CRMIntegrationRecord: Record "CRM Integration Record"; - CorrelatedJobJournalLineId: Guid; - QuantityCurrentlyConsumed: Decimal; - QuantityCurrentlyInvoiced: Decimal; - DurationInHours: Decimal; - begin - // Work Order Services with coupled bookable resources couple to two Project Journal Lines: one budget (for the resource) and the other billable (for the item of type service) - // Scheduled delta synch updates only one of them (that is how it is designed, it finds the first coupled one) - // Therefore, we must find the other correlated line and update it here - SourceRecordRef.SetTable(FSWorkOrderService); - DestinationRecordRef.SetTable(JobJournalLine); - SetCurrentProjectPlanningQuantities(SourceRecordRef, QuantityCurrentlyConsumed, QuantityCurrentlyInvoiced); - CRMIntegrationRecord.SetRange("Table ID", Database::"Job Journal Line"); - CRMIntegrationRecord.SetRange("CRM ID", FSWorkOrderService.WorkOrderServiceId); - if CRMIntegrationRecord.FindSet() then - repeat - if CRMIntegrationRecord."Integration ID" <> JobJournalLine.SystemId then - CorrelatedJobJournalLineId := CRMIntegrationRecord."Integration ID"; - until CRMIntegrationRecord.Next() = 0; - - if IsNullGuid(CorrelatedJobJournalLineId) then - exit; - - if not CorrelatedJobJournalLine.GetBySystemId(CorrelatedJobJournalLineId) then - exit; - - DurationInHours := FSWorkOrderService.Duration; - DurationInHours := (DurationInHours / 60); - DurationInHours := DurationInHours - QuantityCurrentlyConsumed; - if (CorrelatedJobJournalLine.Quantity <> DurationInHours) then begin - CorrelatedJobJournalLine.Quantity := DurationInHours; - CorrelatedJobJournalLine.Modify(); - end; - - case CorrelatedJobJournalLine."Line Type" of - CorrelatedJobJournalLine."Line Type"::Budget, - CorrelatedJobJournalLine."Line Type"::" ": - if CorrelatedJobJournalLine."Qty. to Transfer to Invoice" <> 0 then begin - CorrelatedJobJournalLine."Qty. to Transfer to Invoice" := 0; - CorrelatedJobJournalLine.Modify(); - end; - CorrelatedJobJournalLine."Line Type"::Billable, - CorrelatedJobJournalLine."Line Type"::"Both Budget and Billable": - begin - DurationInHours := FSWorkOrderService.DurationToBill; - DurationInHours := (DurationInHours / 60); - DurationInHours := DurationInHours - QuantityCurrentlyInvoiced; - if CorrelatedJobJournalLine."Qty. to Transfer to Invoice" <> DurationInHours then begin - CorrelatedJobJournalLine."Qty. to Transfer to Invoice" := DurationInHours; - CorrelatedJobJournalLine.Modify(); - end; - end; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Rec. Synch. Invoke", 'OnAfterModifyRecord', '', false, false)] - local procedure HandleOnAfterModifyRecord(IntegrationTableMapping: Record "Integration Table Mapping"; var SourceRecordRef: RecordRef; var DestinationRecordRef: RecordRef) - var - FSConnectionSetup: Record "FS Connection Setup"; - JobJournalLine: Record "Job Journal Line"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - SourceDestCode: Text; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - SourceDestCode := GetSourceDestCode(SourceRecordRef, DestinationRecordRef); - - case SourceDestCode of - 'FS Work Order Product-Job Journal Line': - begin - SourceRecordRef.SetTable(FSWorkOrderProduct); - DestinationRecordRef.SetTable(JobJournalLine); - ConditionallyPostJobJournalLine(FSConnectionSetup, FSWorkOrderProduct, JobJournalLine); - end; - 'FS Work Order Service-Job Journal Line': - begin - SourceRecordRef.SetTable(FSWorkOrderService); - DestinationRecordRef.SetTable(JobJournalLine); - ConditionallyPostJobJournalLine(FSConnectionSetup, FSWorkOrderService, JobJournalLine); - end; - end; - end; - - local procedure ConditionallyPostJobJournalLine(var FSConnectionSetup: Record "FS Connection Setup"; var FSWorkOrderProduct: Record "FS Work Order Product"; var JobJournalLine: Record "Job Journal Line") - var - JobJnlPostLine: Codeunit "Job Jnl.-Post Line"; - begin - case FSConnectionSetup."Line Post Rule" of - "FS Work Order Line Post Rule"::LineUsed: - if FSWorkOrderProduct.LineStatus = FSWorkOrderProduct.LineStatus::Used then - JobJnlPostLine.RunWithCheck(JobJournalLine); - "FS Work Order Line Post Rule"::WorkOrderCompleted: - if FSWorkOrderProduct.WorkOrderStatus in [FSWorkOrderProduct.WorkOrderStatus::Completed] then - JobJnlPostLine.RunWithCheck(JobJournalLine); - else - exit; - end; - end; - - local procedure ConditionallyPostJobJournalLine(var FSConnectionSetup: Record "FS Connection Setup"; var FSWorkOrderService: Record "FS Work Order Service"; var JobJournalLine: Record "Job Journal Line") - begin - case FSConnectionSetup."Line Post Rule" of - "FS Work Order Line Post Rule"::LineUsed: - if FSWorkOrderService.LineStatus = FSWorkOrderService.LineStatus::Used then - PostJobJournalLine(FSWorkOrderService, JobJournalLine); - "FS Work Order Line Post Rule"::WorkOrderCompleted: - if FSWorkOrderService.WorkOrderStatus in [FSWorkOrderService.WorkOrderStatus::Completed] then - PostJobJournalLine(FSWorkOrderService, JobJournalLine); - else - exit; - end; - end; - - local procedure PostJobJournalLine(var FSWorkOrderService: Record "FS Work Order Service"; var JobJournalLine: Record "Job Journal Line") - var - CRMIntegrationRecord: Record "CRM Integration Record"; - CorrelatedJobJournalLine: Record "Job Journal Line"; - JobJnlPostLine: Codeunit "Job Jnl.-Post Line"; - JobJournalLineId: Guid; - begin - JobJournalLineId := JobJournalLine.SystemId; - JobJnlPostLine.RunWithCheck(JobJournalLine); - - // Work Order Services couple to two Project Journal Lines (one budget line for the resource and one billable line for the item of type service) - // we must find the other coupled lines and post them as well. - CRMIntegrationRecord.SetRange("Table ID", Database::"Job Journal Line"); - CRMIntegrationRecord.SetRange("CRM ID", FSWorkOrderService.WorkOrderServiceId); - if CRMIntegrationRecord.FindSet() then - repeat - if CRMIntegrationRecord."Integration ID" <> JobJournalLine.SystemId then - if CorrelatedJobJournalLine.GetBySystemId(CRMIntegrationRecord."Integration ID") then - JobJnlPostLine.RunWithCheck(CorrelatedJobJournalLine); - until CRMIntegrationRecord.Next() = 0; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Rec. Synch. Invoke", 'OnBeforeInsertRecord', '', false, false)] - local procedure HandleOnBeforeInsertRecord(SourceRecordRef: RecordRef; DestinationRecordRef: RecordRef) - var - FSProjectTask: Record "FS Project Task"; - Customer: Record Customer; - CRMIntegrationRecord: Record "CRM Integration Record"; - Job: Record Job; - JobTask: Record "Job Task"; - JobJournalLine: Record "Job Journal Line"; - FSConnectionSetup: Record "FS Connection Setup"; - JobJournalBatch: Record "Job Journal Batch"; - JobJournalTemplate: Record "Job Journal Template"; - JobsSetup: Record "Jobs Setup"; - Resource: Record Resource; - FSBookableResource: Record "FS Bookable Resource"; - LastJobJournalLine: Record "Job Journal Line"; - CRMProductName: Codeunit "CRM Product Name"; - NoSeries: Codeunit "No. Series"; - RecID: RecordId; - SourceDestCode: Text; - BillingAccId: Guid; - ServiceAccId: Guid; - Handled: Boolean; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - SourceDestCode := GetSourceDestCode(SourceRecordRef, DestinationRecordRef); - - case SourceDestCode of - 'Service Item-FS Customer Asset': - SetCompanyId(DestinationRecordRef); - 'FS Customer Asset-Service Item': - begin - SetCompanyId(SourceRecordRef); - SourceRecordRef.Modify() - end; - 'Resource-FS Bookable Resource': - begin - SetCompanyId(DestinationRecordRef); - SourceRecordRef.SetTable(Resource); - DestinationRecordRef.SetTable(FSBookableResource); - FSBookableResource.TimeZone := 92; - case Resource.Type of - Resource.Type::Machine: - FSBookableResource.ResourceType := FSBookableResource.ResourceType::Equipment; - Resource.Type::Person: - if Resource."Vendor No." <> '' then - FSBookableResource.ResourceType := FSBookableResource.ResourceType::Account - else - FSBookableResource.ResourceType := FSBookableResource.ResourceType::Generic; - end; - DestinationRecordRef.GetTable(FSBookableResource); - end; - 'FS Bookable Resource-Resource': - begin - SetCompanyId(SourceRecordRef); - SourceRecordRef.SetTable(FSBookableResource); - DestinationRecordRef.SetTable(Resource); - case FSBookableResource.ResourceType of - FSBookableResource.ResourceType::Equipment: - Resource.Type := Resource.Type::Machine; - FSBookableResource.ResourceType::Account, - FSBookableResource.ResourceType::Generic: - Resource.Type := Resource.Type::Person; - end; - Resource."Base Unit of Measure" := FSConnectionSetup."Hour Unit of Measure"; - DestinationRecordRef.GetTable(Resource); - SourceRecordRef.Modify(); - end; - 'Job Task-FS Project Task': - begin - SetCompanyId(DestinationRecordRef); - SourceRecordRef.SetTable(JobTask); - if Job.Get(JobTask."Job No.") then begin - DestinationRecordRef.Field(FSProjectTask.FieldNo(ProjectDescription)).Value := Job.Description; - if Job."Bill-to Customer No." <> '' then - if CRMSynchHelper.FindRecordIDByPK(Database::Customer, Job."Bill-to Customer No.", RecID) then - if CRMIntegrationRecord.FindIDFromRecordID(RecID, BillingAccId) then - DestinationRecordRef.Field(FSProjectTask.FieldNo(BillingAccountId)).Value := BillingAccId - else - Error(RecordMustBeCoupledErr, Customer.TableCaption(), Job."Bill-to Customer No.", CRMProductName.CDSServiceName()); - if Job."Sell-to Customer No." <> '' then - if CRMSynchHelper.FindRecordIDByPK(Database::Customer, Job."Sell-to Customer No.", RecID) then - if CRMIntegrationRecord.FindIDFromRecordID(RecID, ServiceAccId) then - DestinationRecordRef.Field(FSProjectTask.FieldNo(ServiceAccountId)).Value := ServiceAccId - else - Error(RecordMustBeCoupledErr, Customer.TableCaption(), Job."Bill-to Customer No.", CRMProductName.CDSServiceName()) - else - DestinationRecordRef.Field(FSProjectTask.FieldNo(ServiceAccountId)).Value := BillingAccId; - end; - end; - 'FS Work Order Product-Job Journal Line', - 'FS Work Order Service-Job Journal Line': - begin - DestinationRecordRef.SetTable(JobJournalLine); - OnSetUpNewLineOnNewLine(JobJournalLine, JobJournalTemplate, JobJournalBatch, Handled); - if not Handled then begin - FSConnectionSetup.Get(); - JobsSetup.Get(); - Job.Get(JobJournalLine."Job No."); - if not JobJournalTemplate.Get(FSConnectionSetup."Job Journal Template") then - Error(JobJournalIncorrectSetupErr, JobJournalTemplate.TableCaption(), FSConnectionSetup.TableCaption()); - if not JobJournalBatch.Get(FSConnectionSetup."Job Journal Template", FSConnectionSetup."Job Journal Batch") then - Error(JobJournalIncorrectSetupErr, JobJournalBatch.TableCaption(), FSConnectionSetup.TableCaption()); - JobJournalLine."Journal Template Name" := JobJournalTemplate.Name; - JobJournalLine."Journal Batch Name" := JobJournalBatch.Name; - LastJobJournalLine.SetRange("Journal Template Name", JobJournalTemplate.Name); - LastJobJournalLine.SetRange("Journal Batch Name", JobJournalBatch.Name); - if LastJobJournalLine.FindLast() then begin - JobJournalLine."Posting Date" := LastJobJournalLine."Posting Date"; - JobJournalLine."Document Date" := LastJobJournalLine."Posting Date"; - if JobsSetup."Document No. Is Job No." and (LastJobJournalLine."Document No." = '') then - JobJournalLine."Document No." := JobJournalLine."Job No." - else - JobJournalLine."Document No." := LastJobJournalLine."Document No."; - end else begin - JobJournalLine."Posting Date" := WorkDate(); - JobJournalLine."Document Date" := WorkDate(); - if JobsSetup."Document No. Is Job No." then begin - if JobJournalLine."Document No." = '' then - JobJournalLine."Document No." := JobJournalLine."Job No."; - end else - if JobJournalBatch."No. Series" <> '' then begin - Clear(NoSeries); - JobJournalLine."Document No." := NoSeries.GetNextNo(JobJournalBatch."No. Series", JobJournalLine."Posting Date"); - end; - end; - JobJournalLine."Line No." := LastJobJournalLine."Line No." + 10000; - JobJournalLine."Source Code" := JobJournalTemplate."Source Code"; - JobJournalLine."Reason Code" := JobJournalBatch."Reason Code"; - JobJournalLine."Posting No. Series" := JobJournalBatch."Posting No. Series"; - JobJournalLine."Price Calculation Method" := Job.GetPriceCalculationMethod(); - JobJournalLine."Cost Calculation Method" := Job.GetCostCalculationMethod(); - SetJobJournalLineTypesAndNo(FSConnectionSetup, SourceRecordRef, JobJournalLine); - end; - DestinationRecordRef.GetTable(JobJournalLine); - end; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Rec. Synch. Invoke", 'OnDeletionConflictDetectedSetRecordStateAndSynchAction', '', false, false)] - local procedure HandleOnDeletionConflictDetectedSetRecordStateAndSynchAction(var IntegrationTableMapping: Record "Integration Table Mapping"; var SourceRecordRef: RecordRef; var CoupledRecordRef: RecordRef; var RecordState: Option NotFound,Coupled,Decoupled; var SynchAction: Option "None",Insert,Modify,ForceModify,IgnoreUnchanged,Fail,Skip,Delete,Uncouple,Couple; var DeletionConflictHandled: Boolean) - var - FSConnectionSetup: Record "FS Connection Setup"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - CRMIntegrationRecord: Record "CRM Integration Record"; - JobJournalLine: Record "Job Journal Line"; - IntegrationRecSynchInvoke: Codeunit "Integration Rec. Synch. Invoke"; - FSQuantityToBill: Decimal; - FSQuantity: Decimal; - QuantityCurrentlyConsumed: Decimal; - QuantityCurrentlyInvoiced: Decimal; - CRMId: Guid; - begin - if DeletionConflictHandled then - exit; - - if not FSConnectionSetup.IsEnabled() then - exit; - - if IntegrationTableMapping."Table ID" <> Database::"Job Journal Line" then - exit; - - if ((IntegrationTableMapping."Integration Table ID" <> Database::"FS Work Order Service") and (IntegrationTableMapping."Integration Table ID" <> Database::"FS Work Order Product")) then - exit; - - SetCurrentProjectPlanningQuantities(SourceRecordRef, QuantityCurrentlyConsumed, QuantityCurrentlyInvoiced); - case SourceRecordRef.Number() of - Database::"FS Work Order Product": - begin - SourceRecordRef.SetTable(FSWorkOrderProduct); - CRMId := FSWorkOrderProduct.WorkOrderProductId; - FSQuantity := FSWorkOrderProduct.Quantity; - FSQuantityToBill := FSWorkOrderProduct.QtyToBill; - end; - Database::"FS Work Order Service": - begin - SourceRecordRef.SetTable(FSWorkOrderService); - CRMId := FSWorkOrderService.WorkOrderServiceId; - FSQuantity := FSWorkOrderService.Duration; - FSQuantity := (FSQuantity / 60); - FSQuantityToBill := FSWorkOrderService.DurationToBill; - FSQuantityToBill := (FSQuantityToBill / 60); - end; - else - exit; - end; - - // if quantities are equal to the current quantities in Project Planning Lines, then there is no need to create a new Project Journal Line. - // The Project Journal LIne has been deleted because of posting, and that is fine. Just tell the synch engine to do nothing (skip) - if (FSQuantity = QuantityCurrentlyConsumed) and (FSQuantityToBill = QuantityCurrentlyInvoiced) then begin - RecordState := RecordState::NotFound; - SynchAction := SynchAction::Skip; - DeletionConflictHandled := true; - exit; - end; - - // there is a difference between currently consumed/invoiced quantities and Quantity/Quantity to Bill - // we must instruct the synch engine to insert a new Project Journal Line (like the "Restore Record" deletion conflict strategy) - // The OnBeforeInsert subscriber will make sure that the Quantities on the new Project Journal Line take the current quantities in consideration - IntegrationRecSynchInvoke.PrepareNewDestination(IntegrationTableMapping, SourceRecordRef, CoupledRecordRef); - RecordState := RecordState::Coupled; - SynchAction := SynchAction::Insert; - - // delete the broken couplings (those journal lines that are coupled to this CRM Id but they can't be found by SystemId) - CRMIntegrationRecord.SetRange("CRM ID", CRMId); - CRMIntegrationRecord.SetRange("Table ID", Database::"Job Journal Line"); - if CRMIntegrationRecord.FindSet() then - repeat - if not JobJournalLine.GetBySystemId(CRMIntegrationRecord."Integration ID") then - CRMIntegrationRecord.Delete(); - until CRMIntegrationRecord.Next() = 0; - - DeletionConflictHandled := true; - end; - - local procedure SetCurrentProjectPlanningQuantities(var SourceRecordRef: RecordRef; var QuantityCurrentlyConsumed: Decimal; var QuantityCurrentlyInvoiced: Decimal) - var - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - FSBookableResourceBooking: Record "FS Bookable Resource Booking"; - CRMIntegrationRecord: Record "CRM Integration Record"; - JobUsageLink: Record "Job Usage Link"; - JobPlanningLine: Record "Job Planning Line"; - ExternalId: Guid; - ConsideronlyBudgetLineForConsumption: Boolean; - begin - QuantityCurrentlyConsumed := 0; - QuantityCurrentlyInvoiced := 0; - case SourceRecordRef.Number() of - Database::"FS Work Order Product": - begin - SourceRecordRef.SetTable(FSWorkOrderProduct); - ExternalId := FSWorkOrderProduct.WorkOrderProductId; - end; - Database::"FS Work Order Service": - begin - SourceRecordRef.SetTable(FSWorkOrderService); - ExternalId := FSWorkOrderService.WorkOrderServiceId; - if not IsNullGuid(FSWorkOrderService.Booking) then - if FSBookableResourceBooking.Get(FSWorkOrderService.Booking) then - if CRMIntegrationRecord.FindByCRMID(FSBookableResourceBooking.Resource) then - ConsideronlyBudgetLineForConsumption := true; - end; - else - exit; - end; - JobUsageLink.SetRange("External Id", ExternalId); - if JobUsageLink.FindSet() then - repeat - if JobPlanningLine.Get(JobUsageLink."Job No.", JobUsageLink."Job Task No.", JobUsageLink."Line No.") then begin - JobPlanningLine.CalcFields("Qty. Invoiced", "Qty. Transferred to Invoice"); - case ConsideronlyBudgetLineForConsumption of - true: - if JobPlanningLine."Line Type" = JobPlanningLine."Line Type"::Budget then - QuantityCurrentlyConsumed += JobPlanningLine.Quantity; - false: - QuantityCurrentlyConsumed += JobPlanningLine.Quantity; - end; - if JobPlanningLine."Qty. Invoiced" > 0 then - QuantityCurrentlyInvoiced += JobPlanningLine."Qty. Invoiced" - else begin - // try other invoicing quantities - ; - if JobPlanningLine."Qty. Transferred to Invoice" > 0 then - QuantityCurrentlyInvoiced += JobPlanningLine."Qty. Transferred to Invoice" - else - QuantityCurrentlyInvoiced += JobPlanningLine."Qty. to Transfer to Invoice"; - end; - end; - until JobUsageLink.Next() = 0; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Job Link Usage", 'OnAfterApplyUsage', '', false, false)] - local procedure HandleOnAfterApplyUsage(var JobLedgerEntry: Record "Job Ledger Entry"; var JobJournalLine: Record "Job Journal Line") - var - FSConnectionSetup: Record "FS Connection Setup"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - FSBookableResourceBooking: Record "FS Bookable Resource Booking"; - CRMIntegrationRecord: Record "CRM Integration Record"; - JobPlanningLine: Record "Job Planning Line"; - JobUsageLink: Record "Job Usage Link"; - begin - if not FSConnectionSetup.ReadPermission() then begin - Session.LogMessage('0000MMX', InsufficientPermissionsTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - exit; - end; - - if not FSConnectionSetup.IsEnabled() then - exit; - - JobUsageLink.SetRange("Entry No.", JobLedgerEntry."Entry No."); - if not JobUsageLink.FindFirst() then begin - Session.LogMessage('0000MN8', NoProjectUsageLinkTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - exit; - end; - - if not JobPlanningLine.Get(JobUsageLink."Job No.", JobUsageLink."Job Task No.", JobUsageLink."Line No.") then begin - Session.LogMessage('0000MN9', NoProjectPlanningLineTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - exit; - end; - - // set "Qty. to Transfer to Invoice" on Job Planning Line - if JobJournalLine."Qty. to Transfer to Invoice" <> 0 then begin - JobPlanningLine."Qty. to Transfer to Invoice" := JobJournalLine."Qty. to Transfer to Invoice"; - JobPlanningLine.Modify(); - end; - - // in Project Usage Link, save the id of the entity coupled to the job journal line - if not CRMIntegrationRecord.ReadPermission() then begin - Session.LogMessage('0000MMY', InsufficientPermissionsTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - exit; - end; - if not CRMIntegrationRecord.FindByRecordID(JobJournalLine.RecordId()) then - exit; - JobUsageLink."External Id" := CRMIntegrationRecord."CRM ID"; - JobUsageLink.Modify(); - - // write back consumption data to Field Service - if not FSWorkOrderProduct.WritePermission() then - exit; - if not FSWorkOrderService.WritePermission() then - exit; - Codeunit.Run(Codeunit::"CRM Integration Management"); - if FSWorkOrderProduct.Get(CRMIntegrationRecord."CRM ID") then begin - FSWorkOrderProduct.QuantityConsumed += JobPlanningLine.Quantity; - if not TryModifyWorkOrderProduct(FSWorkOrderProduct) then begin - Session.LogMessage('0000MMZ', UnableToModifyWOPTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - ClearLastError(); - end; - exit; - end; - if FSWorkOrderService.Get(CRMIntegrationRecord."CRM ID") then begin - // if the work order service has a bookable resource that is coupled to a Business Central resource - // then we only register consumption for the budget line - // not for the Billable line, as this will lead to double consumption registering - if not IsNullGuid(FSWorkOrderService.Booking) then - if FSBookableResourceBooking.Get(FSWorkOrderService.Booking) then - if CRMIntegrationRecord.FindByCRMID(FSBookableResourceBooking.Resource) then - if JobPlanningLine."Line Type" <> JobPlanningLine."Line Type"::Budget then - exit; - - FSWorkOrderService.DurationConsumed += (60 * JobPlanningLine.Quantity); - if not TryModifyWorkOrderService(FSWorkOrderService) then begin - Session.LogMessage('0000MN0', UnableToModifyWOSTxt, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - ClearLastError(); - end; - end; - end; - - [TryFunction] - local procedure TryModifyWorkOrderProduct(var FSWorkOrderProduct: Record "FS Work Order Product") - begin - FSWorkOrderProduct.Modify(); - end; - - [TryFunction] - local procedure TryModifyWorkOrderService(var FSWorkOrderService: Record "FS Work Order Service") - begin - FSWorkOrderService.Modify(); - end; - - local procedure SetJobJournalLineTypesAndNo(var FSConnectionSetup: Record "FS Connection Setup"; var SourceRecordRef: RecordRef; var JobJournalLine: Record "Job Journal Line") - var - CRMIntegrationRecord: Record "CRM Integration Record"; - FSBookableResourceBooking: Record "FS Bookable Resource Booking"; - FSBookableResource: Record "FS Bookable Resource"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - Resource: Record Resource; - Item: Record Item; - CRMProduct: Record "CRM Product"; - BudgetJobJournalLine: Record "Job Journal Line"; - CRMProductName: Codeunit "CRM Product Name"; - BookableResourceCoupled: Boolean; - BookableResourceCoupledToDeleted: Boolean; - FSQuantity: Decimal; - FSQuantityToBill: Decimal; - QuantityCurrentlyConsumed: Decimal; - QuantityCurrentlyInvoiced: Decimal; - begin - SetCurrentProjectPlanningQuantities(SourceRecordRef, QuantityCurrentlyConsumed, QuantityCurrentlyInvoiced); - case SourceRecordRef.Number of - Database::"FS Work Order Product": - begin - JobJournalLine.Validate(Type, JobJournalLine.Type::Item); - SourceRecordRef.SetTable(FSWorkOrderProduct); - FSQuantity := FSWorkOrderProduct.Quantity; - FSQuantityToBill := FSWorkOrderProduct.QtyToBill; - - if not CRMIntegrationRecord.FindByCRMID(FSWorkOrderProduct.Product) then - Error(MustBeCoupledErr, FSWorkOrderProduct.FieldCaption(Product), Format(FSWorkOrderProduct.Product), Item.TableCaption()); - - if not CRMProduct.Get(FSWorkOrderProduct.Product) then - Error(DoesntExistErr, CRMProduct.TableCaption(), Format(FSWorkOrderProduct.Product), CRMProductName.FSServiceName()); - - if not Item.GetBySystemId(CRMIntegrationRecord."Integration ID") then - Error(CoupledToDeletedErr, FSWorkOrderProduct.FieldCaption(Product), Format(FSWorkOrderProduct.Product), Item.TableCaption()); - - JobJournalLine.Validate("Entry Type", JobJournalLine."Entry Type"::Usage); - if Item.Type = Item.Type::"Non-Inventory" then - JobJournalLine.Validate("Line Type", JobJournalLine."Line Type"::" ") - else - JobJournalLine.Validate("Line Type", JobJournalLine."Line Type"::Billable); - // set Item, but for work order products we must keep its Business Central Unit Cost - JobJournalLine.Validate("No.", Item."No."); - JobJournalLine.Validate("Unit Cost", Item."Unit Cost"); - JobJournalLine.Validate(Quantity, FSQuantity - QuantityCurrentlyConsumed); - JobJournalLine.Validate("Unit Price", Item."Unit Price"); - JobJournalLine.Validate("Qty. to Transfer to Invoice", FSQuantityToBill - QuantityCurrentlyInvoiced); - end; - Database::"FS Work Order Service": - begin - SourceRecordRef.SetTable(FSWorkOrderService); - FSQuantity := FSWorkOrderService.Duration; - FSQuantityToBill := FSWorkOrderService.DurationToBill; - FSQuantity := (FSQuantity / 60); - FSQuantityToBill := (FSQuantityToBill / 60); - - if not CRMProduct.Get(FSWorkOrderService.Service) then - Error(DoesntExistErr, FSWorkOrderService.FieldCaption(Service), Format(FSWorkOrderService.Service), FSConnectionSetup."Server Address"); - - if not CRMIntegrationRecord.FindByCRMID(FSWorkOrderService.Service) then - Error(MustBeCoupledErr, FSWorkOrderService.FieldCaption(Service), CRMProduct.ProductNumber, Item.TableCaption()); - - if not Item.GetBySystemId(CRMIntegrationRecord."Integration ID") then - Error(CoupledToDeletedErr, FSWorkOrderService.FieldCaption(Service), CRMProduct.ProductNumber, Item.TableCaption()); - - if Item.Type = Item.Type::Inventory then - Error(CoupledToNonServiceErr, FSWorkOrderService.FieldCaption(Service), CRMProduct.ProductNumber, Item."No."); - - if Item.Blocked then - Error(CoupledToBlockedItemErr, FSWorkOrderService.FieldCaption(Service), CRMProduct.ProductNumber, Item."No."); - - if Item.Type = Item.Type::Service then - if Item."Base Unit of Measure" <> FSConnectionSetup."Hour Unit of Measure" then - Error(CoupledToItemWithWrongUOMErr, FSWorkOrderService.FieldCaption(Service), CRMProduct.ProductNumber, Item."No.", FSConnectionSetup."Hour Unit of Measure"); - - JobJournalLine.Validate("Entry Type", JobJournalLine."Entry Type"::Usage); - - // if the work order service has a booking with a resource that is coupled to Business Central resource - // in this case, make an extra Budget line for the resource - // the extra line will be coupled in OnAfterInsertRecord subscriber - if FSBookableResourceBooking.Get(FSWorkOrderService.Booking) then begin - Clear(CRMIntegrationRecord); - if CRMIntegrationRecord.FindByCRMID(FSBookableResourceBooking.Resource) then - BookableResourceCoupled := true; - - if not Resource.GetBySystemId(CRMIntegrationRecord."Integration ID") then - BookableResourceCoupledToDeleted := true; - - if not FSBookableResource.Get(FSBookableResourceBooking.Resource) then - BookableResourceCoupledToDeleted := true; - - if Item.Type = Item.Type::Service then - if BookableResourceCoupled then - if not BookableResourceCoupledToDeleted then begin - // insert and couple an additional budget Project Journal Line, for posting cost of the resource who is performing the service - BudgetJobJournalLine.TransferFields(JobJournalLine, true); - BudgetJobJournalLine."Line No." := JobJournalLine."Line No." - BudgetJobJournalLineNoOffset(); - BudgetJobJournalLine."Line Type" := JobJournalLine."Line Type"::Budget; - BudgetJobJournalLine.Validate(Type, JobJournalLine.Type::Resource); - BudgetJobJournalLine.Validate("No.", Resource."No."); - BudgetJobJournalLine.Validate(Description, FSBookableResourceBooking.Name); - BudgetJobJournalLine.Validate("Unit of Measure Code", FSConnectionSetup."Hour Unit of Measure"); - BudgetJobJournalLine.Validate("Unit Cost", Resource."Unit Cost"); - BudgetJobJournalLine.Validate(Quantity, FSQuantity - QuantityCurrentlyConsumed); - BudgetJobJournalLine.Validate("Unit Price", 0); - BudgetJobJournalLine.Validate("Qty. to Transfer to Invoice", 0); - BudgetJobJournalLine.Insert(true); - end; - end; - - if Item.Type = Item.Type::"Non-Inventory" then - JobJournalLine."Line Type" := JobJournalLine."Line Type"::" " - else - JobJournalLine.Validate("Line Type", JobJournalLine."Line Type"::Billable); - JobJournalLine.Validate(Type, JobJournalLine.Type::Item); - // set Item, but must keep its Business Central Unit Cost - JobJournalLine.Validate("No.", Item."No."); - JobJournalLine.Validate(Description, CopyStr(FSWorkOrderService.Name, 1, MaxStrLen(JobJournalLine.Description))); - JobJournalLine.Validate("Unit of Measure Code", Item."Base Unit of Measure"); - JobJournalLine.Validate("Unit Cost", Item."Unit Cost"); - JobJournalLine.Validate(Quantity, FSQuantity - QuantityCurrentlyConsumed); - JobJournalLine.Validate("Unit Price", Item."Unit Price"); - JobJournalLine.Validate("Qty. to Transfer to Invoice", FSQuantityToBill - QuantityCurrentlyInvoiced); - end; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"CDS Integration Mgt.", 'OnHasCompanyIdField', '', false, false)] - local procedure HandleOnHasCompanyIdField(TableId: Integer; var HasField: Boolean) - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - case TableId of - Database::"FS Work Order", - Database::"FS Bookable Resource", - Database::"FS Customer Asset", - Database::"FS Work Order Product", - Database::"FS Work Order Service", - Database::"FS Resource Pay Type", - Database::"FS Project Task", - Database::"FS Warehouse": - HasField := true; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Int. Rec. Uncouple Invoke", 'OnBeforeUncoupleRecord', '', false, false)] - local procedure HandleOnBeforeUncoupleRecord(IntegrationTableMapping: Record "Integration Table Mapping"; var LocalRecordRef: RecordRef; var IntegrationRecordRef: RecordRef) - var - FSConnectionSetup: Record "FS Connection Setup"; - HasField: Boolean; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - CDSIntegrationMgt.OnHasCompanyIdField(IntegrationRecordRef.Number(), HasField); - if not HasField then - exit; - - if IntegrationRecordRef.IsEmpty() then - exit; - - CDSIntegrationMgt.ResetCompanyId(IntegrationRecordRef); - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"CRM Integration Table Synch.", 'OnQueryPostFilterIgnoreRecord', '', false, false)] - local procedure OnQueryPostFilterIgnoreRecord(SourceRecordRef: RecordRef; var IgnoreRecord: Boolean) - var - FSConnectionSetup: Record "FS Connection Setup"; - FSBookableResource: Record "FS Bookable Resource"; - JobTask: Record "Job Task"; - Job: Record Job; - begin - if IgnoreRecord then - exit; - - if FSConnectionSetup.IsEnabled() then - exit; - - case SourceRecordRef.Number() of - Database::"FS Bookable Resource": - begin - SourceRecordRef.SetTable(FSBookableResource); - IgnoreRecord := (FSBookableResource.ResourceType in [FSBookableResource.ResourceType::Contact, FSBookableResource.ResourceType::Crew, FSBookableResource.ResourceType::Facility, FSBookableResource.ResourceType::Pool]); - end; - Database::"Job Task": - begin - SourceRecordRef.SetTable(JobTask); - if not Job.Get(JobTask."Job No.") then begin - IgnoreRecord := true; - exit; - end; - - if Job.Blocked <> Job.Blocked::" " then begin - IgnoreRecord := true; - exit; - end; - - if Job.Status <> Job.Status::Open then begin - IgnoreRecord := true; - exit; - end; - - IgnoreRecord := (not Job."Apply Usage Link"); - end; - end; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Integration Table Synch.", 'OnAfterInitSynchJob', '', true, true)] - local procedure LogTelemetryOnAfterInitSynchJob(ConnectionType: TableConnectionType; IntegrationTableID: Integer) - var - FSConnectionSetup: Record "FS Connection Setup"; - IntegrationTableMapping: Record "Integration Table Mapping"; - FeatureTelemetry: Codeunit "Feature Telemetry"; - IntegrationRecordRef: RecordRef; - TelemetryCategories: Dictionary of [Text, Text]; - IntegrationTableName: Text; - begin - if ConnectionType <> TableConnectionType::CRM then - exit; - - if FSConnectionSetup.IsEnabled() then - exit; - - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - IntegrationTableMapping.SetRange("Multi Company Synch. Enabled", true); - IntegrationTableMapping.SetRange("Table ID", IntegrationTableID); - if not IntegrationTableMapping.IsEmpty() then begin - FeatureTelemetry.LogUptake('0000LCO', 'Dataverse Multi-Company Synch', Enum::"Feature Uptake Status"::Used); - FeatureTelemetry.LogUsage('0000LCQ', 'Dataverse Multi-Company Synch', 'Entity sync'); - Session.LogMessage('0000LCS', MultiCompanySyncEnabledTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - end; - IntegrationTableMapping.SetRange("Table ID"); - IntegrationTableMapping.SetRange("Integration Table ID", IntegrationTableID); - if not IntegrationTableMapping.IsEmpty() then begin - FeatureTelemetry.LogUptake('0000LCP', 'Dataverse Multi-Company Synch', Enum::"Feature Uptake Status"::Used); - FeatureTelemetry.LogUsage('0000LCR', 'Dataverse Multi-Company Synch', 'Entity sync'); - Session.LogMessage('0000LCT', MultiCompanySyncEnabledTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - end; - - TelemetryCategories.Add('Category', CategoryTok); - TelemetryCategories.Add('IntegrationTableID', Format(IntegrationTableID)); - if TryCalculateTableName(IntegrationRecordRef, IntegrationTableID, IntegrationTableName) then - TelemetryCategories.Add('IntegrationTableName', IntegrationTableName); - - if IntegrationTableID in [ - Database::"FS Project Task", - Database::"FS Work Order Product", - Database::"FS Work Order Service", - Database::"FS Customer Asset", - Database::"FS Bookable Resource", - Database::"FS Resource Pay Type", - Database::"FS Warehouse"] then begin - Session.LogMessage('0000M9F', FSEntitySynchTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, TelemetryCategories); - FeatureTelemetry.LogUsage('0000M9E', 'Field Service Integration', 'Entity synch'); - FeatureTelemetry.LogUptake('0000M9D', 'Field Service Integration', Enum::"Feature Uptake Status"::Used); - exit; - end; - end; - - [TryFunction] - local procedure TryCalculateTableName(var IntegrationRecordRef: RecordRef; TableId: Integer; var TableName: Text) - begin - IntegrationRecordRef.Open(TableId); - TableName := IntegrationRecordRef.Name(); - end; - - local procedure SetCompanyId(DestinationRecordRef: RecordRef) - begin - if CDSIntegrationImpl.CheckCompanyIdNoTelemetry(DestinationRecordRef) then - exit; - - CDSIntegrationMgt.SetCompanyId(DestinationRecordRef); - end; - - local procedure GetSourceDestCode(SourceRecordRef: RecordRef; DestinationRecordRef: RecordRef): Text - begin - if (SourceRecordRef.Number() <> 0) and (DestinationRecordRef.Number() <> 0) then - exit(SourceRecordRef.Name() + '-' + DestinationRecordRef.Name()); - exit(''); - end; - - [IntegrationEvent(false, false)] - local procedure OnSetUpNewLineOnNewLine(var JobJournalLine: Record "Job Journal Line"; var JobJournalTemplate: Record "Job Journal Template"; var JobJournalBatch: Record "Job Journal Batch"; var Handled: Boolean); - begin - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntegrationMgt.Codeunit.al b/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntegrationMgt.Codeunit.al deleted file mode 100644 index 10eeca4245..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSIntegrationMgt.Codeunit.al +++ /dev/null @@ -1,217 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Integration.D365Sales; -using System; -using Microsoft.Utilities; - -codeunit 6615 "FS Integration Mgt." -{ - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - OAuthConnectionStringFormatTok: Label 'Url=%1; AccessToken=%2; ProxyVersion=%3; %4', Locked = true; - ConnectionStringFormatTok: Label 'Url=%1; UserName=%2; Password=%3; ProxyVersion=%4; %5', Locked = true; - UserDoesNotExistCRMErr: Label 'There is no user with email address %1 in %2. Enter a valid email address.', Comment = '%1 = User email address, %2 = Dataverse service name'; - MicrosoftDynamicsFSIntegrationTxt: Label 'bcbi_FieldServiceIntegration', Locked = true; - TeamNotFoundErr: Label 'Cannot find the default owning team for the coupled business unit %1 selected on page %2. To continue, you can select another business unit or revert to the default business unit that was created during setup.', Comment = '%1 = business unit name, %2 = setup page caption'; - TeamNotFoundTxt: Label 'The team was not found.', Locked = true; - CategoryTok: Label 'AL Field Service Integration', Locked = true; - RoleNotFoundForBusinessUnitTxt: Label 'Integration role is not found for business unit.', Locked = true; - IntegrationRoleNotFoundErr: Label 'There is no integration role %1 for business unit %2.', Comment = '%1 = role name, %2 = business unit name'; - CannotAssignRoleToTeamTxt: Label 'Cannot assign role to team.', Locked = true; - CannotAssignRoleToTeamErr: Label 'Cannot assign role %3 to team %1 for business unit %2.', Comment = '%1 = team name, %2 = business unit name, %3 = security role name'; - FieldServiceAdministratorProfileIdLbl: label '8d988915-e392-e111-9d8c-000c2959f9b8', Locked = true; - CannotAssignFieldSecurityProfileToUserTelemetryLbl: Label 'Cannot assign field security profile to integration user.', Locked = true; - CannotAssignFieldSecurityProfileToUserQst: Label 'To enable the setup, you must sign in to %1 as administrator and assign the column security profile "Field Service - Administrator" to the Business Central integration user. Do you want to open the Business Central integration user card in %1?', Comment = '%1 - Dataverse environment URL'; - NoPermissionsTxt: Label 'No permissions.', Locked = true; - - [TryFunction] - internal procedure ImportFSSolution(ServerAddress: Text; IntegrationUserEmail: Text; AdminUserEmail: Text; AdminUserPassword: SecretText; AccessToken: SecretText; AdminADDomain: Text; ProxyVersion: Integer; ForceRedeploy: Boolean; ImportSolutionFailed: Boolean) - var - CDSConnectionSetup: Record "CDS Connection Setup"; - CRMRole: Record "CRM Role"; - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - CRMProductName: Codeunit "CRM Product Name"; - PageCDSConnectionSetup: Page "CDS Connection Setup"; - CRMHelper: DotNet CrmHelper; - UserGUID: Guid; - IntegrationRoleGUID: Guid; - FieldSecurityProfileGUID: Guid; - DefaultOwningTeamGUID: Guid; - TempConnectionStringWithPlaceholders: Text; - TempConnectionString: SecretText; - SolutionInstalled: Boolean; - SolutionOutdated: Boolean; - ImportSolution: Boolean; - begin - CRMIntegrationManagement.CheckConnectRequiredFields(ServerAddress, IntegrationUserEmail); - CDSConnectionSetup.Get(); - if not AccessToken.IsEmpty() then begin - TempConnectionStringWithPlaceholders := - StrSubstNo(OAuthConnectionStringFormatTok, ServerAddress, '%1', ProxyVersion, CDSIntegrationImpl.GetAuthenticationTypeToken(CDSConnectionSetup)); - TempConnectionString := SecretStrSubstNo(TempConnectionStringWithPlaceholders, AccessToken); - end - else - if AdminADDomain <> '' then begin - TempConnectionStringWithPlaceholders := StrSubstNo( - ConnectionStringFormatTok, ServerAddress, AdminUserEmail, '%1', ProxyVersion, CDSIntegrationImpl.GetAuthenticationTypeToken(CDSConnectionSetup, AdminADDomain)); - TempConnectionString := SecretStrSubstNo(TempConnectionStringWithPlaceholders, AdminUserPassword); - end - else begin - TempConnectionStringWithPlaceholders := StrSubstNo( - ConnectionStringFormatTok, ServerAddress, AdminUserEmail, '%1', ProxyVersion, CDSIntegrationImpl.GetAuthenticationTypeToken(CDSConnectionSetup)); - TempConnectionString := SecretStrSubstNo(TempConnectionStringWithPlaceholders, AdminUserPassword); - end; - - if CDSConnectionSetup."Authentication Type" = CDSConnectionSetup."Authentication Type"::OAuth then - TempConnectionString := CDSIntegrationImpl.ReplaceUserNamePasswordInConnectionstring(CDSConnectionSetup, AdminUserEmail, AdminUserPassword); - - if not InitializeFSConnection(CRMHelper, TempConnectionString) then - CRMIntegrationManagement.ProcessConnectionFailures(); - - UserGUID := CRMHelper.GetUserId(IntegrationUserEmail); - if IsNullGuid(UserGUID) then - Error(UserDoesNotExistCRMErr, IntegrationUserEmail, CRMProductName.CDSServiceName()); - - SolutionInstalled := CRMHelper.CheckSolutionPresence(MicrosoftDynamicsFSIntegrationTxt); - if SolutionInstalled then - SolutionOutdated := CRMIntegrationManagement.IsSolutionOutdated(TempConnectionStringWithPlaceholders, MicrosoftDynamicsFSIntegrationTxt); - - if ForceRedeploy then - ImportSolution := (not SolutionInstalled) or SolutionOutdated - else - ImportSolution := not SolutionInstalled; - - if ImportSolution then - if not ImportDefaultFSSolution(CRMHelper) then begin - ImportSolutionFailed := true; - CRMIntegrationManagement.ProcessConnectionFailures(); - end; - - IntegrationRoleGUID := CRMHelper.GetRoleId(GetFieldServiceIntegrationRoleID()); - if not CRMHelper.CheckRoleAssignedToUser(UserGUID, IntegrationRoleGUID) then - CRMHelper.AssociateUserWithRole(UserGUID, IntegrationRoleGUID); - - if CDSIntegrationImpl.IsIntegrationEnabled() then begin - CDSIntegrationImpl.RegisterConnection(); - CDSIntegrationImpl.ActivateConnection(); - CDSConnectionSetup.Get(); - DefaultOwningTeamGUID := CDSIntegrationImpl.GetOwningTeamId(CDSConnectionSetup); - if IsNullGuid(DefaultOwningTeamGUID) then begin - Session.LogMessage('0000MWY', TeamNotFoundTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - Error(TeamNotFoundErr, CDSIntegrationImpl.GetDefaultBusinessUnitName(), PageCDSConnectionSetup.Caption); - end; - CRMRole.SetRange(ParentRoleId, IntegrationRoleGUID); - CRMRole.SetRange(BusinessUnitId, CDSIntegrationImpl.GetCoupledBusinessUnitId()); - if not CRMRole.FindFirst() then begin - Session.LogMessage('0000MWZ', RoleNotFoundForBusinessUnitTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - Error(IntegrationRoleNotFoundErr, IntegrationRoleGUID, CDSIntegrationImpl.GetDefaultBusinessUnitName()); - end; - if not CDSIntegrationImpl.AssignTeamRole(CrmHelper, DefaultOwningTeamGUID, CRMRole.RoleId) then begin - Session.LogMessage('0000MX0', CannotAssignRoleToTeamTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - Error(CannotAssignRoleToTeamErr, DefaultOwningTeamGUID, CDSIntegrationImpl.GetDefaultBusinessUnitName(), CRMRole.Name); - end; - if not CDSIntegrationImpl.AssignTeamRole(CrmHelper, DefaultOwningTeamGUID, CRMRole.RoleId) then begin - Session.LogMessage('0000MX1', CannotAssignRoleToTeamTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - Error(CannotAssignRoleToTeamErr, DefaultOwningTeamGUID, CDSIntegrationImpl.GetDefaultBusinessUnitName(), CRMRole.Name); - end; - end; - - FieldSecurityProfileGUID := TextToGuid(FieldServiceAdministratorProfileIdLbl); - if not CRMHelper.CheckFieldSecurityProfileAssignedToUser(UserGUID, FieldSecurityProfileGUID) then - CRMHelper.AssociateUserWithFieldSecurityProfile(UserGUID, FieldSecurityProfileGUID); - - if not CRMHelper.CheckFieldSecurityProfileAssignedToUser(UserGUID, FieldSecurityProfileGUID) then begin - Session.LogMessage('0000MX2', CannotAssignFieldSecurityProfileToUserTelemetryLbl, Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - if Confirm(StrSubstNo(CannotAssignFieldSecurityProfileToUserQst, CDSConnectionSetup."Server Address")) then - CDSIntegrationImpl.ShowIntegrationUser(CDSConnectionSetup); - Error(''); - end - end; - - [TryFunction] - local procedure TryTouchFSSolutionEntities() - var - FSProjectTask: Record "FS Project Task"; - Cnt: Integer; - begin - Cnt := FSProjectTask.Count(); - if Cnt > 0 then - exit; - end; - - internal procedure IsFSSolutionInstalled(): Boolean - begin - if TryTouchFSSolutionEntities() then - exit(true); - - ClearLastError(); - exit(false); - end; - - [TryFunction] - [NonDebuggable] - local procedure InitializeFSConnection(var CRMHelper: DotNet CrmHelper; ConnectionString: SecretText) - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - if ConnectionString.IsEmpty() then begin - FSConnectionSetup.Get(); - CRMHelper := CRMHelper.CrmHelper(FSConnectionSetup.GetConnectionStringWithCredentials().Unwrap()); - end else - CRMHelper := CRMHelper.CrmHelper(ConnectionString.Unwrap()); - if not CRMIntegrationManagement.TestCRMConnection(CRMHelper) then - CRMIntegrationManagement.ProcessConnectionFailures(); - end; - - [TryFunction] - local procedure ImportDefaultFSSolution(var CRMHelper: DotNet CrmHelper) - begin - CRMHelper.ImportDefaultFieldServiceSolution() - end; - - local procedure GetFieldServiceIntegrationRoleID(): Text - begin - exit('c11b4fa8-956b-439d-8b3c-021e8736a78b'); - end; - - local procedure TextToGuid(TextVar: Text): Guid - var - GuidVar: Guid; - begin - if not Evaluate(GuidVar, TextVar) then; - exit(GuidVar); - end; - - [EventSubscriber(ObjectType::Table, Database::"Service Connection", 'OnRegisterServiceConnection', '', false, false)] - local procedure RegisterFSConnectionOnRegisterServiceConnection(var ServiceConnection: Record "Service Connection") - var - FSConnectionSetup: Record "FS Connection Setup"; - RecRef: RecordRef; - begin - if not FSConnectionSetup.Get() then begin - if not FSConnectionSetup.WritePermission() then begin - Session.LogMessage('0000MYK', NoPermissionsTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - exit; - end; - FSConnectionSetup.Init(); - FSConnectionSetup.Insert(); - end; - - RecRef.GetTable(FSConnectionSetup); - ServiceConnection.Status := ServiceConnection.Status::Enabled; - if not FSConnectionSetup."Is Enabled" then - ServiceConnection.Status := ServiceConnection.Status::Disabled - else - if FSConnectionSetup.TestConnection() then - ServiceConnection.Status := ServiceConnection.Status::Connected - else - ServiceConnection.Status := ServiceConnection.Status::Error; - ServiceConnection.InsertServiceConnectionExtended( - ServiceConnection, RecRef.RecordId, FSConnectionSetup.TableCaption(), FSConnectionSetup."Server Address", Page::"FS Connection Setup", Page::"FS Connection Setup Wizard"); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSLookupFSTables.Codeunit.al b/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSLookupFSTables.Codeunit.al deleted file mode 100644 index 85d78bb769..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSLookupFSTables.Codeunit.al +++ /dev/null @@ -1,81 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; - -codeunit 6612 "FS Lookup FS Tables" -{ - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Lookup CRM Tables", 'OnLookupCRMTables', '', false, false)] - local procedure HandleOnLookupCRMTables(CRMTableID: Integer; NAVTableId: Integer; SavedCRMId: Guid; var CRMId: Guid; IntTableFilter: Text; var Handled: Boolean) - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - if Handled then - exit; - - if not FSConnectionSetup.IsEnabled() then - exit; - - case CRMTableID of - Database::"FS Bookable Resource": - if LookupFSBookableResource(SavedCRMId, CRMId, IntTableFilter) then - Handled := true; - Database::"FS Customer Asset": - if LookupFSCustomerAsset(SavedCRMId, CRMId, IntTableFilter) then - Handled := true; - end; - end; - - local procedure LookupFSCustomerAsset(SavedCRMId: Guid; var CRMId: Guid; IntTableFilter: Text): Boolean - var - FSCustomerAsset: Record "FS Customer Asset"; - OriginalFSCustomerAsset: Record "FS Customer Asset"; - FSCustomerAssetList: Page "FS Customer Asset List"; - begin - if not IsNullGuid(CRMId) then begin - if FSCustomerAsset.Get(CRMId) then - FSCustomerAssetList.SetRecord(FSCustomerAsset); - if not IsNullGuid(SavedCRMId) then - if OriginalFSCustomerAsset.Get(SavedCRMId) then - FSCustomerAssetList.SetCurrentlyCoupledFSCustomerAsset(OriginalFSCustomerAsset); - end; - FSCustomerAsset.SetView(IntTableFilter); - FSCustomerAssetList.SetTableView(FSCustomerAsset); - FSCustomerAssetList.LookupMode(true); - Commit(); - if FSCustomerAssetList.RunModal() = Action::LookupOK then begin - FSCustomerAssetList.GetRecord(FSCustomerAsset); - CRMId := FSCustomerAsset.CustomerAssetId; - exit(true); - end; - exit(false); - end; - - local procedure LookupFSBookableResource(SavedCRMId: Guid; var CRMId: Guid; IntTableFilter: Text): Boolean - var - FSBookableResource: Record "FS Bookable Resource"; - OriginalFSBookableResource: Record "FS Bookable Resource"; - FSBookableResourceList: Page "FS Bookable Resource List"; - begin - if not IsNullGuid(CRMId) then begin - if FSBookableResource.Get(CRMId) then - FSBookableResourceList.SetRecord(FSBookableResource); - if not IsNullGuid(SavedCRMId) then - if OriginalFSBookableResource.Get(SavedCRMId) then - FSBookableResourceList.SetCurrentlyCoupledFSBookableResource(OriginalFSBookableResource); - end; - FSBookableResource.SetView(IntTableFilter); - FSBookableResourceList.SetTableView(FSBookableResource); - FSBookableResourceList.LookupMode(true); - Commit(); - if FSBookableResourceList.RunModal() = Action::LookupOK then begin - FSBookableResourceList.GetRecord(FSBookableResource); - CRMId := FSBookableResource.BookableResourceId; - exit(true); - end; - exit(false); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSSetupDefaults.Codeunit.al b/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSSetupDefaults.Codeunit.al deleted file mode 100644 index e8a3142e05..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Codeunits/FSSetupDefaults.Codeunit.al +++ /dev/null @@ -1,774 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Integration.D365Sales; -using Microsoft.Integration.SyncEngine; -using Microsoft.Utilities; -using System.Threading; -using Microsoft.Projects.Project.Job; -using Microsoft.Service.Item; -using Microsoft.Projects.Resources.Resource; -using Microsoft.Projects.Project.Journal; -using System.Environment.Configuration; -using Microsoft.Inventory.Location; - -codeunit 6611 "FS Setup Defaults" -{ - var - CRMProductName: Codeunit "CRM Product Name"; - JobQueueCategoryLbl: Label 'BCI INTEG', Locked = true; - OptionJobQueueCategoryLbl: Label 'BCI OPTION', Locked = true; - CategoryTok: Label 'AL Field Service Integration', Locked = true; - JobQueueEntryNameTok: Label ' %1 - %2 synchronization job.', Comment = '%1 = The Integration Table Name to synchronized (ex. CUSTOMER), %2 = CRM product name'; - IntegrationTablePrefixTok: Label 'Dynamics CRM', Comment = 'Product name', Locked = true; - - internal procedure ResetConfiguration(var FSConnectionSetup: Record "FS Connection Setup") - var - CDSIntegrationMgt: Codeunit "CDS Integration Mgt."; - IsHandled: Boolean; - begin - IsHandled := false; - OnBeforeResetConfiguration(FSConnectionSetup, IsHandled); - if IsHandled then - exit; - - CDSIntegrationMgt.RegisterConnection(); - CDSIntegrationMgt.ActivateConnection(); - - ResetProjectTaskMapping(FSConnectionSetup, 'PROJECTTASK', true); - ResetProjectJournalLineWOProductMapping(FSConnectionSetup, 'PJLINE-WORDERPRODUCT', true); - ResetProjectJournalLineWOServiceMapping(FSConnectionSetup, 'PJLINE-WORDERSERVICE', true); - ResetServiceItemCustomerAssetMapping(FSConnectionSetup, 'SVCITEM-CUSTASSET', true); - ResetResourceBookableResourceMapping(FSConnectionSetup, 'RESOURCE-BOOKABLERSC', true); - ResetLocationMapping(FSConnectionSetup, 'LOCATION', true); - SetCustomIntegrationsTableMappings(FSConnectionSetup); - end; - - internal procedure ResetProjectTaskMapping(var FSConnectionSetup: Record "FS Connection Setup"; IntegrationTableMappingName: Code[20]; ShouldRecreateJobQueueEntry: Boolean) - var - IntegrationTableMapping: Record "Integration Table Mapping"; - IntegrationFieldMapping: Record "Integration Field Mapping"; - JobTask: Record "Job Task"; - FSProjectTask: Record "FS Project Task"; - IsHandled: Boolean; - begin - IsHandled := false; - OnBeforeResetProjectTaskMapping(IntegrationTableMappingName, ShouldRecreateJobQueueEntry, IsHandled); - if IsHandled then - exit; - - JobTask.Reset(); - JobTask.SetRange("Job Task Type", JobTask."Job Task Type"::Posting); - InsertIntegrationTableMapping( - IntegrationTableMapping, IntegrationTableMappingName, - Database::"Job Task", Database::"FS Project Task", - FSProjectTask.FieldNo(ProjectTaskId), FSProjectTask.FieldNo(ModifiedOn), - '', '', false); - - IntegrationTableMapping.SetTableFilter( - GetTableFilterFromView(Database::"Job Task", JobTask.TableCaption(), JobTask.GetView())); - if not ShouldResetServiceItemMapping() then - IntegrationTableMapping."Dependency Filter" := 'CUSTOMER|RESOURCE-BOOKABLERSC' - else - IntegrationTableMapping."Dependency Filter" := 'CUSTOMER|RESOURCE-BOOKABLERSC|SVCITEM-CUSTASSET'; - IntegrationTableMapping.Modify(); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobTask.FieldNo("Job No."), - FSProjectTask.FieldNo(ProjectNumber), - IntegrationFieldMapping.Direction::ToIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobTask.FieldNo("Job Task No."), - FSProjectTask.FieldNo(ProjectTaskNumber), - IntegrationFieldMapping.Direction::ToIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobTask.FieldNo(Description), - FSProjectTask.FieldNo(Description), - IntegrationFieldMapping.Direction::ToIntegrationTable, - '', true, false); - - RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping, 1, ShouldRecreateJobQueueEntry, 5); - end; - - internal procedure ResetProjectJournalLineWOProductMapping(var FSConnectionSetup: Record "FS Connection Setup"; IntegrationTableMappingName: Code[20]; ShouldRecreateJobQueueEntry: Boolean) - var - IntegrationTableMapping: Record "Integration Table Mapping"; - IntegrationFieldMapping: Record "Integration Field Mapping"; - FSWorkOrderProduct: Record "FS Work Order Product"; - JobJournalLine: Record "Job Journal Line"; - CDSCompany: Record "CDS Company"; - CDSIntegrationMgt: Codeunit "CDS Integration Mgt."; - IsHandled: Boolean; - EmptyGuid: Guid; - begin - IsHandled := false; - OnBeforeResetProjectJournalLineWOProductMapping(IntegrationTableMappingName, ShouldRecreateJobQueueEntry, IsHandled); - if IsHandled then - exit; - - FSWorkOrderProduct.Reset(); - FSWorkOrderProduct.SetRange(StateCode, FSWorkOrderProduct.StateCode::Active); - FSWorkOrderProduct.SetFilter(ProjectTask, '<>' + Format(EmptyGuid)); - case FSConnectionSetup."Line Synch. Rule" of - "FS Work Order Line Synch. Rule"::LineUsed: - FSWorkOrderProduct.SetRange(LineStatus, FSWorkOrderProduct.LineStatus::Used); - "FS Work Order Line Synch. Rule"::WorkOrderCompleted: - FSWorkOrderProduct.SetFilter(WorkOrderStatus, Format(FSWorkOrderProduct.WorkOrderStatus::Completed) + '|' + Format(FSWorkOrderProduct.WorkOrderStatus::Posted)); - end; - FSWorkOrderProduct.SetFilter(ProjectTask, '<>' + Format(EmptyGuid)); - if CDSIntegrationMgt.GetCDSCompany(CDSCompany) then - FSWorkOrderProduct.SetRange(CompanyId, CDSCompany.CompanyId); - - InsertIntegrationTableMapping( - IntegrationTableMapping, IntegrationTableMappingName, - Database::"Job Journal Line", Database::"FS Work Order Product", - FSWorkOrderProduct.FieldNo(WorkOrderProductId), FSWorkOrderProduct.FieldNo(ModifiedOn), - '', '', false); - - IntegrationTableMapping.SetIntegrationTableFilter( - GetTableFilterFromView(Database::"FS Work Order Product", FSWorkOrderProduct.TableCaption(), FSWorkOrderProduct.GetView())); - IntegrationTableMapping."Dependency Filter" := 'CUSTOMER|ITEM-PRODUCT'; - IntegrationTableMapping.Modify(); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo(Description), - FSWorkOrderProduct.FieldNo(Name), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo("External Document No."), - FSWorkOrderProduct.FieldNo(WorkOrderName), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo(Quantity), - FSWorkOrderProduct.FieldNo(Quantity), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo("Qty. to Transfer to Invoice"), - FSWorkOrderProduct.FieldNo(QtyToBill), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo("Currency Code"), - FSWorkOrderProduct.FieldNo(TransactionCurrencyId), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo("Location Code"), - FSWorkOrderProduct.FieldNo(WarehouseId), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - OnAfterResetProjectJournalLineWOProductMapping(IntegrationTableMappingName); - - RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping, 1, ShouldRecreateJobQueueEntry, 5); - end; - - internal procedure ResetProjectJournalLineWOServiceMapping(var FSConnectionSetup: Record "FS Connection Setup"; IntegrationTableMappingName: Code[20]; ShouldRecreateJobQueueEntry: Boolean) - var - IntegrationTableMapping: Record "Integration Table Mapping"; - IntegrationFieldMapping: Record "Integration Field Mapping"; - FSWorkOrderService: Record "FS Work Order Service"; - JobJournalLine: Record "Job Journal Line"; - CDSCompany: Record "CDS Company"; - CDSIntegrationMgt: Codeunit "CDS Integration Mgt."; - IsHandled: Boolean; - EmptyGuid: Guid; - begin - IsHandled := false; - OnBeforeResetProjectJournalLineWOServiceMapping(IntegrationTableMappingName, ShouldRecreateJobQueueEntry, IsHandled); - if IsHandled then - exit; - - FSWorkOrderService.Reset(); - FSWorkOrderService.SetRange(StateCode, FSWorkOrderService.StateCode::Active); - FSWorkOrderService.SetFilter(ProjectTask, '<>' + Format(EmptyGuid)); - case FSConnectionSetup."Line Synch. Rule" of - "FS Work Order Line Synch. Rule"::LineUsed: - FSWorkOrderService.SetRange(LineStatus, FSWorkOrderService.LineStatus::Used); - "FS Work Order Line Synch. Rule"::WorkOrderCompleted: - FSWorkOrderService.SetFilter(WorkOrderStatus, Format(FSWorkOrderService.WorkOrderStatus::Completed) + '|' + Format(FSWorkOrderService.WorkOrderStatus::Posted)); - end; - if CDSIntegrationMgt.GetCDSCompany(CDSCompany) then - FSWorkOrderService.SetRange(CompanyId, CDSCompany.CompanyId); - InsertIntegrationTableMapping( - IntegrationTableMapping, IntegrationTableMappingName, - Database::"Job Journal Line", Database::"FS Work Order Service", - FSWorkOrderService.FieldNo(WorkOrderServiceId), FSWorkOrderService.FieldNo(ModifiedOn), - '', '', false); - - IntegrationTableMapping.SetIntegrationTableFilter( - GetTableFilterFromView(Database::"FS Work Order Service", FSWorkOrderService.TableCaption(), FSWorkOrderService.GetView())); - - IntegrationTableMapping."Dependency Filter" := 'CUSTOMER|ITEM-PRODUCT|RESOURCE-BOOKABLERSC'; - IntegrationTableMapping.Modify(); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo(Description), - FSWorkOrderService.FieldNo(Name), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo("External Document No."), - FSWorkOrderService.FieldNo(WorkOrderName), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo(Quantity), - FSWorkOrderService.FieldNo(Duration), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo("Qty. to Transfer to Invoice"), - FSWorkOrderService.FieldNo(DurationToBill), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - JobJournalLine.FieldNo("Currency Code"), - FSWorkOrderService.FieldNo(TransactionCurrencyId), - IntegrationFieldMapping.Direction::FromIntegrationTable, - '', true, false); - - OnAfterResetProjectJournalLineWOServiceMapping(IntegrationTableMappingName); - - RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping, 1, ShouldRecreateJobQueueEntry, 5); - end; - - internal procedure ResetResourceBookableResourceMapping(var FSConnectionSetup: Record "FS Connection Setup"; IntegrationTableMappingName: Code[20]; ShouldRecreateJobQueueEntry: Boolean) - var - IntegrationTableMapping: Record "Integration Table Mapping"; - IntegrationFieldMapping: Record "Integration Field Mapping"; - FSBookableResource: Record "FS Bookable Resource"; - Resource: Record Resource; - CDSCompany: Record "CDS Company"; - CDSIntegrationMgt: Codeunit "CDS Integration Mgt."; - IsHandled: Boolean; - EmptyGuid: Guid; - begin - IsHandled := false; - OnBeforeResetResourceBookableResourceMapping(IntegrationTableMappingName, ShouldRecreateJobQueueEntry, IsHandled); - if IsHandled then - exit; - - Resource.SetRange(Blocked, false); - Resource.SetRange("Use Time Sheet", false); - Resource.SetRange("Base Unit of Measure", FSConnectionSetup."Hour Unit of Measure"); - - FSBookableResource.Reset(); - FSBookableResource.SetRange(StateCode, FSBookableResource.StateCode::Active); - FSBookableResource.SetFilter(ResourceType, Format(FSBookableResource.ResourceType::Generic) + '|' + Format(FSBookableResource.ResourceType::Account) + '|' + Format(FSBookableResource.ResourceType::Equipment)); - if CDSIntegrationMgt.GetCDSCompany(CDSCompany) then - FSBookableResource.SetFilter(CompanyId, CDSCompany.CompanyId + '|' + Format(EmptyGuid)); - InsertIntegrationTableMapping( - IntegrationTableMapping, IntegrationTableMappingName, - Database::Resource, Database::"FS Bookable Resource", - FSBookableResource.FieldNo(BookableResourceId), FSBookableResource.FieldNo(ModifiedOn), - '', '', true); - - IntegrationTableMapping.SetTableFilter( - GetTableFilterFromView(Database::Resource, Resource.TableCaption(), Resource.GetView())); - IntegrationTableMapping.SetIntegrationTableFilter( - GetTableFilterFromView(Database::"FS Bookable Resource", FSBookableResource.TableCaption(), FSBookableResource.GetView())); - IntegrationTableMapping."Dependency Filter" := 'CUSTOMER|ITEM-PRODUCT'; - IntegrationTableMapping.Modify(); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - Resource.FieldNo(Name), - FSBookableResource.FieldNo(Name), - IntegrationFieldMapping.Direction::Bidirectional, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - Resource.FieldNo("Vendor No."), - FSBookableResource.FieldNo(AccountId), - IntegrationFieldMapping.Direction::Bidirectional, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - Resource.FieldNo("Unit Cost"), - FSBookableResource.FieldNo(HourlyRate), - IntegrationFieldMapping.Direction::Bidirectional, - '', true, false); - - OnAfterResetResourceBookableResourceMapping(IntegrationTableMappingName); - - RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping, 1, ShouldRecreateJobQueueEntry, 5); - end; - - internal procedure ResetServiceItemCustomerAssetMapping(var FSConnectionSetup: Record "FS Connection Setup"; IntegrationTableMappingName: Code[20]; ShouldRecreateJobQueueEntry: Boolean) - var - IntegrationTableMapping: Record "Integration Table Mapping"; - IntegrationFieldMapping: Record "Integration Field Mapping"; - FSCustomerAsset: Record "FS Customer Asset"; - ServiceItem: Record "Service Item"; - CDSCompany: Record "CDS Company"; - CDSIntegrationMgt: Codeunit "CDS Integration Mgt."; - EmptyGuid: Guid; - IsHandled: Boolean; - begin - if not ShouldResetServiceItemMapping() then begin - Session.LogMessage('0000MMQ', 'The current company is not eligible to synchronize service items.', Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - exit; - end; - - IsHandled := false; - OnBeforeResetServiceItemCustomerAssetMapping(IntegrationTableMappingName, ShouldRecreateJobQueueEntry, IsHandled); - if IsHandled then - exit; - - FSCustomerAsset.Reset(); - FSCustomerAsset.SetRange(StateCode, FSCustomerAsset.StateCode::Active); - if CDSIntegrationMgt.GetCDSCompany(CDSCompany) then - FSCustomerAsset.SetFilter(CompanyId, CDSCompany.CompanyId + '|' + EmptyGuid); - - ServiceItem.Reset(); - ServiceItem.SetRange(Blocked, ServiceItem.Blocked::" "); - - InsertIntegrationTableMapping( - IntegrationTableMapping, IntegrationTableMappingName, - Database::"Service Item", Database::"FS Customer Asset", - FSCustomerAsset.FieldNo(CustomerAssetId), FSCustomerAsset.FieldNo(ModifiedOn), - '', '', true); - - IntegrationTableMapping.SetIntegrationTableFilter( - GetTableFilterFromView(Database::"FS Customer Asset", FSCustomerAsset.TableCaption(), FSCustomerAsset.GetView())); - IntegrationTableMapping.SetTableFilter( - GetTableFilterFromView(Database::"Service Item", ServiceItem.TableCaption(), ServiceItem.GetView())); - IntegrationTableMapping."Dependency Filter" := 'CUSTOMER|ITEM-PRODUCT'; - IntegrationTableMapping.Modify(); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - ServiceItem.FieldNo(Description), - FSCustomerAsset.FieldNo(Name), - IntegrationFieldMapping.Direction::Bidirectional, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - ServiceItem.FieldNo("Customer No."), - FSCustomerAsset.FieldNo(Account), - IntegrationFieldMapping.Direction::Bidirectional, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - ServiceItem.FieldNo("Item No."), - FSCustomerAsset.FieldNo(Product), - IntegrationFieldMapping.Direction::Bidirectional, - '', true, false); - - OnAfterResetServiceItemCustomerAssetMapping(IntegrationTableMappingName); - - RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping, 1, ShouldRecreateJobQueueEntry, 5); - end; - - internal procedure ResetLocationMapping(var FSConnectionSetup: Record "FS Connection Setup"; IntegrationTableMappingName: Code[20]; ShouldRecreateJobQueueEntry: Boolean) - var - IntegrationTableMapping: Record "Integration Table Mapping"; - IntegrationFieldMapping: Record "Integration Field Mapping"; - Location: Record Location; - FSWarehouse: Record "FS Warehouse"; - begin - Location.SetRange("Use As In-Transit", false); - Location.SetFilter("Job Consump. Whse. Handling", '''' + Format(Location."Job Consump. Whse. Handling"::"No Warehouse Handling") + '''|''' + - Format(Location."Job Consump. Whse. Handling"::"Warehouse Pick (optional)") + '''|''' + - Format(Location."Job Consump. Whse. Handling"::"Inventory Pick") + ''''); - Location.SetFilter("Asm. Consump. Whse. Handling", '''' + Format(Location."Asm. Consump. Whse. Handling"::"No Warehouse Handling") + '''|''' + - Format(Location."Asm. Consump. Whse. Handling"::"Warehouse Pick (optional)") + '''|''' + - Format(Location."Asm. Consump. Whse. Handling"::"Inventory Movement") + ''''); - - InsertIntegrationTableMapping( - IntegrationTableMapping, IntegrationTableMappingName, - Database::Location, Database::"FS Warehouse", - FSWarehouse.FieldNo(WarehouseId), FSWarehouse.FieldNo(ModifiedOn), - '', '', false); - - IntegrationTableMapping.SetTableFilter( - GetTableFilterFromView(Database::Location, Location.TableCaption(), Location.GetView())); - IntegrationTableMapping.Modify(); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - Location.FieldNo(Code), - FSWarehouse.FieldNo(Name), - IntegrationFieldMapping.Direction::ToIntegrationTable, - '', true, false); - - InsertIntegrationFieldMapping( - IntegrationTableMappingName, - Location.FieldNo(Name), - FSWarehouse.FieldNo(Description), - IntegrationFieldMapping.Direction::ToIntegrationTable, - '', true, false); - - RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping, 1, ShouldRecreateJobQueueEntry, 5); - end; - - local procedure ShouldResetServiceItemMapping(): Boolean - var - ApplicationAreaMgmtFacade: Codeunit "Application Area Mgmt. Facade"; - begin - exit(ApplicationAreaMgmtFacade.IsPremiumExperienceEnabled()); - end; - - local procedure InsertIntegrationTableMapping(var IntegrationTableMapping: Record "Integration Table Mapping"; MappingName: Code[20]; TableNo: Integer; IntegrationTableNo: Integer; IntegrationTableUIDFieldNo: Integer; IntegrationTableModifiedFieldNo: Integer; TableConfigTemplateCode: Code[10]; IntegrationTableConfigTemplateCode: Code[10]; SynchOnlyCoupledRecords: Boolean) - var - CDSIntegrationMgt: Codeunit "CDS Integration Mgt."; - UncoupleCodeunitId: Integer; - Direction: Integer; - begin - Direction := GetDefaultDirection(TableNo); - if Direction in [IntegrationTableMapping.Direction::ToIntegrationTable, IntegrationTableMapping.Direction::Bidirectional] then - if CDSIntegrationMgt.HasCompanyIdField(IntegrationTableNo) then - UncoupleCodeunitId := Codeunit::"CDS Int. Table Uncouple"; - IntegrationTableMapping.CreateRecord(MappingName, TableNo, IntegrationTableNo, IntegrationTableUIDFieldNo, - IntegrationTableModifiedFieldNo, TableConfigTemplateCode, IntegrationTableConfigTemplateCode, - SynchOnlyCoupledRecords, Direction, IntegrationTablePrefixTok, - Codeunit::"CRM Integration Table Synch.", UncoupleCodeunitId); - end; - - local procedure InsertIntegrationFieldMapping(IntegrationTableMappingName: Code[20]; TableFieldNo: Integer; IntegrationTableFieldNo: Integer; SynchDirection: Option; ConstValue: Text; ValidateField: Boolean; ValidateIntegrationTableField: Boolean) - var - IntegrationFieldMapping: Record "Integration Field Mapping"; - begin - IntegrationFieldMapping.CreateRecord(IntegrationTableMappingName, TableFieldNo, IntegrationTableFieldNo, SynchDirection, - ConstValue, ValidateField, ValidateIntegrationTableField); - end; - - internal procedure CreateJobQueueEntry(IntegrationTableMapping: Record "Integration Table Mapping"; ServiceName: Text): Boolean - begin - exit(CreateJobQueueEntry(IntegrationTableMapping, Codeunit::"Integration Synch. Job Runner", StrSubstNo(JobQueueEntryNameTok, IntegrationTableMapping.GetTempDescription(), ServiceName))); - end; - - local procedure CreateJobQueueEntry(var IntegrationTableMapping: Record "Integration Table Mapping"; JobCodeunitId: Integer; JobDescription: Text): Boolean - var - JobQueueEntry: Record "Job Queue Entry"; - StartTime: DateTime; - begin - StartTime := CurrentDateTime() + 1000; - JobQueueEntry.SetRange("Object Type to Run", JobQueueEntry."Object Type to Run"::Codeunit); - JobQueueEntry.SetRange("Object ID to Run", JobCodeunitId); - JobQueueEntry.SetRange("Record ID to Process", IntegrationTableMapping.RecordId()); - JobQueueEntry.SetRange("Job Queue Category Code", JobQueueCategoryLbl); - JobQueueEntry.SetRange(Status, JobQueueEntry.Status::Ready); - JobQueueEntry.SetFilter("Earliest Start Date/Time", '<=%1', StartTime); - if not JobQueueEntry.IsEmpty() then begin - JobQueueEntry.DeleteTasks(); - Commit(); - end; - - JobQueueEntry.Init(); - Clear(JobQueueEntry.ID); // "Job Queue - Enqueue" is to define new ID - JobQueueEntry."Earliest Start Date/Time" := StartTime; - JobQueueEntry."Object Type to Run" := JobQueueEntry."Object Type to Run"::Codeunit; - JobQueueEntry."Object ID to Run" := JobCodeunitId; - JobQueueEntry."Record ID to Process" := IntegrationTableMapping.RecordId(); - JobQueueEntry."Run in User Session" := false; - JobQueueEntry."Notify On Success" := false; - JobQueueEntry."Maximum No. of Attempts to Run" := 2; - JobQueueEntry."Job Queue Category Code" := JobQueueCategoryLbl; - JobQueueEntry.Status := JobQueueEntry.Status::Ready; - JobQueueEntry."Rerun Delay (sec.)" := 30; - JobQueueEntry.Description := CopyStr(JobDescription, 1, MaxStrLen(JobQueueEntry.Description)); - OnCreateJobQueueEntryOnBeforeJobQueueEnqueue(JobQueueEntry, IntegrationTableMapping, JobCodeunitId, JobDescription); - exit(Codeunit.Run(Codeunit::"Job Queue - Enqueue", JobQueueEntry)) - end; - - local procedure RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping: Record "Integration Table Mapping"; IntervalInMinutes: Integer; ShouldRecreateJobQueueEntry: Boolean; InactivityTimeoutPeriod: Integer) - begin - RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping, IntervalInMinutes, ShouldRecreateJobQueueEntry, InactivityTimeoutPeriod, CRMProductName.CDSServiceName(), false); - end; - - internal procedure RecreateJobQueueEntryFromIntTableMapping(IntegrationTableMapping: Record "Integration Table Mapping"; IntervalInMinutes: Integer; ShouldRecreateJobQueueEntry: Boolean; InactivityTimeoutPeriod: Integer; ServiceName: Text; IsOption: Boolean) - var - JobQueueEntry: Record "Job Queue Entry"; - begin - JobQueueEntry.SetRange("Object Type to Run", JobQueueEntry."Object Type to Run"::Codeunit); - JobQueueEntry.SetRange("Object ID to Run", Codeunit::"Integration Synch. Job Runner"); - JobQueueEntry.SetRange("Record ID to Process", IntegrationTableMapping.RecordId()); - JobQueueEntry.DeleteTasks(); - - JobQueueEntry.InitRecurringJob(IntervalInMinutes); - JobQueueEntry."Object Type to Run" := JobQueueEntry."Object Type to Run"::Codeunit; - JobQueueEntry."Object ID to Run" := Codeunit::"Integration Synch. Job Runner"; - JobQueueEntry."Record ID to Process" := IntegrationTableMapping.RecordId(); - JobQueueEntry."Run in User Session" := false; - JobQueueEntry.Description := - CopyStr(StrSubstNo(JobQueueEntryNameTok, IntegrationTableMapping.Name, ServiceName), 1, MaxStrLen(JobQueueEntry.Description)); - JobQueueEntry."Maximum No. of Attempts to Run" := 10; - JobQueueEntry.Status := JobQueueEntry.Status::Ready; - JobQueueEntry."Rerun Delay (sec.)" := 30; - JobQueueEntry."Inactivity Timeout Period" := InactivityTimeoutPeriod; - if IsOption then - JobQueueEntry."Job Queue Category Code" := OptionJobQueueCategoryLbl; - if ShouldRecreateJobQueueEntry then - Codeunit.Run(Codeunit::"Job Queue - Enqueue", JobQueueEntry) - else - JobQueueEntry.Insert(true); - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"CRM Setup Defaults", 'OnGetCDSTableNo', '', false, false)] - local procedure ReturnProxyTableNoOnGetCDSTableNo(BCTableNo: Integer; var CDSTableNo: Integer; var Handled: Boolean) - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - if Handled then - exit; - - if not FSConnectionSetup.IsEnabled() then - exit; - - case BCTableNo of - Database::Resource: - CDSTableNo := Database::"FS Bookable Resource"; - Database::"Service Item": - CDSTableNo := Database::"FS Customer Asset"; - Database::"Job Task": - CDSTableNo := Database::"FS Project Task"; - Database::Location: - CDSTableNo := Database::"FS Warehouse"; - end; - - if CDSTableNo <> 0 then - Handled := true; - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"CRM Setup Defaults", 'OnAddEntityTableMapping', '', false, false)] - local procedure AddProxyTablesOnAddEntityTableMapping(var TempNameValueBuffer: Record "Name/Value Buffer" temporary) - var - FSConnectionSetup: Record "FS Connection Setup"; - CRMSetupDefaults: Codeunit "CRM Setup Defaults"; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - CRMSetupDefaults.AddEntityTableMapping('bookableresource', Database::Resource, TempNameValueBuffer); - CRMSetupDefaults.AddEntityTableMapping('bookableresource', Database::"FS Bookable Resource", TempNameValueBuffer); - - CRMSetupDefaults.AddEntityTableMapping('msdyn_customerasset', Database::"Service Item", TempNameValueBuffer); - CRMSetupDefaults.AddEntityTableMapping('msdyn_customerasset', Database::"FS Customer Asset", TempNameValueBuffer); - - CRMSetupDefaults.AddEntityTableMapping('bcbi_projecttask', Database::"Job Task", TempNameValueBuffer); - CRMSetupDefaults.AddEntityTableMapping('bcbi_projecttask', Database::"FS Project Task", TempNameValueBuffer); - - CRMSetupDefaults.AddEntityTableMapping('msdyn_workorderproduct', Database::"Job Journal Line", TempNameValueBuffer); - CRMSetupDefaults.AddEntityTableMapping('msdyn_workorderproduct', Database::"FS Work Order Product", TempNameValueBuffer); - - CRMSetupDefaults.AddEntityTableMapping('msdyn_workorderservice', Database::"Job Journal Line", TempNameValueBuffer); - CRMSetupDefaults.AddEntityTableMapping('msdyn_workorderservice', Database::"FS Work Order Service", TempNameValueBuffer); - - CRMSetupDefaults.AddEntityTableMapping('msdyn_warehouse', Database::Location, TempNameValueBuffer); - CRMSetupDefaults.AddEntityTableMapping('msdyn_warehouse', Database::"FS Warehouse", TempNameValueBuffer); - - TempNameValueBuffer.SetRange(Name, 'product'); - TempNameValueBuffer.SetRange(Value, Format(Database::Resource)); - if TempNameValueBuffer.FindFirst() then - TempNameValueBuffer.Delete(); - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"CRM Setup Defaults", 'OnBeforeGetNameFieldNo', '', false, false)] - local procedure ReturnNameFieldNoOnBeforeGetNameFieldNo(TableId: Integer; var FieldNo: Integer) - var - FSConnectionSetup: Record "FS Connection Setup"; - ServiceItem: Record "Service Item"; - FSCustomerAsset: Record "FS Customer Asset"; - FSBookableResource: Record "FS Bookable Resource"; - FSWorkOrderProduct: Record "FS Work Order Product"; - FSWorkOrderService: Record "FS Work Order Service"; - FSProjectTask: Record "FS Project Task"; - JobTask: Record "Job Task"; - JobJournalLine: Record "Job Journal Line"; - Location: Record Location; - FSWarehouse: Record "FS Warehouse"; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - case TableId of - Database::"Service Item": - FieldNo := ServiceItem.FieldNo("No."); - Database::"FS Customer Asset": - FieldNo := FSCustomerAsset.FieldNo(Name); - Database::"FS Bookable Resource": - FieldNo := FSBookableResource.FieldNo(Name); - Database::"FS Work Order Product": - FieldNo := FSWorkOrderProduct.FieldNo(Name); - Database::"FS Work Order Service": - FieldNo := FSWorkOrderService.FieldNo(Name); - Database::"FS Project Task": - FieldNo := FSProjectTask.FieldNo(ProjectNumber); - Database::"Job Task": - FieldNo := JobTask.FieldNo("Job Task No."); - Database::"Job Journal Line": - FieldNo := JobJournalLine.FieldNo(Description); - Database::"FS Warehouse": - FieldNo := FSWarehouse.FieldNo(Name); - Database::Location: - FieldNo := Location.FieldNo(Code); - end; - end; - - procedure GetDefaultDirection(NAVTableID: Integer): Integer - var - IntegrationTableMapping: Record "Integration Table Mapping"; - begin - case NAVTableID of - Database::"Service Item", - Database::"Work Type", - Database::"Resource": - exit(IntegrationTableMapping.Direction::Bidirectional); - Database::"Job Task", - Database::Location: - exit(IntegrationTableMapping.Direction::ToIntegrationTable); - Database::"Job Journal Line": - exit(IntegrationTableMapping.Direction::FromIntegrationTable); - end; - end; - - internal procedure GetTableFilterFromView(TableID: Integer; Caption: Text; View: Text): Text - var - FilterBuilder: FilterPageBuilder; - begin - FilterBuilder.AddTable(Caption, TableID); - FilterBuilder.SetView(Caption, View); - exit(FilterBuilder.GetView(Caption, false)); - end; - - internal procedure SetCustomIntegrationsTableMappings(FSConnectionSetup: Record "FS Connection Setup") - begin - OnAfterResetConfiguration(FSConnectionSetup); - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"CRM Integration Management", 'OnBeforeHandleCustomIntegrationTableMapping', '', false, false)] - local procedure OnBeforeHandleCustomIntegrationTableMapping(var IsHandled: Boolean; IntegrationTableMappingName: Code[20]) - var - FSConnectionSetup: Record "FS Connection Setup"; - IntegrationTableMapping: Record "Integration Table Mapping"; - begin - if not FSConnectionSetup.IsEnabled() then - exit; - - if not IntegrationTableMapping.Get(IntegrationTableMappingName) then - exit; - - case IntegrationTableMapping."Table ID" of - Database::Resource: - if IntegrationTableMapping."Integration Table ID" = Database::"FS Bookable Resource" then - ResetResourceBookableResourceMapping(FSConnectionSetup, IntegrationTableMapping.Name, true); - Database::"Job Task": - if IntegrationTableMapping."Integration Table ID" = Database::"FS Project Task" then - ResetProjectTaskMapping(FSConnectionSetup, IntegrationTableMapping.Name, true); - Database::"Service Item": - if IntegrationTableMapping."Integration Table ID" = Database::"FS Customer Asset" then - ResetServiceItemCustomerAssetMapping(FSConnectionSetup, IntegrationTableMapping.Name, true); - Database::"Job Journal Line": - begin - if IntegrationTableMapping."Integration Table ID" = Database::"FS Work Order Product" then - ResetProjectJournalLineWOProductMapping(FSConnectionSetup, IntegrationTableMapping.Name, true); - if IntegrationTableMapping."Integration Table ID" = Database::"FS Work Order Service" then - ResetProjectJournalLineWOServiceMapping(FSConnectionSetup, IntegrationTableMapping.Name, true); - end; - Database::Location: - if IntegrationTableMapping."Integration Table ID" = Database::"FS Warehouse" then - ResetLocationMapping(FSConnectionSetup, IntegrationTableMapping.Name, true); - end; - end; - - [IntegrationEvent(false, false)] - local procedure OnAfterResetConfiguration(FSConnectionSetup: Record "FS Connection Setup") - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnAfterResetProjectJournalLineWOProductMapping(IntegrationTableMappingName: Code[20]) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnAfterResetProjectJournalLineWOServiceMapping(IntegrationTableMappingName: Code[20]) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnAfterResetServiceItemCustomerAssetMapping(IntegrationTableMappingName: Code[20]) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnAfterResetResourceBookableResourceMapping(var IntegrationTableMappingName: Code[20]) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnBeforeResetConfiguration(var FSConnectionSetup: Record "FS Connection Setup"; var IsHandled: Boolean) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnBeforeResetProjectJournalLineWOProductMapping(var IntegrationTableMappingName: Code[20]; var ShouldRecreateJobQueueEntry: Boolean; var IsHandled: Boolean) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnBeforeResetProjectJournalLineWOServiceMapping(var IntegrationTableMappingName: Code[20]; var ShouldRecreateJobQueueEntry: Boolean; var IsHandled: Boolean) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnBeforeResetServiceItemCustomerAssetMapping(var IntegrationTableMappingName: Code[20]; var ShouldRecreateJobQueueEntry: Boolean; var IsHandled: Boolean) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnBeforeResetProjectTaskMapping(var IntegrationTableMappingName: Code[20]; var ShouldRecreateJobQueueEntry: Boolean; var IsHandled: Boolean) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnBeforeResetResourceBookableResourceMapping(var IntegrationTableMappingName: Code[20]; var ShouldRecreateJobQueueEntry: Boolean; var IsHandled: Boolean) - begin - end; - - [IntegrationEvent(false, false)] - local procedure OnCreateJobQueueEntryOnBeforeJobQueueEnqueue(var JobQueueEntry: Record "Job Queue Entry"; var IntegrationTableMapping: Record "Integration Table Mapping"; JobCodeunitId: Integer; JobDescription: Text) - begin - end; -} - diff --git a/Apps/W1/FieldServiceIntegration/app/src/Enums/FSWorkOrderLinePostRule.Enum.al b/Apps/W1/FieldServiceIntegration/app/src/Enums/FSWorkOrderLinePostRule.Enum.al deleted file mode 100644 index 1cb0f201c7..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Enums/FSWorkOrderLinePostRule.Enum.al +++ /dev/null @@ -1,24 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -enum 6610 "FS Work Order Line Post Rule" -{ - AssignmentCompatibility = true; - Extensible = true; - - value(0; Never) - { - Caption = 'I will post project journal lines manually'; - } - value(1; LineUsed) - { - Caption = 'when work order product/service is used'; - } - value(2; WorkOrderCompleted) - { - Caption = 'when work order is completed'; - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobJournal.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobJournal.PageExt.al deleted file mode 100644 index b8ba6ef73a..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobJournal.PageExt.al +++ /dev/null @@ -1,33 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Projects.Project.Journal; - -pageextension 6618 "FS Job Journal" extends "Job Journal" -{ - layout - { - addafter("Remaining Qty.") - { - field(FSQuantityToTransferToInvoice; Rec."Qty. to Transfer to Invoice") - { - ApplicationArea = Jobs; - Visible = FSRelatedFieldsVisible; - ToolTip = 'Specifies the number of units of the project journal''s No. field, that is, either the resource, item, or G/L account number, that applies. If you later change the value in the No. field, the quantity does not change on the journal line.'; - } - } - } - - var - FSRelatedFieldsVisible: Boolean; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - FSRelatedFieldsVisible := FSConnectionSetup.IsEnabled(); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobProjectManagerRC.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobProjectManagerRC.PageExt.al deleted file mode 100644 index 29bb00e0fa..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobProjectManagerRC.PageExt.al +++ /dev/null @@ -1,42 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Projects.RoleCenters; -using Microsoft.Integration.Dataverse; - -pageextension 6615 "FS Job Project Manager RC" extends "Job Project Manager RC" -{ - actions - { - addlast(sections) - { - group(GroupFS) - { - Caption = 'Dynamics 365 Field Service'; - - action("Bookable Resources - Field Service") - { - ApplicationArea = Suite; - Caption = 'Bookable Resources - Dynamics 365 Field Service'; - RunObject = Page "FS Bookable Resource List"; - } - action("Customer Assets -Field Service") - { - ApplicationArea = Suite; - Caption = 'Customer Assets - Dynamics 365 Field Service'; - RunObject = Page "FS Customer Asset List"; - } - action("Records Skipped For Synch.") - { - ApplicationArea = Suite; - Caption = 'Coupled Data Synchronization Errors'; - RunObject = Page "CRM Skipped Records"; - AccessByPermission = TableData "CRM Integration Record" = R; - } - } - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskCard.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskCard.PageExt.al deleted file mode 100644 index 1952251e9f..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskCard.PageExt.al +++ /dev/null @@ -1,167 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Projects.Project.Job; -using Microsoft.Integration.Dataverse; - -pageextension 6610 "FS Job Task Card" extends "Job Task Card" -{ - actions - { - addafter("&Job Task") - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Enabled = FSActionGroupEnabled; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Project Task in Field Service'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Field Service.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.UpdateOneNow(Rec.RecordId); - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Field Service record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Field Service product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - CRMCouplingManagement.RemoveCoupling(Rec.RecordId); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the job task table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - - addlast(Promoted) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - } - } - } - - - var - FSActionGroupEnabled: Boolean; - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - - trigger OnAfterGetCurrRecord() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - if CRMIntegrationEnabled then - CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId); - end; - - trigger OnOpenPage() - var - Job: Record Job; - FSConnectionSetup: Record "FS Connection Setup"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - ApplyUsageLink: Boolean; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - - if Job.Get(Rec."Job No.") then - ApplyUsageLink := Job."Apply Usage Link"; - - FSActionGroupEnabled := FSIntegrationEnabled and (Rec."Job Task Type" = Rec."Job Task Type"::Posting) and ApplyUsageLink; - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskLines.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskLines.PageExt.al deleted file mode 100644 index fd98640764..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskLines.PageExt.al +++ /dev/null @@ -1,179 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Projects.Project.Job; -using Microsoft.Integration.Dataverse; - -pageextension 6611 "FS Job Task Lines" extends "Job Task Lines" -{ - layout - { - addlast(Control1) - { - field("Coupled to FS"; Rec."Coupled to FS") - { - ApplicationArea = Jobs; - Visible = FSIntegrationEnabled; - ToolTip = 'Specifies if the project task is coupled to an entity in Field Service.'; - } - } - } - - actions - { - addafter("&Job Task") - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Enabled = FSActionGroupEnabled; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Project Task in Field Service'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Field Service.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.UpdateOneNow(Rec.RecordId); - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Field Service record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Field Service product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - CRMCouplingManagement.RemoveCoupling(Rec.RecordId); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the job task line table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - - addlast(Promoted) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - } - } - } - - - var - FSActionGroupEnabled: Boolean; - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - - trigger OnAfterGetCurrRecord() - var - Job: Record Job; - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - if FSIntegrationEnabled then - CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId); - - if not Job.Get(Rec."Job No.") then - FSActionGroupEnabled := false - else - FSActionGroupEnabled := FSIntegrationEnabled and (Rec."Job Task Type" = Rec."Job Task Type"::Posting) and Job."Apply Usage Link"; - end; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskList.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskList.PageExt.al deleted file mode 100644 index 826a9ce239..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSJobTaskList.PageExt.al +++ /dev/null @@ -1,179 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Projects.Project.Job; -using Microsoft.Integration.Dataverse; - -pageextension 6617 "FS Job Task List" extends "Job Task List" -{ - layout - { - addlast(Control1) - { - field("Coupled to FS"; Rec."Coupled to FS") - { - ApplicationArea = Jobs; - Visible = FSIntegrationEnabled; - ToolTip = 'Specifies if the project task is coupled to an entity in Field Service.'; - } - } - } - - actions - { - addafter("&Job Task") - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Enabled = FSActionGroupEnabled; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Project Task in Field Service'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Field Service.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.UpdateOneNow(Rec.RecordId); - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Field Service record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Field Service product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - CRMCouplingManagement.RemoveCoupling(Rec.RecordId); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the job task table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - - addlast(Promoted) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - } - } - } - - - var - FSActionGroupEnabled: Boolean; - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - - trigger OnAfterGetCurrRecord() - var - Job: Record Job; - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - if FSIntegrationEnabled then - CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId); - - if not Job.Get(Rec."Job No.") then - FSActionGroupEnabled := false - else - FSActionGroupEnabled := FSIntegrationEnabled and (Rec."Job Task Type" = Rec."Job Task Type"::Posting) and Job."Apply Usage Link"; - end; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSProjectManagerActivities.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSProjectManagerActivities.PageExt.al deleted file mode 100644 index feac69a9fd..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSProjectManagerActivities.PageExt.al +++ /dev/null @@ -1,51 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Projects.RoleCenters; -using Microsoft.Integration.SyncEngine; -using Microsoft.Integration.Dataverse; - -pageextension 6616 "FS Project Manager Activities" extends "Project Manager Activities" -{ - layout - { - addlast(content) - { - cuegroup("FS Data Integration") - { - Caption = 'Data Integration'; - Visible = ShowFSIntegrationCues; - - field("FS Integration Errors"; Rec."FS Int. Errors") - { - ApplicationArea = Basic, Suite; - Caption = 'Integration Errors'; - DrillDownPageID = "Integration Synch. Error List"; - ToolTip = 'Specifies the number of errors related to data integration with Dynamics 365 Field Service.'; - Visible = ShowFSIntegrationCues; - } - field("FS Coupled Data Synch Errors"; Rec."Coupled Data Sync Errors") - { - ApplicationArea = RelationshipMgmt; - Caption = 'Coupled Data Synchronization Errors'; - DrillDownPageID = "CRM Skipped Records"; - ToolTip = 'Specifies the number of errors that occurred in the latest synchronization of coupled data between Business Central and Dynamics 365 Field Service.'; - Visible = ShowFSIntegrationCues; - } - } - } - } - - var - ShowFSIntegrationCues: Boolean; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - ShowFSIntegrationCues := FSConnectionSetup.IsEnabled(); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceCard.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceCard.PageExt.al deleted file mode 100644 index 6183b5345f..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceCard.PageExt.al +++ /dev/null @@ -1,213 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Projects.Resources.Resource; -using Microsoft.Integration.SyncEngine; - -pageextension 6612 "FS Resource Card" extends "Resource Card" -{ - actions - { - modify(ActionGroupCRM) - { - Visible = CRMIntegrationEnabled and (not FSIntegrationEnabled); - } - addafter(ActionGroupCRM) - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Visible = FSIntegrationEnabled; - Enabled = (BlockedFilterApplied and (not Rec.Blocked)) or not BlockedFilterApplied; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Bookable Resource'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service bookable resource.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Sales.'; - - trigger OnAction() - var - Resource: Record Resource; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - ResourceRecordRef: RecordRef; - begin - CurrPage.SetSelectionFilter(Resource); - Resource.Next(); - - if Resource.Count = 1 then - CRMIntegrationManagement.UpdateOneNow(Resource.RecordId) - else begin - ResourceRecordRef.GetTable(Resource); - CRMIntegrationManagement.UpdateMultipleNow(ResourceRecordRef); - end - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Sales record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Sales product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(FSMatchBasedCoupling) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Match-Based Coupling'; - Image = CoupledItem; - ToolTip = 'Couple resources to products in Dynamics 365 Sales based on matching criteria.'; - - trigger OnAction() - var - Resource: Record Resource; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - RecRef: RecordRef; - begin - CurrPage.SetSelectionFilter(Resource); - RecRef.GetTable(Resource); - CRMIntegrationManagement.MatchBasedCoupling(RecRef); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Sales product.'; - - trigger OnAction() - var - Resource: Record Resource; - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - RecRef: RecordRef; - begin - CurrPage.SetSelectionFilter(Resource); - RecRef.GetTable(Resource); - CRMCouplingManagement.RemoveCoupling(RecRef); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the resource table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - addafter(Category_Synchronize) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - actionref(FSMatchBasedCoupling_Promoted; FSMatchBasedCoupling) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - actionref("Unit Group_FS_Promoted"; "Unit Group") - { - } - } - } - } - - var - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - BlockedFilterApplied: Boolean; - - trigger OnAfterGetCurrRecord() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - if FSIntegrationEnabled then - CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId); - end; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - IntegrationTableMapping: Record "Integration Table Mapping"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then begin - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - if FSIntegrationEnabled then begin - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - IntegrationTableMapping.SetRange("Table ID", Database::Resource); - IntegrationTableMapping.SetRange("Integration Table ID", Database::"FS Bookable Resource"); - if IntegrationTableMapping.FindFirst() then - BlockedFilterApplied := IntegrationTableMapping.GetTableFilter().Contains('Field38=1(0)'); - end; - end; - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceList.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceList.PageExt.al deleted file mode 100644 index b63f802a2b..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSResourceList.PageExt.al +++ /dev/null @@ -1,210 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Projects.Resources.Resource; -using Microsoft.Integration.SyncEngine; - -pageextension 6613 "FS Resource List" extends "Resource List" -{ - actions - { - modify(ActionGroupCRM) - { - Visible = CRMIntegrationEnabled and (not FSIntegrationEnabled); - } - addafter(ActionGroupCRM) - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Visible = FSIntegrationEnabled; - Enabled = (BlockedFilterApplied and (not Rec.Blocked)) or not BlockedFilterApplied; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Bookable Resource'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service bookable resource.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Sales.'; - - trigger OnAction() - var - Resource: Record Resource; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - ResourceRecordRef: RecordRef; - begin - CurrPage.SetSelectionFilter(Resource); - Resource.Next(); - - if Resource.Count = 1 then - CRMIntegrationManagement.UpdateOneNow(Resource.RecordId) - else begin - ResourceRecordRef.GetTable(Resource); - CRMIntegrationManagement.UpdateMultipleNow(ResourceRecordRef); - end - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Sales record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Sales product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(FSMatchBasedCoupling) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Match-Based Coupling'; - Image = CoupledItem; - ToolTip = 'Couple resources to products in Dynamics 365 Sales based on matching criteria.'; - - trigger OnAction() - var - Resource: Record Resource; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - RecRef: RecordRef; - begin - CurrPage.SetSelectionFilter(Resource); - RecRef.GetTable(Resource); - CRMIntegrationManagement.MatchBasedCoupling(RecRef); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Sales product.'; - - trigger OnAction() - var - Resource: Record Resource; - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - RecRef: RecordRef; - begin - CurrPage.SetSelectionFilter(Resource); - RecRef.GetTable(Resource); - CRMCouplingManagement.RemoveCoupling(RecRef); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the resource table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - addafter(Category_Synchronize) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - actionref(FSMatchBasedCoupling_Promoted; FSMatchBasedCoupling) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - } - } - } - - var - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - BlockedFilterApplied: Boolean; - - trigger OnAfterGetCurrRecord() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - if FSIntegrationEnabled then - CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId); - end; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - IntegrationTableMapping: Record "Integration Table Mapping"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then begin - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - if FSIntegrationEnabled then begin - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - IntegrationTableMapping.SetRange("Table ID", Database::Resource); - IntegrationTableMapping.SetRange("Integration Table ID", Database::"FS Bookable Resource"); - if IntegrationTableMapping.FindFirst() then - BlockedFilterApplied := IntegrationTableMapping.GetTableFilter().Contains('Field38=1(0)'); - end; - end; - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceConnections.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceConnections.PageExt.al deleted file mode 100644 index 7dfbafccbd..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceConnections.PageExt.al +++ /dev/null @@ -1,17 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Utilities; - -pageextension 6622 "FS Service Connections" extends "Service Connections" -{ - trigger OnOpenPage() - var - FSAssistedSetupSubscriber: Codeunit "FS Assisted Setup Subscriber"; - begin - FSAssistedSetupSubscriber.RegisterAssistedSetup(); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemCard.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemCard.PageExt.al deleted file mode 100644 index 8d0c5e5f3d..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemCard.PageExt.al +++ /dev/null @@ -1,186 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Service.Item; -using Microsoft.Integration.Dataverse; -using Microsoft.Integration.SyncEngine; - -pageextension 6619 "FS Service Item Card" extends "Service Item Card" -{ - actions - { - addafter(History) - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Visible = FSIntegrationEnabled; - Enabled = (BlockedFilterApplied and (Rec.Blocked = Rec.Blocked::" ")) or not BlockedFilterApplied; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Customer Asset'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service customer asset.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Field Service.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.UpdateOneNow(Rec.RecordId); - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Field Service record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Field Service product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(FSMatchBasedCoupling) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Match-Based Coupling'; - Image = CoupledItem; - ToolTip = 'Couple resources to products in Field Service based on matching criteria.'; - - trigger OnAction() - var - ServiceItem: Record "Service Item"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - RecRef: RecordRef; - begin - CurrPage.SetSelectionFilter(ServiceItem); - RecRef.GetTable(ServiceItem); - CRMIntegrationManagement.MatchBasedCoupling(RecRef); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - CRMCouplingManagement.RemoveCoupling(Rec.RecordId); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the service item table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - - addlast(Promoted) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - actionref(FSMatchBasedCoupling_Promoted; FSMatchBasedCoupling) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - } - } - } - - - var - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - BlockedFilterApplied: Boolean; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - IntegrationTableMapping: Record "Integration Table Mapping"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then begin - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - if FSIntegrationEnabled then begin - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - IntegrationTableMapping.SetRange("Table ID", Database::"Service Item"); - IntegrationTableMapping.SetRange("Integration Table ID", Database::"FS Customer Asset"); - if IntegrationTableMapping.FindFirst() then - BlockedFilterApplied := IntegrationTableMapping.GetTableFilter().Contains('Field40=1(0)'); - end; - end; - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemList.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemList.PageExt.al deleted file mode 100644 index 6c57650a99..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceItemList.PageExt.al +++ /dev/null @@ -1,200 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Service.Item; -using Microsoft.Integration.Dataverse; -using Microsoft.Integration.SyncEngine; - -pageextension 6620 "FS Service Item List" extends "Service Item List" -{ - layout - { - addlast(Control1) - { - field("Coupled to FS"; Rec."Coupled to FS") - { - ApplicationArea = All; - Visible = FSIntegrationEnabled; - ToolTip = 'Specifies if the project task is coupled to an entity in Field Service.'; - } - } - } - - - actions - { - addafter(History) - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Visible = FSIntegrationEnabled; - Enabled = (BlockedFilterApplied and (Rec.Blocked = Rec.Blocked::" ")) or not BlockedFilterApplied; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Customer Asset'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service customer asset.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Field Service.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.UpdateOneNow(Rec.RecordId); - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Field Service record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Field Service product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(FSMatchBasedCoupling) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Match-Based Coupling'; - Image = CoupledItem; - ToolTip = 'Couple resources to products in Field Service based on matching criteria.'; - - trigger OnAction() - var - ServiceItem: Record "Service Item"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - RecRef: RecordRef; - begin - CurrPage.SetSelectionFilter(ServiceItem); - RecRef.GetTable(ServiceItem); - CRMIntegrationManagement.MatchBasedCoupling(RecRef); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - CRMCouplingManagement.RemoveCoupling(Rec.RecordId); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the service item table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - - addlast(Promoted) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - actionref(FSMatchBasedCoupling_Promoted; FSMatchBasedCoupling) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - } - } - } - - - var - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - BlockedFilterApplied: Boolean; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - IntegrationTableMapping: Record "Integration Table Mapping"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then begin - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - if FSIntegrationEnabled then begin - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - IntegrationTableMapping.SetRange("Table ID", Database::"Service Item"); - IntegrationTableMapping.SetRange("Integration Table ID", Database::"FS Customer Asset"); - if IntegrationTableMapping.FindFirst() then - BlockedFilterApplied := IntegrationTableMapping.GetTableFilter().Contains('Field40=1(0)'); - end; - end; - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceManagerRC.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceManagerRC.PageExt.al deleted file mode 100644 index 0fde612097..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Page Extensions/FSServiceManagerRC.PageExt.al +++ /dev/null @@ -1,42 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Service.RoleCenters; - -pageextension 6621 "FS Service Manager RC" extends "Service Manager Role Center" -{ - actions - { - addlast(sections) - { - group(GroupFS) - { - Caption = 'Dynamics 365 Field Service'; - - action("Bookable Resources - Field Service") - { - ApplicationArea = Suite; - Caption = 'Bookable Resources - Dynamics 365 Field Service'; - RunObject = Page "FS Bookable Resource List"; - } - action("Customer Assets - Field Service") - { - ApplicationArea = Suite; - Caption = 'Customer Assets - Dynamics 365 Field Service'; - RunObject = Page "FS Customer Asset List"; - } - action("Records Skipped For Synch.") - { - ApplicationArea = Suite; - Caption = 'Coupled Data Synchronization Errors'; - RunObject = Page "CRM Skipped Records"; - AccessByPermission = TableData "CRM Integration Record" = R; - } - } - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSBookableResourceList.Page.al b/Apps/W1/FieldServiceIntegration/app/src/Pages/FSBookableResourceList.Page.al deleted file mode 100644 index 829ac65f20..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSBookableResourceList.Page.al +++ /dev/null @@ -1,166 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Projects.Resources.Resource; - -page 6610 "FS Bookable Resource List" -{ - ApplicationArea = Suite; - Caption = 'Bookable Resources - Dynamics 365 Field Service'; - Editable = false; - PageType = List; - SourceTable = "FS Bookable Resource"; - SourceTableView = sorting(Name); - UsageCategory = Lists; - - layout - { - area(content) - { - repeater(Control2) - { - ShowCaption = false; - field(Name; Rec.Name) - { - ApplicationArea = Suite; - Caption = 'Name'; - StyleExpr = FirstColumnStyle; - ToolTip = 'Specifies the bookable resource name.'; - } - field(HourlyRate; Rec.HourlyRate) - { - ApplicationArea = Suite; - Caption = 'Hourly Rate'; - ToolTip = 'Specifies the bookable resource hourly rate.'; - } - field(ResourceType; Rec.ResourceType) - { - ApplicationArea = Suite; - Caption = 'Resource Type'; - ToolTip = 'Specifies the bookable resource type.'; - } - field(Coupled; Coupled) - { - ApplicationArea = Suite; - Caption = 'Coupled'; - ToolTip = 'Specifies if the Dynamics 365 Field Service record is coupled to Business Central.'; - } - } - } - } - - actions - { - area(processing) - { - action(CreateFromFS) - { - ApplicationArea = Suite; - Caption = 'Create in Business Central'; - Image = NewResource; - ToolTip = 'Generate the entity from the Field Service bookable resource.'; - - trigger OnAction() - var - FSBookableResource: Record "FS Bookable Resource"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CurrPage.SetSelectionFilter(FSBookableResource); - CRMIntegrationManagement.CreateNewRecordsFromSelectedCRMRecords(FSBookableResource); - end; - } - action(ShowOnlyUncoupled) - { - ApplicationArea = Suite; - Caption = 'Hide Coupled Records'; - Image = FilterLines; - ToolTip = 'Do not show coupled records.'; - - trigger OnAction() - begin - Rec.MarkedOnly(true); - end; - } - action(ShowAll) - { - ApplicationArea = Suite; - Caption = 'Show Coupled Records'; - Image = ClearFilter; - ToolTip = 'Show coupled records.'; - - trigger OnAction() - begin - Rec.MarkedOnly(false); - end; - } - } - area(Promoted) - { - group(Category_Process) - { - Caption = 'Process'; - - actionref(CreateFromFS_Promoted; CreateFromFS) - { - } - actionref(ShowOnlyUncoupled_Promoted; ShowOnlyUncoupled) - { - } - actionref(ShowAll_Promoted; ShowAll) - { - } - } - } - } - - trigger OnAfterGetRecord() - var - CRMIntegrationRecord: Record "CRM Integration Record"; - RecordID: RecordID; - begin - if CRMIntegrationRecord.FindRecordIDFromID(Rec.BookableResourceId, Database::Resource, RecordID) then - if CurrentlyCoupledFSBookableResource.BookableResourceId = Rec.BookableResourceId then begin - Coupled := 'Current'; - FirstColumnStyle := 'Strong'; - Rec.Mark(true); - end else begin - Coupled := 'Yes'; - FirstColumnStyle := 'Subordinate'; - Rec.Mark(false); - end - else begin - Coupled := 'No'; - FirstColumnStyle := 'None'; - Rec.Mark(true); - end; - end; - - trigger OnInit() - begin - Codeunit.Run(Codeunit::"CRM Integration Management"); - end; - - trigger OnOpenPage() - var - LookupCRMTables: Codeunit "Lookup CRM Tables"; - begin - Rec.FilterGroup(4); - Rec.SetView(LookupCRMTables.GetIntegrationTableMappingView(Database::"FS Bookable Resource")); - Rec.FilterGroup(0); - end; - - var - CurrentlyCoupledFSBookableResource: Record "FS Bookable Resource"; - Coupled: Text; - FirstColumnStyle: Text; - - procedure SetCurrentlyCoupledFSBookableResource(FSBookableResource: Record "FS Bookable Resource") - begin - CurrentlyCoupledFSBookableResource := FSBookableResource; - end; -} - diff --git a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetup.Page.al b/Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetup.Page.al deleted file mode 100644 index ce744c8f99..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetup.Page.al +++ /dev/null @@ -1,505 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Integration.SyncEngine; -using System.Environment.Configuration; -using System.Telemetry; -using System.Threading; -using Microsoft.Integration.D365Sales; -using Microsoft.Projects.Project.Journal; - -page 6612 "FS Connection Setup" -{ - AccessByPermission = TableData "FS Connection Setup" = IM; - ApplicationArea = Suite; - Caption = 'Dynamics 365 Field Service Integration Setup'; - DeleteAllowed = false; - InsertAllowed = false; - LinksAllowed = false; - ShowFilter = false; - SourceTable = "FS Connection Setup"; - UsageCategory = Administration; - AdditionalSearchTerms = 'Dynamics 365 Field Service Connection Setup'; - - layout - { - area(content) - { - group(NAVToFS) - { - Caption = 'Connection from Dynamics 365 Business Central to Dynamics 365 Field Service'; - field("Server Address"; Rec."Server Address") - { - ApplicationArea = Suite; - Editable = IsEditable; - ToolTip = 'Specifies the URL of the environment that hosts the Dynamics 365 Field Service solution that you want to connect to.'; - - trigger OnValidate() - begin - ConnectionString := Rec.GetConnectionStringAsStoredInSetup(); - end; - } - field("Is Enabled"; Rec."Is Enabled") - { - ApplicationArea = Suite; - Caption = 'Enabled', Comment = 'Name of tickbox which shows whether the connection is enabled or disabled'; - ToolTip = 'Specifies if the connection to Dynamics 365 Field Service is enabled. When you check this checkbox, you will be prompted to sign-in to Dataverse with an administrator user account. The account will be used one time to give consent to, install and configure applications and components that the integration requires.'; - - trigger OnValidate() - var - FeatureTelemetry: Codeunit "Feature Telemetry"; - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - begin - CurrPage.Update(true); - if Rec."Is Enabled" then begin - FeatureTelemetry.LogUptake('0000MB9', 'Dynamics 365 Field Service', Enum::"Feature Uptake Status"::"Set up"); - Session.LogMessage('0000MBC', CRMConnEnabledOnPageTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - - if (Rec."Server Address" <> '') and (Rec."Server Address" <> TestServerAddressTok) then - if CDSIntegrationImpl.MultipleCompaniesConnected() then - CDSIntegrationImpl.SendMultipleCompaniesNotification(); - end; - end; - } - field(ScheduledSynchJobsActive; ScheduledSynchJobsRunning) - { - ApplicationArea = Suite; - Caption = 'Active scheduled synchronization jobs'; - Editable = false; - StyleExpr = ScheduledSynchJobsRunningStyleExpr; - ToolTip = 'Specifies how many of the default integration synchronization job queue entries ready to automatically synchronize data between Business Central and Dynamics 365 Field Service.'; - - trigger OnDrillDown() - var - ScheduledSynchJobsRunningMsg: Text; - begin - if TotalJobs = 0 then - ScheduledSynchJobsRunningMsg := JobQueueIsNotRunningMsg - else - if ActiveJobs = TotalJobs then - ScheduledSynchJobsRunningMsg := AllScheduledJobsAreRunningMsg - else - ScheduledSynchJobsRunningMsg := StrSubstNo(PartialScheduledJobsAreRunningMsg, ActiveJobs, TotalJobs); - Message(ScheduledSynchJobsRunningMsg); - end; - } - } - group(FSSettings) - { - Caption = 'Additional Settings'; - Visible = true; - field("Is FS Solution Installed"; Rec."Is FS Solution Installed") - { - ApplicationArea = Suite; - Caption = 'Dynamics 365 Business Central Integration Solution Imported to Field Service'; - Editable = false; - Visible = false; - StyleExpr = CRMSolutionInstalledStyleExpr; - ToolTip = 'Specifies if the Integration Solution is installed and configured in Dynamics 365 Field Service. You cannot change this setting.'; - - trigger OnDrillDown() - begin - if Rec."Is FS Solution Installed" then - Message(FavorableCRMSolutionInstalledMsg, PRODUCTNAME.Short(), CRMProductName.FSServiceName()) - else - Message(UnfavorableCRMSolutionInstalledMsg, PRODUCTNAME.Short()); - end; - } - field("Job Journal Template"; Rec."Job Journal Template") - { - ApplicationArea = Suite; - ShowMandatory = true; - ToolTip = 'Specifies the project journal template in which project journal lines will be created and coupled to work order products and work order services.'; - } - field("Job Journal Batch"; Rec."Job Journal Batch") - { - ApplicationArea = Suite; - ShowMandatory = true; - ToolTip = 'Specifies the project journal batch in which project journal lines will be created and coupled to work order products and work order services.'; - } - field("Hour Unit of Measure"; Rec."Hour Unit of Measure") - { - ApplicationArea = Suite; - ShowMandatory = true; - ToolTip = 'Specifies the unit of measure that corresponds to the ''hour'' unit that is used on Dynamics 365 Field Service bookable resources.'; - } - } - group(SynchSettings) - { - Caption = 'Synchronization Settings'; - Visible = Rec."Is Enabled"; - field("Line Synch. Rule"; Rec."Line Synch. Rule") - { - ApplicationArea = Suite; - ToolTip = 'Specifies when to synchronize work order products and work order services.'; - - trigger OnValidate() - var - IntegrationTableMapping: Record "Integration Table Mapping"; - JobJouralLine: Record "Job Journal Line"; - FSSetupDefaults: Codeunit "FS Setup Defaults"; - begin - if not Rec."Is Enabled" then - exit; - - if not Confirm(StrSubstNo(ResetOneIntegrationTableMappingConfirmQst, JobJouralLine.TableCaption())) then - Error(''); - - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - IntegrationTableMapping.SetRange("Table ID", Database::"Job Journal Line"); - IntegrationTableMapping.SetFilter("Integration Table ID", Format(Database::"FS Work Order Product") + '|' + Format(Database::"FS Work Order Service")); - if IntegrationTableMapping.FindSet() then - repeat - if IntegrationTableMapping."Integration Table ID" = Database::"FS Work Order Service" then - FSSetupDefaults.ResetProjectJournalLineWOServiceMapping(Rec, IntegrationTableMapping.Name, true); - if IntegrationTableMapping."Integration Table ID" = Database::"FS Work Order Product" then - FSSetupDefaults.ResetProjectJournalLineWOProductMapping(Rec, IntegrationTableMapping.Name, true); - until IntegrationTableMapping.Next() = 0; - end; - } - field("Line Post Rule"; Rec."Line Post Rule") - { - ApplicationArea = Suite; - ToolTip = 'Specifies when to post project journal lines that are coupled to work order products and work order services.'; - } - } - } - } - - actions - { - area(processing) - { - action("Assisted Setup") - { - ApplicationArea = Suite; - Caption = 'Assisted Setup'; - Image = Setup; - ToolTip = 'Runs Dynamics 365 Field Service Connection Setup Wizard.'; - - trigger OnAction() - var - GuidedExperience: Codeunit "Guided Experience"; - CRMIntegrationMgt: Codeunit "CRM Integration Management"; - GuidedExperienceType: Enum "Guided Experience Type"; - begin - CRMIntegrationMgt.RegisterAssistedSetup(); - Commit(); // Make sure all data is committed before we run the wizard - GuidedExperience.Run(GuidedExperienceType::"Assisted Setup", ObjectType::Page, Page::"FS Connection Setup Wizard"); - CurrPage.Update(false); - end; - } - action("Test Connection") - { - ApplicationArea = Suite; - Caption = 'Test Connection', Comment = 'Test is a verb.'; - Image = ValidateEmailLoggingSetup; - ToolTip = 'Tests the connection to Dynamics 365 Field Service using the specified settings.'; - - trigger OnAction() - begin - Rec.PerformTestConnection(); - end; - } - action(IntegrationTableMappings) - { - ApplicationArea = Suite; - Caption = 'Integration Table Mappings'; - Enabled = Rec."Is Enabled"; - Image = MapAccounts; - ToolTip = 'Opens the integration table mapping list.'; - - trigger OnAction() - begin - Page.Run(Page::"Integration Table Mapping List"); - end; - } - action("Redeploy Solution") - { - ApplicationArea = Suite; - Caption = 'Redeploy Integration Solution'; - Image = Setup; - Enabled = IsCdsIntegrationEnabled and (not Rec."Is Enabled"); - ToolTip = 'Redeploy and reconfigure the Dynamics 365 Field Service integration solution.'; - - trigger OnAction() - begin - Commit(); - Rec.DeployFSSolution(true); - end; - } - action(ResetConfiguration) - { - ApplicationArea = Suite; - Caption = 'Use Default Synchronization Setup'; - Enabled = Rec."Is Enabled"; - Image = ResetStatus; - ToolTip = 'Resets the integration table mappings and synchronization jobs to the default values for a connection with Dynamics 365 Field Service. All current mappings are deleted.'; - - trigger OnAction() - var - FSSetupDefaults: Codeunit "FS Setup Defaults"; - begin - Rec.EnsureCDSConnectionIsEnabled(); - Rec.EnsureCRMConnectionIsEnabled(); - if Confirm(ResetIntegrationTableMappingConfirmQst, false, CRMProductName.FSServiceName()) then begin - FSSetupDefaults.ResetConfiguration(Rec); - Message(SetupSuccessfulMsg, CRMProductName.FSServiceName()); - end; - Rec.RefreshDataFromFS(); - end; - } - action(StartInitialSynchAction) - { - ApplicationArea = Suite; - Caption = 'Run Full Synchronization'; - Enabled = Rec."Is Enabled"; - Image = RefreshLines; - ToolTip = 'Start all the default integration jobs for synchronizing Business Central record types and Dynamics 365 Field Service entities, as defined on the Integration Table Mappings page.'; - - trigger OnAction() - begin - Page.Run(Page::"CRM Full Synch. Review"); - end; - } - } - area(navigation) - { - action("Synch. Job Queue Entries") - { - ApplicationArea = Suite; - Caption = 'Synch. Job Queue Entries'; - Image = JobListSetup; - ToolTip = 'View the job queue entries that manage the scheduled synchronization between Dynamics 365 Field Service and Business Central.'; - - trigger OnAction() - var - JobQueueEntry: Record "Job Queue Entry"; - begin - JobQueueEntry.FilterGroup := 2; - JobQueueEntry.SetRange("Object Type to Run", JobQueueEntry."Object Type to Run"::Codeunit); - JobQueueEntry.SetFilter("Object ID to Run", Rec.GetJobQueueEntriesObjectIDToRunFilter()); - JobQueueEntry.FilterGroup := 0; - - Page.Run(Page::"Job Queue Entries", JobQueueEntry); - end; - } - action(SkippedSynchRecords) - { - ApplicationArea = Suite; - Caption = 'Skipped Synch. Records'; - Enabled = Rec."Is Enabled"; - Image = NegativeLines; - RunObject = Page "CRM Skipped Records"; - RunPageMode = View; - ToolTip = 'View the list of records that will be skipped for synchronization.'; - } - } - area(Promoted) - { - group(Category_Process) - { - Caption = 'Connection', Comment = 'Generated from the PromotedActionCategories property index 1.'; - - actionref("Assisted Setup_Promoted"; "Assisted Setup") - { - } - actionref("Test Connection_Promoted"; "Test Connection") - { - } - } - group(Category_Report) - { - Caption = 'Mapping', Comment = 'Generated from the PromotedActionCategories property index 2.'; - - actionref(IntegrationTableMappings_Promoted; IntegrationTableMappings) - { - } - actionref("Redeploy Solution_Promoted"; "Redeploy Solution") - { - } - } - group(Category_Category4) - { - Caption = 'Synchronization', Comment = 'Generated from the PromotedActionCategories property index 3.'; - - actionref(StartInitialSynchAction_Promoted; StartInitialSynchAction) - { - } - actionref("Synch. Job Queue Entries_Promoted"; "Synch. Job Queue Entries") - { - } - actionref(SkippedSynchRecords_Promoted; SkippedSynchRecords) - { - } - } - } - } - - trigger OnAfterGetRecord() - begin - RefreshData(); - end; - - trigger OnInit() - var - ApplicationAreaMgmtFacade: Codeunit "Application Area Mgmt. Facade"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - ApplicationAreaMgmtFacade.CheckAppAreaOnlyBasic(); - CRMIntegrationManagement.RegisterAssistedSetup(); - SetVisibilityFlags(); - end; - - trigger OnOpenPage() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - FeatureTelemetry: Codeunit "Feature Telemetry"; - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - MultipleCompaniesDetected: Boolean; - begin - FeatureTelemetry.LogUptake('0000MBA', 'Dataverse', Enum::"Feature Uptake Status"::Discovered); - FeatureTelemetry.LogUptake('0000MBB', 'Dynamics 365 Field Service', Enum::"Feature Uptake Status"::Discovered); - Rec.EnsureCDSConnectionIsEnabled(); - Rec.EnsureCRMConnectionIsEnabled(); - - if not Rec.Get() then begin - Rec.Init(); - InitializeDefaultProxyVersion(); - Rec.Insert(); - Rec.LoadConnectionStringElementsFromCDSConnectionSetup(); - end else begin - if not Rec."Is Enabled" then - Rec.LoadConnectionStringElementsFromCDSConnectionSetup(); - ConnectionString := Rec.GetConnectionStringAsStoredInSetup(); - Rec.UnregisterConnection(); - if (not IsValidProxyVersion()) then begin - if not IsValidProxyVersion() then - InitializeDefaultProxyVersion(); - Rec.Modify(); - end; - if Rec."Is Enabled" then begin - // just try notifying, because the setup may be broken, and we are in OnOpenPage - if TryDetectMultipleCompanies(MultipleCompaniesDetected) then - if MultipleCompaniesDetected then - CDSIntegrationImpl.SendMultipleCompaniesNotification() - - end else - if Rec."Disable Reason" <> '' then - CRMIntegrationManagement.SendConnectionDisabledNotification(Rec."Disable Reason"); - end; - end; - - trigger OnQueryClosePage(CloseAction: Action): Boolean - begin - if not Rec."Is Enabled" then - if not Confirm(StrSubstNo(EnableServiceQst, CurrPage.Caption), true) then - exit(false); - end; - - [TryFunction] - local procedure TryDetectMultipleCompanies(var MultipleCompaniesDetected: Boolean) - var - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - begin - Rec.RegisterConnection(); - if (Rec."Server Address" <> '') and (Rec."Server Address" <> TestServerAddressTok) then - MultipleCompaniesDetected := CDSIntegrationImpl.MultipleCompaniesConnected(); - end; - - var - CRMProductName: Codeunit "CRM Product Name"; - ResetIntegrationTableMappingConfirmQst: Label 'This will restore the default integration table mappings and synchronization jobs for %1. All custom mappings and jobs will be deleted. The default mappings and jobs will be used the next time data is synchronized. Do you want to continue?', Comment = '%1 = CRM product name'; - ResetOneIntegrationTableMappingConfirmQst: Label 'This will restore the default integration table mappings and synchronization jobs for %1. Do you want to continue?', Comment = '%1 = CRM product name'; - UnfavorableCRMSolutionInstalledMsg: Label 'The %1 Integration Solution was not detected.', Comment = '%1 - product name'; - FavorableCRMSolutionInstalledMsg: Label 'The %1 Integration Solution is installed in %2.', Comment = '%1 - product name, %2 = CRM product name'; - ReadyScheduledSynchJobsTok: Label '%1 of %2', Comment = '%1 = Count of scheduled job queue entries in ready or in process state, %2 count of all scheduled jobs'; - ScheduledSynchJobsRunning: Text; - EnableServiceQst: Label 'The %1 is not enabled. Are you sure you want to exit?', Comment = '%1 = This Page Caption (Microsoft Dynamics 365 Connection Setup)'; - PartialScheduledJobsAreRunningMsg: Label 'An active job queue is available but only %1 of the %2 scheduled synchronization jobs are ready or in process.', Comment = '%1 = Count of scheduled job queue entries in ready or in process state, %2 count of all scheduled jobs'; - JobQueueIsNotRunningMsg: Label 'There is no job queue started. Scheduled synchronization jobs require an active job queue to process jobs.\\Contact your administrator to get a job queue configured and started.'; - AllScheduledJobsAreRunningMsg: Label 'An job queue is started and all scheduled synchronization jobs are ready or already processing.'; - SetupSuccessfulMsg: Label 'The default setup for %1 synchronization has completed successfully.', Comment = '%1 = CRM product name'; - CategoryTok: Label 'AL Dataverse Integration', Locked = true; - CRMConnEnabledOnPageTxt: Label 'Field Service Connection has been enabled from FS Connection Setup Page', Locked = true; - TestServerAddressTok: Label '@@test@@', Locked = true; - ScheduledSynchJobsRunningStyleExpr: Text; - CRMSolutionInstalledStyleExpr: Text; - CRMVersionStyleExpr: Text; - ConnectionString: Text; - ActiveJobs: Integer; - TotalJobs: Integer; - IsEditable: Boolean; - IsCdsIntegrationEnabled: Boolean; - CRMVersionStatus: Boolean; - - local procedure RefreshData() - begin - Rec.RefreshDataFromFS(false); - RefreshSynchJobsData(); - UpdateEnableFlags(); - SetStyleExpr(); - end; - - local procedure RefreshSynchJobsData() - begin - Rec.CountCRMJobQueueEntries(ActiveJobs, TotalJobs); - ScheduledSynchJobsRunning := StrSubstNo(ReadyScheduledSynchJobsTok, ActiveJobs, TotalJobs); - ScheduledSynchJobsRunningStyleExpr := GetRunningJobsStyleExpr(); - end; - - local procedure SetStyleExpr() - begin - CRMSolutionInstalledStyleExpr := GetStyleExpr(Rec."Is FS Solution Installed"); - CRMVersionStyleExpr := GetStyleExpr(CRMVersionStatus); - end; - - local procedure GetRunningJobsStyleExpr() StyleExpr: Text - begin - if ActiveJobs < TotalJobs then - StyleExpr := 'Ambiguous' - else - StyleExpr := GetStyleExpr((ActiveJobs = TotalJobs) and (TotalJobs <> 0)) - end; - - local procedure GetStyleExpr(Favorable: Boolean) StyleExpr: Text - begin - if Favorable then - StyleExpr := 'Favorable' - else - StyleExpr := 'Unfavorable' - end; - - local procedure UpdateEnableFlags() - var - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - begin - IsEditable := not Rec."Is Enabled" and not CDSIntegrationImpl.IsIntegrationEnabled(); - end; - - local procedure SetVisibilityFlags() - var - CDSConnectionSetup: Record "CDS Connection Setup"; - begin - if CDSConnectionSetup.Get() then - IsCdsIntegrationEnabled := CDSConnectionSetup."Is Enabled"; - end; - - local procedure IsValidProxyVersion(): Boolean - begin - exit(Rec."Proxy Version" <> 0); - end; - - local procedure InitializeDefaultProxyVersion() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - Rec.Validate("Proxy Version", CRMIntegrationManagement.GetLastProxyVersionItem()); - end; -} - diff --git a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetupWizard.Page.al b/Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetupWizard.Page.al deleted file mode 100644 index 1472bb1947..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSConnectionSetupWizard.Page.al +++ /dev/null @@ -1,517 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using System.Environment; -using System.Environment.Configuration; -using System.Telemetry; -using System.Utilities; -using Microsoft.Integration.D365Sales; - -page 6613 "FS Connection Setup Wizard" -{ - Caption = 'Dynamics 365 Field Service Integration Setup'; - PageType = NavigatePage; - SourceTable = "FS Connection Setup"; - SourceTableTemporary = true; - - layout - { - area(content) - { - group(BannerStandard) - { - Caption = ''; - Editable = false; - Visible = TopBannerVisible and not CredentialsStepVisible; -#pragma warning disable AA0100 - field("MediaResourcesStandard.""Media Reference"""; MediaResourcesStandard."Media Reference") -#pragma warning restore AA0100 - { - ApplicationArea = Suite; - Editable = false; - ShowCaption = false; - } - } - group(BannerDone) - { - Caption = ''; - Editable = false; - Visible = TopBannerVisible and CredentialsStepVisible; -#pragma warning disable AA0100 - field("MediaResourcesDone.""Media Reference"""; MediaResourcesDone."Media Reference") -#pragma warning restore AA0100 - { - ApplicationArea = Suite; - Editable = false; - ShowCaption = false; - } - } - group(Step1) - { - Visible = FirstStepVisible; - group("Welcome to Dynamics 365 Connection Setup") - { - Caption = 'Welcome to Dynamics 365 Field Service Connection Setup'; - group(Control23) - { - InstructionalText = 'You can set up a Dynamics 365 Field Service connection to enable seamless coupling of data.'; - ShowCaption = false; - } - group(Control21) - { - InstructionalText = 'Start by specifying the URL to your Dynamics 365 Field Service solution, such as https://mycrm.crm4.dynamics.com'; - ShowCaption = false; - } - field(ServerAddress; Rec."Server Address") - { - ApplicationArea = Suite; - Editable = ConnectionStringFieldsEditable; - ToolTip = 'Specifies the URL of the environment that hosts the Dynamics 365 Field Service solution that you want to connect to.'; - - trigger OnValidate() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.CheckModifyCRMConnectionURL(Rec."Server Address"); - end; - } - group(Control9) - { - InstructionalText = 'Once coupled, you can work with and synchronize data types that are common to both services, such as work order products, work order services, customer assets and bookable resources, and keep the data up-to-date in both locations.'; - ShowCaption = false; - } - } - } - group(Step2) - { - Caption = ''; - Visible = CredentialsStepVisible; - group("Step2.1") - { - Caption = ''; - InstructionalText = 'Specify the user that will be used for synchronization between the two services.'; - Visible = IsUserNamePasswordVisible; - field(Email; Rec."User Name") - { - ApplicationArea = Suite; - Caption = 'Email'; - ExtendedDatatype = EMail; - Editable = ConnectionStringFieldsEditable; - ToolTip = 'Specifies the user name of a Dynamics 365 Field Service account.'; - } - field(Password; Password) - { - ApplicationArea = Suite; - Caption = 'Password'; - ExtendedDatatype = Masked; - Editable = ConnectionStringFieldsEditable; - ToolTip = 'Specifies the password of a Dynamics 365 Field Service user account.'; - - trigger OnValidate() - begin - PasswordSet := true; - end; - } - } - group(Control22) - { - InstructionalText = 'This account must be a valid user in Dynamics 365 Field Service that does not have the System Administrator role.'; - ShowCaption = false; - Visible = IsUserNamePasswordVisible; - } - group(Control20) - { - InstructionalText = 'To enable the connection, fill out the settings below and choose Finish. You may be asked to specify an administrative user account in Dynamics 365 Field Service.'; - ShowCaption = false; - - field("Job Journal Template"; Rec."Job Journal Template") - { - ApplicationArea = Suite; - ShowMandatory = true; - ToolTip = 'Specifies the project journal template in which project journal lines will be created and coupled to work order products and work order services.'; - } - field("Job Journal Batch"; Rec."Job Journal Batch") - { - ApplicationArea = Suite; - ShowMandatory = true; - ToolTip = 'Specifies the project journal batch in which project journal lines will be created and coupled to work order products and work order services.'; - } - field("Hour Unit of Measure"; Rec."Hour Unit of Measure") - { - ApplicationArea = Suite; - ShowMandatory = true; - ToolTip = 'Specifies the unit of measure that corresponds to the ''hour'' unit that is used on Dynamics 365 Field Service bookable resources.'; - } - field("Line Synch. Rule"; Rec."Line Synch. Rule") - { - ApplicationArea = Suite; - ToolTip = 'Specifies when to synchronize work order products and work order services.'; - } - field("Line Post Rule"; Rec."Line Post Rule") - { - ApplicationArea = Suite; - ToolTip = 'Specifies when to post project journal lines that are coupled to work order products and work order services.'; - } - } - group("Advanced Settings") - { - Caption = 'Advanced Settings'; - Visible = false; - field(ImportFSSolution; ImportSolution) - { - ApplicationArea = Suite; - Caption = 'Import Dynamics 365 Field Service Integration Solution'; - Enabled = ImportFSSolutionEnabled; - ToolTip = 'Specifies that the solution required for integration with Dynamics 365 Field Service will be imported.'; - } - field(EnableFSConnection; EnableFSConnection) - { - ApplicationArea = Suite; - Caption = 'Enable Dynamics 365 Field Service Connection'; - Enabled = EnableFSConnectionEnabled; - ToolTip = 'Specifies if the connection to Dynamics 365 Field Service will be enabled.'; - } - field(SDKVersion; Rec."Proxy Version") - { - ApplicationArea = Suite; - AssistEdit = true; - Caption = 'Dynamics 365 SDK Version'; - Editable = false; - ToolTip = 'Specifies the Microsoft Dynamics 365 (CRM) software development kit version that is used to connect to Dynamics 365 Field Service.'; - - trigger OnAssistEdit() - var - TempStack: Record TempStack temporary; - begin - if Page.RunModal(Page::"SDK Version List", TempStack) = Action::LookupOK then begin - Rec."Proxy Version" := TempStack.StackOrder; - CurrPage.Update(true); - end; - end; - } - } - } - } - } - - actions - { - area(processing) - { - action(ActionBack) - { - ApplicationArea = Basic, Suite; - Caption = 'Back'; - Enabled = BackActionEnabled; - Image = PreviousRecord; - InFooterBar = true; - - trigger OnAction() - begin - NextStep(true); - end; - } - action(ActionNext) - { - ApplicationArea = Basic, Suite; - Caption = 'Next'; - Enabled = NextActionEnabled; - Image = NextRecord; - InFooterBar = true; - - trigger OnAction() - begin - if (Step = Step::Start) and (Rec."Server Address" = '') then - Error(CRMURLShouldNotBeEmptyErr, CRMProductName.FSServiceName()); - NextStep(false); - end; - } - action(ActionAdvanced) - { - ApplicationArea = Basic, Suite; - Caption = 'Advanced'; - Image = Setup; - InFooterBar = true; - Visible = false; - - trigger OnAction() - begin - ShowAdvancedSettings := true; - AdvancedActionEnabled := false; - SimpleActionEnabled := true; - end; - } - action(ActionSimple) - { - ApplicationArea = Basic, Suite; - Caption = 'Simple'; - Image = Setup; - InFooterBar = true; - Visible = SimpleActionEnabled; - - trigger OnAction() - begin - ShowAdvancedSettings := false; - AdvancedActionEnabled := true; - SimpleActionEnabled := false; - end; - } - action(ActionFinish) - { - ApplicationArea = Basic, Suite; - Caption = 'Finish'; - Enabled = FinishActionEnabled; - Image = Approve; - InFooterBar = true; - - trigger OnAction() - var - FeatureTelemetry: Codeunit "Feature Telemetry"; - GuidedExperience: Codeunit "Guided Experience"; - begin - if Rec."Authentication Type" = Rec."Authentication Type"::Office365 then - if Rec."User Name" = '' then - Error(CRMSynchUserCredentialsNeededErr, CRMProductName.FSServiceName()); - - if not FinalizeSetup() then - exit; - Page.Run(Page::"FS Connection Setup"); - GuidedExperience.CompleteAssistedSetup(ObjectType::Page, Page::"FS Connection Setup Wizard"); - Commit(); - FeatureTelemetry.LogUptake('0000MBD', 'Dynamics 365 Field Service', Enum::"Feature Uptake Status"::"Set up"); - CurrPage.Close(); - end; - } - } - } - - trigger OnInit() - begin - LoadTopBanners(); - SetVisibilityFlags(); - end; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - CRMConnectionSetup: Record "CRM Connection Setup"; - FeatureTelemetry: Codeunit "Feature Telemetry"; - begin - FSConnectionSetup.EnsureCDSConnectionIsEnabled(); - FSConnectionSetup.EnsureCRMConnectionIsEnabled(); - CRMConnectionSetup.Get(); - FSConnectionSetup.LoadConnectionStringElementsFromCDSConnectionSetup(); - FeatureTelemetry.LogUptake('0000MBE', 'Dataverse', Enum::"Feature Uptake Status"::Discovered); - FeatureTelemetry.LogUptake('0000MBF', 'Dynamics 365 Field Service', Enum::"Feature Uptake Status"::Discovered); - - Rec.Init(); - if FSConnectionSetup.Get() then begin - Rec."Proxy Version" := FSConnectionSetup."Proxy Version"; - Rec."Authentication Type" := FSConnectionSetup."Authentication Type"; - Rec."Server Address" := FSConnectionSetup."Server Address"; - Rec."User Name" := FSConnectionSetup."User Name"; - Rec."User Password Key" := FSConnectionSetup."User Password Key"; - Rec."Job Journal Template" := FSConnectionSetup."Job Journal Template"; - Rec."Job Journal Batch" := FSConnectionSetup."Job Journal Batch"; - Rec."Hour Unit of Measure" := FSConnectionSetup."Hour Unit of Measure"; - Rec."Line Synch. Rule" := FSConnectionSetup."Line Synch. Rule"; - Rec."Line Post Rule" := FSConnectionSetup."Line Post Rule"; - if not FSConnectionSetup.GetPassword().IsEmpty() then - Password := '**********'; - ConnectionStringFieldsEditable := false; - end else begin - InitializeDefaultAuthenticationType(); - InitializeDefaultProxyVersion(); - end; - Rec.Insert(); - Step := Step::Start; - EnableControls(); - end; - - trigger OnQueryClosePage(CloseAction: Action): Boolean - var - GuidedExperience: Codeunit "Guided Experience"; - begin - if CloseAction = Action::OK then - if GuidedExperience.AssistedSetupExistsAndIsNotComplete(ObjectType::Page, Page::"FS Connection Setup Wizard") then - if not Confirm(ConnectionNotSetUpQst, false, CRMProductName.FSServiceName()) then - Error(''); - end; - - var - MediaRepositoryStandard: Record "Media Repository"; - MediaRepositoryDone: Record "Media Repository"; - MediaResourcesStandard: Record "Media Resources"; - MediaResourcesDone: Record "Media Resources"; - CRMProductName: Codeunit "CRM Product Name"; - ClientTypeManagement: Codeunit "Client Type Management"; - Step: Option Start,Credentials,Finish; - TopBannerVisible: Boolean; - ConnectionStringFieldsEditable: Boolean; - BackActionEnabled: Boolean; - NextActionEnabled: Boolean; - FinishActionEnabled: Boolean; - FirstStepVisible: Boolean; - CredentialsStepVisible: Boolean; - EnableFSConnection: Boolean; - ImportSolution: Boolean; - EnableFSConnectionEnabled: Boolean; - ImportFSSolutionEnabled: Boolean; - ShowAdvancedSettings: Boolean; - AdvancedActionEnabled: Boolean; - SimpleActionEnabled: Boolean; - IsUserNamePasswordVisible: Boolean; - PasswordSet: Boolean; - [NonDebuggable] - Password: Text; - ConnectionNotSetUpQst: Label 'The %1 connection has not been set up.\\Are you sure you want to exit?', Comment = '%1 = CRM product name'; - CRMURLShouldNotBeEmptyErr: Label 'You must specify the URL of your %1 solution.', Comment = '%1 = CRM product name'; - CRMSynchUserCredentialsNeededErr: Label 'You must specify the credentials for the user account for synchronization with %1.', Comment = '%1 = CRM product name'; - Office365AuthTxt: Label 'AuthType=Office365', Locked = true; - - local procedure LoadTopBanners() - begin - if MediaRepositoryStandard.Get('AssistedSetup-NoText-120px.png', Format(ClientTypeManagement.GetCurrentClientType())) and - MediaRepositoryDone.Get('AssistedSetupDone-NoText-120px.png', Format(ClientTypeManagement.GetCurrentClientType())) - then - if MediaResourcesStandard.Get(MediaRepositoryStandard."Media Resources Ref") and - MediaResourcesDone.Get(MediaRepositoryDone."Media Resources Ref") - then - TopBannerVisible := MediaResourcesDone."Media Reference".HasValue; - end; - - local procedure SetVisibilityFlags() - var - CDSConnectionSetup: Record "CDS Connection Setup"; - begin - IsUserNamePasswordVisible := true; - - if CDSConnectionSetup.Get() then - if CDSConnectionSetup."Authentication Type" = CDSConnectionSetup."Authentication Type"::Office365 then - if not CDSConnectionSetup."Connection String".Contains(Office365AuthTxt) then - IsUserNamePasswordVisible := false; - end; - - local procedure NextStep(Backward: Boolean) - begin - if Backward then - Step := Step - 1 - else - Step := Step + 1; - - EnableControls(); - end; - - local procedure ResetControls() - begin - BackActionEnabled := false; - NextActionEnabled := false; - FinishActionEnabled := false; - AdvancedActionEnabled := false; - - FirstStepVisible := false; - CredentialsStepVisible := false; - - ImportFSSolutionEnabled := true; - end; - - local procedure EnableControls() - begin - ResetControls(); - - case Step of - Step::Start: - ShowStartStep(); - Step::Credentials: - ShowFinishStep(); - end; - end; - - local procedure ShowStartStep() - begin - BackActionEnabled := false; - NextActionEnabled := true; - FinishActionEnabled := false; - FirstStepVisible := true; - AdvancedActionEnabled := false; - SimpleActionEnabled := false; - end; - - local procedure ShowFinishStep() - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - BackActionEnabled := true; - NextActionEnabled := false; - AdvancedActionEnabled := not ShowAdvancedSettings; - SimpleActionEnabled := not AdvancedActionEnabled; - CredentialsStepVisible := true; - FinishActionEnabled := true; - - EnableFSConnectionEnabled := Rec."Server Address" <> ''; - Rec."Authentication Type" := Rec."Authentication Type"::Office365; - if FSConnectionSetup.Get() then begin - EnableFSConnection := true; - EnableFSConnectionEnabled := not FSConnectionSetup."Is Enabled"; - ImportSolution := true; - if FSConnectionSetup."Is FS Solution Installed" then - ImportFSSolutionEnabled := false; - end else begin - if ImportFSSolutionEnabled then - ImportSolution := true; - if EnableFSConnectionEnabled then - EnableFSConnection := true; - end; - end; - - local procedure FinalizeSetup(): Boolean - var - FSConnectionSetup: Record "FS Connection Setup"; - FSIntegrationMgt: Codeunit "FS Integration Mgt."; - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - AdminEmail: Text; - AdminPassword: SecretText; - AccessToken: SecretText; - AdminADDomain: Text; - ImportSolutionFailed: Boolean; - begin - if ImportSolution and ImportFSSolutionEnabled then begin - case Rec."Authentication Type" of - Rec."Authentication Type"::Office365: - CDSIntegrationImpl.GetAccessToken(Rec."Server Address", true, AccessToken); - Rec."Authentication Type"::AD: - if not Rec.PromptForCredentials(AdminEmail, AdminPassword, AdminADDomain) then - exit(false); - else - if not Rec.PromptForCredentials(AdminEmail, AdminPassword) then - exit(false); - end; - FSIntegrationMgt.ImportFSSolution(Rec."Server Address", Rec."User Name", AdminEmail, AdminPassword, AccessToken, AdminADDomain, Rec."Proxy Version", true, ImportSolutionFailed); - end; - if PasswordSet then - FSConnectionSetup.UpdateFromWizard(Rec, Password) - else - FSConnectionSetup.UpdateFromWizard(Rec, FSConnectionSetup.GetPassword()); - - if EnableFSConnection then - FSConnectionSetup.EnableFSConnectionFromWizard(); - exit(true); - end; - - local procedure InitializeDefaultAuthenticationType() - begin - Rec.Validate("Authentication Type", Rec."Authentication Type"::Office365); - end; - - local procedure InitializeDefaultProxyVersion() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - Rec.Validate("Proxy Version", CRMIntegrationManagement.GetLastProxyVersionItem()); - end; -} - diff --git a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSCustomerAssetList.Page.al b/Apps/W1/FieldServiceIntegration/app/src/Pages/FSCustomerAssetList.Page.al deleted file mode 100644 index f24dc2b353..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSCustomerAssetList.Page.al +++ /dev/null @@ -1,184 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Service.Item; -using Microsoft.Integration.D365Sales; -using System.Environment.Configuration; - -page 6611 "FS Customer Asset List" -{ - ApplicationArea = Suite; - Caption = 'Customer Assets - Dynamics 365 Field Service'; - Editable = false; - PageType = List; - SourceTable = "FS Customer Asset"; - SourceTableView = sorting(Name); - UsageCategory = Lists; - - layout - { - area(content) - { - repeater(Control2) - { - ShowCaption = false; - field(Name; Rec.Name) - { - ApplicationArea = Suite; - Caption = 'Name'; - StyleExpr = FirstColumnStyle; - ToolTip = 'Specifies the customer asset name.'; - } - field(AssetTag; Rec.AssetTag) - { - ApplicationArea = Suite; - Caption = 'Asset Tag'; - ToolTip = 'Specifies the customer asset tag.'; - } - field(CustomerAssetCategoryName; Rec.CustomerAssetCategoryName) - { - ApplicationArea = Suite; - Caption = 'Category'; - ToolTip = 'Specifies the customer asset category name. '; - } - field(CustomerName; CustomerName) - { - ApplicationArea = Suite; - Caption = 'Category'; - ToolTip = 'Specifies the name of the customer. '; - } - field(Coupled; Coupled) - { - ApplicationArea = Suite; - Caption = 'Coupled'; - ToolTip = 'Specifies if the Dynamics 365 Field Service record is coupled to Business Central.'; - } - } - } - } - - actions - { - area(processing) - { - action(CreateFromFS) - { - ApplicationArea = Suite; - Caption = 'Create in Business Central'; - Image = NewItemNonStock; - ToolTip = 'Generate the entity from the Field Service customer asset.'; - Visible = ShowCreateInBC; - - trigger OnAction() - var - FSCustomerAsset: Record "FS Customer Asset"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CurrPage.SetSelectionFilter(FSCustomerAsset); - CRMIntegrationManagement.CreateNewRecordsFromSelectedCRMRecords(FSCustomerAsset); - end; - } - action(ShowOnlyUncoupled) - { - ApplicationArea = Suite; - Caption = 'Hide Coupled Records'; - Image = FilterLines; - ToolTip = 'Do not show coupled records.'; - - trigger OnAction() - begin - Rec.MarkedOnly(true); - end; - } - action(ShowAll) - { - ApplicationArea = Suite; - Caption = 'Show Coupled Records'; - Image = ClearFilter; - ToolTip = 'Show coupled records.'; - - trigger OnAction() - begin - Rec.MarkedOnly(false); - end; - } - } - area(Promoted) - { - group(Category_Process) - { - Caption = 'Process'; - - actionref(CreateFromFS_Promoted; CreateFromFS) - { - } - actionref(ShowOnlyUncoupled_Promoted; ShowOnlyUncoupled) - { - } - actionref(ShowAll_Promoted; ShowAll) - { - } - } - } - } - - trigger OnAfterGetRecord() - var - CRMIntegrationRecord: Record "CRM Integration Record"; - CRMAccount: Record "CRM Account"; - RecordID: RecordID; - begin - if CRMIntegrationRecord.FindRecordIDFromID(Rec.CustomerAssetId, Database::"Service Item", RecordID) then - if CurrentlyCoupledFSCustomerAsset.CustomerAssetId = Rec.CustomerAssetId then begin - Coupled := 'Current'; - FirstColumnStyle := 'Strong'; - Rec.Mark(true); - end else begin - Coupled := 'Yes'; - FirstColumnStyle := 'Subordinate'; - Rec.Mark(false); - end - else begin - Coupled := 'No'; - FirstColumnStyle := 'None'; - Rec.Mark(true); - end; - if CRMAccount.Get(Rec.Account) then - CustomerName := CRMAccount.Name - else - CustomerName := ''; - end; - - trigger OnInit() - begin - Codeunit.Run(Codeunit::"CRM Integration Management"); - end; - - trigger OnOpenPage() - var - ApplicationAreaMgmtFacade: Codeunit "Application Area Mgmt. Facade"; - LookupCRMTables: Codeunit "Lookup CRM Tables"; - begin - Rec.FilterGroup(4); - Rec.SetView(LookupCRMTables.GetIntegrationTableMappingView(Database::"FS Customer Asset")); - Rec.FilterGroup(0); - ShowCreateInBC := ApplicationAreaMgmtFacade.IsPremiumExperienceEnabled(); - end; - - var - CurrentlyCoupledFSCustomerAsset: Record "FS Customer Asset"; - Coupled: Text; - FirstColumnStyle: Text; - CustomerName: Text; - ShowCreateInBC: Boolean; - - procedure SetCurrentlyCoupledFSCustomerAsset(FSCustomerAsset: Record "FS Customer Asset") - begin - CurrentlyCoupledFSCustomerAsset := FSCustomerAsset; - end; -} - diff --git a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSLocationList.PageExt.al b/Apps/W1/FieldServiceIntegration/app/src/Pages/FSLocationList.PageExt.al deleted file mode 100644 index 2a0edda4f8..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Pages/FSLocationList.PageExt.al +++ /dev/null @@ -1,172 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Inventory.Location; -using Microsoft.Integration.Dataverse; - -pageextension 6623 "FS Location List" extends "Location List" -{ - layout - { - addlast(Control1) - { - field("Coupled to FS"; Rec."Coupled to FS") - { - ApplicationArea = Jobs; - Visible = FSIntegrationEnabled; - ToolTip = 'Specifies if the project task is coupled to an entity in Field Service.'; - } - } - } - - actions - { - addafter("&Location") - { - group(ActionFS) - { - Caption = 'Dynamics 365 Field Service'; - Enabled = FSIntegrationEnabled; - - action(GoToProductFS) - { - ApplicationArea = Suite; - Caption = 'Location in Field Service'; - Image = CoupledItem; - ToolTip = 'Open the coupled Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId); - end; - } - action(SynchronizeNowFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Synchronize'; - Image = Refresh; - ToolTip = 'Send updated data to Dynamics 365 Field Service.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.UpdateOneNow(Rec.RecordId); - end; - } - group(CouplingFS) - { - Caption = 'Coupling', Comment = 'Coupling is a noun'; - Image = LinkAccount; - ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Field Service record.'; - action(ManageCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = IM; - ApplicationArea = Suite; - Caption = 'Set Up Coupling'; - Image = LinkAccount; - ToolTip = 'Create or modify the coupling to a Dynamics 365 Field Service product.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.DefineCoupling(Rec.RecordId); - end; - } - action(DeleteCouplingFS) - { - AccessByPermission = TableData "CRM Integration Record" = D; - ApplicationArea = Suite; - Caption = 'Delete Coupling'; - Enabled = CRMIsCoupledToRecord; - Image = UnLinkAccount; - ToolTip = 'Delete the coupling to a Dynamics 365 Field Service entity.'; - - trigger OnAction() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - CRMCouplingManagement.RemoveCoupling(Rec.RecordId); - end; - } - } - action(FSShowLog) - { - ApplicationArea = Suite; - Caption = 'Synchronization Log'; - Image = Log; - ToolTip = 'View integration synchronization jobs for the location table.'; - - trigger OnAction() - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationManagement.ShowLog(Rec.RecordId); - end; - } - } - } - - addlast(Promoted) - { - group(Category_FS_Synchronize) - { - Caption = 'Synchronize'; - Visible = FSIntegrationEnabled; - - group(Category_FS_Coupling) - { - Caption = 'Coupling'; - ShowAs = SplitButton; - - actionref(ManageCouplingFS_Promoted; ManageCouplingFS) - { - } - actionref(DeleteCouplingFS_Promoted; DeleteCouplingFS) - { - } - } - actionref(SynchronizeNowFS_Promoted; SynchronizeNowFS) - { - } - actionref(GoToProductFS_Promoted; GoToProductFS) - { - } - actionref(FSShowLog_Promoted; FSShowLog) - { - } - } - } - } - - - var - FSIntegrationEnabled: Boolean; - CRMIsCoupledToRecord: Boolean; - CRMIntegrationEnabled: Boolean; - - trigger OnAfterGetCurrRecord() - var - CRMCouplingManagement: Codeunit "CRM Coupling Management"; - begin - if FSIntegrationEnabled then - CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId); - end; - - trigger OnOpenPage() - var - FSConnectionSetup: Record "FS Connection Setup"; - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - begin - CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled(); - if CRMIntegrationEnabled then - FSIntegrationEnabled := FSConnectionSetup.IsEnabled(); - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365TEAMMEMBER.PermissionSetExt.al b/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365TEAMMEMBER.PermissionSetExt.al deleted file mode 100644 index fa5cd132bb..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365TEAMMEMBER.PermissionSetExt.al +++ /dev/null @@ -1,12 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using System.Security.AccessControl; - -permissionsetextension 6614 "FS D365 TEAM MEMBER" extends "D365 TEAM MEMBER" -{ - IncludedPermissionSets = "FS - Edit"; -} diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSEdit.PermissionSet.al b/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSEdit.PermissionSet.al deleted file mode 100644 index 70b9c6083f..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSEdit.PermissionSet.al +++ /dev/null @@ -1,30 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -permissionset 6610 "FS - Edit" -{ - Access = Internal; - Assignable = false; - Caption = 'Field Service - Edit'; - - IncludedPermissionSets = "FS - Read"; - - Permissions = tabledata "FS Connection Setup" = IMD, - tabledata "FS Bookable Resource" = IMD, - tabledata "FS Bookable Resource Booking" = IMD, - tabledata "FS BookableResourceBookingHdr" = IMD, - tabledata "FS Customer Asset" = IMD, - tabledata "FS Customer Asset Category" = IMD, - tabledata "FS Project Task" = IMD, - tabledata "FS Resource Pay Type" = IMD, - tabledata "FS Warehouse" = IMD, - tabledata "FS Work Order" = IMD, - tabledata "FS Work Order Incident" = IMD, - tabledata "FS Work Order Product" = IMD, - tabledata "FS Work Order Service" = IMD, - tabledata "FS Work Order Substatus" = IMD, - tabledata "FS Work Order Type" = IMD; -} diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSINTELLIGENTCLOUD.PermissionSetExt.al b/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSINTELLIGENTCLOUD.PermissionSetExt.al deleted file mode 100644 index c15d7a96b6..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSINTELLIGENTCLOUD.PermissionSetExt.al +++ /dev/null @@ -1,12 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using System.Security.AccessControl; - -permissionsetextension 6615 "FS INTELLIGENT CLOUD" extends "INTELLIGENT CLOUD" -{ - IncludedPermissionSets = "FS - Read"; -} diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSObjects.PermissionSet.al b/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSObjects.PermissionSet.al deleted file mode 100644 index 588a11a6be..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSObjects.PermissionSet.al +++ /dev/null @@ -1,39 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -permissionset 6612 "FS - Objects" -{ - Access = Public; - Assignable = false; - Caption = 'Field Service - Objects'; - - Permissions = codeunit "FS Assisted Setup Subscriber" = X, - codeunit "FS Data Classification" = X, - codeunit "FS Install" = X, - codeunit "FS Integration Mgt." = X, - codeunit "FS Int. Table Subscriber" = X, - codeunit "FS Lookup FS Tables" = X, - codeunit "FS Setup Defaults" = X, - page "FS Bookable Resource List" = X, - page "FS Connection Setup" = X, - page "FS Connection Setup Wizard" = X, - page "FS Customer Asset List" = X, - table "FS Bookable Resource" = X, - table "FS Bookable Resource Booking" = X, - table "FS BookableResourceBookingHdr" = X, - table "FS Connection Setup" = X, - table "FS Customer Asset" = X, - table "FS Customer Asset Category" = X, - table "FS Project Task" = X, - table "FS Resource Pay Type" = X, - table "FS Warehouse" = X, - table "FS Work Order" = X, - table "FS Work Order Incident" = X, - table "FS Work Order Product" = X, - table "FS Work Order Service" = X, - table "FS Work Order Substatus" = X, - table "FS Work Order Type" = X; -} diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSRead.PermissionSet.al b/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSRead.PermissionSet.al deleted file mode 100644 index 1f4dda8f14..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSRead.PermissionSet.al +++ /dev/null @@ -1,30 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -permissionset 6611 "FS - Read" -{ - Access = Internal; - Assignable = false; - Caption = 'Field Service - Read'; - - IncludedPermissionSets = "FS - Objects"; - - Permissions = tabledata "FS Connection Setup" = R, - tabledata "FS Bookable Resource" = R, - tabledata "FS Bookable Resource Booking" = R, - tabledata "FS BookableResourceBookingHdr" = R, - tabledata "FS Customer Asset" = R, - tabledata "FS Customer Asset Category" = R, - tabledata "FS Project Task" = R, - tabledata "FS Resource Pay Type" = R, - tabledata "FS Warehouse" = R, - tabledata "FS Work Order" = R, - tabledata "FS Work Order Incident" = R, - tabledata "FS Work Order Product" = R, - tabledata "FS Work Order Service" = R, - tabledata "FS Work Order Substatus" = R, - tabledata "FS Work Order Type" = R; -} diff --git a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJob.TableExt.al b/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJob.TableExt.al deleted file mode 100644 index d2027dc68f..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJob.TableExt.al +++ /dev/null @@ -1,69 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Projects.Project.Job; -using Microsoft.Integration.SyncEngine; - -tableextension 6610 "FS Job" extends Job -{ - fields - { - modify(Blocked) - { - trigger OnAfterValidate() - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - if Rec.Blocked <> Rec.Blocked::" " then - if FSConnectionSetup.IsEnabled() then - MoveFilterOnProjectTaskMapping(); - end; - } - modify("Apply Usage Link") - { - trigger OnAfterValidate() - var - FSConnectionSetup: Record "FS Connection Setup"; - begin - if FSConnectionSetup.IsEnabled() then - MoveFilterOnProjectTaskMapping(); - end; - } - } - - local procedure MoveFilterOnProjectTaskMapping() - var - IntegrationTableMapping: Record "Integration Table Mapping"; - JobTask: Record "Job Task"; - begin - if Rec.Blocked <> Rec.Blocked::" " then - exit; - - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - IntegrationTableMapping.SetRange("Table ID", Database::"Job Task"); - IntegrationTableMapping.SetRange("Integration Table ID", Database::"FS Project Task"); - if not IntegrationTableMapping.FindFirst() then - exit; - - JobTask.SetRange("Job No.", Rec."No."); - JobTask.SetCurrentKey(SystemCreatedAt); - JobTask.SetAscending(SystemCreatedAt, true); - if not JobTask.FindFirst() then - exit; - - if JobTask.SystemCreatedAt = 0DT then begin - IntegrationTableMapping."Synch. Int. Tbl. Mod. On Fltr." := 0DT; - IntegrationTableMapping.Modify(); - exit; - end; - - if IntegrationTableMapping."Synch. Int. Tbl. Mod. On Fltr." > JobTask.SystemCreatedAt then begin - IntegrationTableMapping."Synch. Int. Tbl. Mod. On Fltr." := JobTask.SystemCreatedAt; - IntegrationTableMapping.Modify(); - end; - end; -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobCue.TableExt.al b/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobCue.TableExt.al deleted file mode 100644 index abd3f3865e..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobCue.TableExt.al +++ /dev/null @@ -1,28 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Projects.RoleCenters; -using Microsoft.Integration.SyncEngine; - -tableextension 6613 "FS Job Cue" extends "Job Cue" -{ - fields - { - field(12000; "Coupled Data Sync Errors"; Integer) - { - CalcFormula = count("CRM Integration Record" where(Skipped = const(true))); - Caption = 'Coupled Data Synch Errors'; - FieldClass = FlowField; - } - field(12001; "FS Int. Errors"; Integer) - { - CalcFormula = count("Integration Synch. Job Errors"); - Caption = 'Field Service Integration Errors'; - FieldClass = FlowField; - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobTask.TableExt.al b/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobTask.TableExt.al deleted file mode 100644 index 1e77f88101..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSJobTask.TableExt.al +++ /dev/null @@ -1,22 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Projects.Project.Job; - -tableextension 6611 "FS Job Task" extends "Job Task" -{ - fields - { - field(12000; "Coupled to FS"; Boolean) - { - FieldClass = FlowField; - Caption = 'Coupled to Field Service'; - Editable = false; - CalcFormula = exist("CRM Integration Record" where("Integration ID" = field(SystemId), "Table ID" = const(Database::"Job Task"))); - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSLocation.TableExt.al b/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSLocation.TableExt.al deleted file mode 100644 index 9443bf8f91..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSLocation.TableExt.al +++ /dev/null @@ -1,22 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Inventory.Location; -using Microsoft.Integration.Dataverse; - -tableextension 6614 "FS Location" extends Location -{ - fields - { - field(12000; "Coupled to FS"; Boolean) - { - FieldClass = FlowField; - Caption = 'Coupled to Field Service'; - Editable = false; - CalcFormula = exist("CRM Integration Record" where("Integration ID" = field(SystemId), "Table ID" = const(Database::Location))); - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSServiceItem.TableExt.al b/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSServiceItem.TableExt.al deleted file mode 100644 index 52ebe79b1c..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Table Extensions/FSServiceItem.TableExt.al +++ /dev/null @@ -1,22 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.Dataverse; -using Microsoft.Service.Item; - -tableextension 6612 "FS Service Item" extends "Service Item" -{ - fields - { - field(12000; "Coupled to FS"; Boolean) - { - FieldClass = FlowField; - Caption = 'Coupled to Field Service'; - Editable = false; - CalcFormula = exist("CRM Integration Record" where("Integration ID" = field(SystemId), "Table ID" = const(Database::"Service Item"))); - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResource.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResource.Table.al deleted file mode 100644 index 013ade00d3..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResource.Table.al +++ /dev/null @@ -1,501 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6610 "FS Bookable Resource" -{ - ExternalName = 'bookableresource'; - TableType = CRM; - Description = 'Resource that has capacity which can be allocated to work.'; - DataClassification = SystemMetadata; - - fields - { - field(1; BookableResourceId; GUID) - { - ExternalName = 'bookableresourceid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Unique identifier of the resource.'; - Caption = 'Bookable Resource'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was created.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was modified.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who created the record.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who modified the record.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(15; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(20; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(21; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(22; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(24; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(25; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(26; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(27; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(28; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(29; Name; Text[100]) - { - ExternalName = 'name'; - ExternalType = 'String'; - Description = 'Type the name of the resource.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(30; ProcessId; GUID) - { - ExternalName = 'processid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Contains the id of the process associated with the entity.'; - Caption = 'Process Id'; - DataClassification = SystemMetadata; - } - field(31; StageId; GUID) - { - ExternalName = 'stageid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Contains the id of the stage where the entity is located.'; - Caption = '(Deprecated) Stage Id'; - DataClassification = SystemMetadata; - } - field(32; TraversedPath; Text[1250]) - { - ExternalName = 'traversedpath'; - ExternalType = 'String'; - Description = 'A comma separated list of string values representing the unique identifiers of stages in a Business Process Flow Instance in the order that they occur.'; - Caption = '(Deprecated) Traversed Path'; - DataClassification = SystemMetadata; - } - field(33; AccountId; GUID) - { - ExternalName = 'accountid'; - ExternalType = 'Lookup'; - Description = 'Select the account that represents this resource.'; - Caption = 'Account'; - TableRelation = "CRM Account".AccountId; - DataClassification = SystemMetadata; - } - field(35; ContactId; GUID) - { - ExternalName = 'contactid'; - ExternalType = 'Lookup'; - Description = 'Select the contact that represents this resource.'; - Caption = 'Contact'; - TableRelation = "CRM Contact".ContactId; - DataClassification = SystemMetadata; - } - field(36; ResourceType; Option) - { - ExternalName = 'resourcetype'; - ExternalType = 'Picklist'; - ExternalAccess = Insert; - Description = 'Select whether the resource is a user, equipment, contact, account, generic resource or a group of resources.'; - Caption = 'Resource Type'; - InitValue = User; - OptionMembers = Generic,Contact,User,Equipment,Account,Crew,Facility,Pool; - OptionOrdinalValues = 1, 2, 3, 4, 5, 6, 7, 8; - DataClassification = SystemMetadata; - } - field(38; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Bookable Resource'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(40; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Bookable Resource'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(42; TimeZone; Integer) - { - ExternalName = 'timezone'; - ExternalType = 'Integer'; - Description = 'Specifies the timezone for the resource''s working hours.'; - Caption = 'Time Zone'; - DataClassification = SystemMetadata; - } - field(43; UserId; GUID) - { - ExternalName = 'userid'; - ExternalType = 'Lookup'; - ExternalAccess = Insert; - Description = 'Select the user who represents this resource.'; - Caption = 'User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(44; ExchangeRate; Decimal) - { - ExternalName = 'exchangerate'; - ExternalType = 'Decimal'; - ExternalAccess = Read; - Description = 'Exchange rate for the currency associated with the bookableresource with respect to the base currency.'; - Caption = 'ExchangeRate'; - DataClassification = SystemMetadata; - } - field(45; TransactionCurrencyId; GUID) - { - ExternalName = 'transactioncurrencyid'; - ExternalType = 'Lookup'; - Description = 'Exchange rate for the currency associated with the BookableResource with respect to the base currency.'; - Caption = 'Currency'; - TableRelation = "CRM Transactioncurrency".TransactionCurrencyId; - DataClassification = SystemMetadata; - } - field(56; DeriveCapacity; Boolean) - { - ExternalName = 'msdyn_derivecapacity'; - ExternalType = 'Boolean'; - Description = ''; - Caption = 'Derive Capacity From Group Members'; - DataClassification = SystemMetadata; - } - field(58; DisplayOnScheduleAssistant; Boolean) - { - ExternalName = 'msdyn_displayonscheduleassistant'; - ExternalType = 'Boolean'; - Description = 'Specify if this resource should be enabled for availablity search.'; - Caption = 'Enable for Availability Search'; - DataClassification = SystemMetadata; - } - field(60; DisplayOnScheduleBoard; Boolean) - { - ExternalName = 'msdyn_displayonscheduleboard'; - ExternalType = 'Boolean'; - Description = 'Specify if this resource should be displayed on the schedule board.'; - Caption = 'Display On Schedule Board'; - DataClassification = SystemMetadata; - } - field(62; EndLocation; Option) - { - ExternalName = 'msdyn_endlocation'; - ExternalType = 'Picklist'; - Description = 'Shows the default ending location type when booking daily schedules for this resource.'; - Caption = 'End Location'; - InitValue = LocationAgnostic; - OptionMembers = LocationAgnostic,ResourceAddress,OrganizationalUnitAddress; - OptionOrdinalValues = 690970002, 690970000, 690970001; - DataClassification = SystemMetadata; - } - field(64; GenericType; Option) - { - ExternalName = 'msdyn_generictype'; - ExternalType = 'Picklist'; - Description = ''; - Caption = 'Generic Type (Deprecated)'; - InitValue = " "; - OptionMembers = " ",ServiceCenter; - OptionOrdinalValues = -1, 690970000; - DataClassification = SystemMetadata; - } - field(67; PrimaryEMail; Text[100]) - { - ExternalName = 'msdyn_primaryemail'; - ExternalType = 'String'; - Description = ''; - Caption = 'Primary Email'; - DataClassification = SystemMetadata; - } - field(68; StartLocation; Option) - { - ExternalName = 'msdyn_startlocation'; - ExternalType = 'Picklist'; - Description = 'Shows the default starting location type when booking daily schedules for this resource.'; - Caption = 'Start Location'; - InitValue = LocationAgnostic; - OptionMembers = LocationAgnostic,ResourceAddress,OrganizationalUnitAddress; - OptionOrdinalValues = 690970002, 690970000, 690970001; - DataClassification = SystemMetadata; - } - field(70; TargetUtilization; Integer) - { - ExternalName = 'msdyn_targetutilization'; - ExternalType = 'Integer'; - Description = 'Shows the target utilization for the resource.'; - Caption = 'Target Utilization'; - DataClassification = SystemMetadata; - } - field(72; EnableAppointments; Option) - { - ExternalName = 'msdyn_enableappointments'; - ExternalType = 'Picklist'; - Description = 'Enable appointments to display on the new schedule board and be considered in availability search for resources.'; - Caption = 'Include Appointments'; - InitValue = Yes; - OptionMembers = No,Yes; - OptionOrdinalValues = 192350000, 192350001; - DataClassification = SystemMetadata; - } - field(74; EnableOutlookSchedules; Option) - { - ExternalName = 'msdyn_enableoutlookschedules'; - ExternalType = 'Picklist'; - Description = 'This only applies when directly calling the API. It does not apply when the Book button is clicked on the Schedule Board or on any schedulable entity.'; - Caption = 'Include Outlook Free/Busy in Search Resource Availability API'; - InitValue = Yes; - OptionMembers = No,Yes; - OptionOrdinalValues = 192350000, 192350001; - DataClassification = SystemMetadata; - } - field(76; BookingsToDrip; Integer) - { - ExternalName = 'msdyn_bookingstodrip'; - ExternalType = 'Integer'; - Description = 'The number of bookings to drip on the Mobile . This field is disabled/enabled based on Enable Drip Scheduling field'; - Caption = 'Bookings To Drip'; - DataClassification = SystemMetadata; - } - field(77; EnabledForFieldServiceMobile; Boolean) - { - ExternalName = 'msdyn_enabledforfieldservicemobile'; - ExternalType = 'Boolean'; - Description = 'Set this field to Yes if this resource requires access to the legacy Field Service Mobile application.'; - Caption = 'Enable for Field Service Mobile (legacy Xamarin app)'; - DataClassification = SystemMetadata; - } - field(79; EnableDripScheduling; Boolean) - { - ExternalName = 'msdyn_enabledripscheduling'; - ExternalType = 'Boolean'; - Description = 'Enables drip scheduling on the mobile app.'; - Caption = 'Enable Drip Scheduling'; - DataClassification = SystemMetadata; - } - field(81; HourlyRate; Decimal) - { - ExternalName = 'msdyn_hourlyrate'; - ExternalType = 'Money'; - Description = ''; - Caption = 'Hourly Rate'; - DataClassification = SystemMetadata; - } - field(82; HourlyRate_Base; Decimal) - { - ExternalName = 'msdyn_hourlyrate_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Value of the Hourly Rate in base currency.'; - Caption = 'Hourly Rate (Base)'; - DataClassification = SystemMetadata; - } - field(83; TimeOffApprovalRequired; Boolean) - { - ExternalName = 'msdyn_timeoffapprovalrequired'; - ExternalType = 'Boolean'; - Description = 'Specifies if approval required for Time Off Requests.'; - Caption = 'Time Off Approval Required'; - DataClassification = SystemMetadata; - } - field(87; CrewStrategy; Option) - { - ExternalName = 'msdyn_crewstrategy'; - ExternalType = 'Picklist'; - Description = 'Crew Strategy'; - Caption = 'Crew Strategy'; - InitValue = " "; - OptionMembers = " ",CrewLeaderManagement,"CrewMemberSelf-Management","CascadeAndAcceptCascadeCompletely(NotRecommended)"; - OptionOrdinalValues = -1, 192350001, 192350002, 192350000; - DataClassification = SystemMetadata; - } - field(89; InternalFlags; BLOB) - { - ExternalName = 'msdyn_internalflags'; - ExternalType = 'Memo'; - Description = 'For internal use only.'; - Caption = 'Internal Flags'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(90; Latitude; Decimal) - { - ExternalName = 'msdyn_latitude'; - ExternalType = 'Double'; - Description = 'The location latitude.'; - Caption = 'Latitude'; - DataClassification = SystemMetadata; - } - field(91; Longitude; Decimal) - { - ExternalName = 'msdyn_longitude'; - ExternalType = 'Double'; - Description = 'The location longitude.'; - Caption = 'Longitude'; - DataClassification = SystemMetadata; - } - field(92; LocationTimestamp; Datetime) - { - ExternalName = 'msdyn_locationtimestamp'; - ExternalType = 'DateTime'; - Description = 'The location timestamp.'; - Caption = 'Location Timestamp'; - DataClassification = SystemMetadata; - } - field(93; CompanyId; GUID) - { - ExternalName = 'bcbi_company'; - ExternalType = 'Lookup'; - Description = 'Business Central Company'; - Caption = 'Company Id'; - TableRelation = "CDS Company".CompanyId; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; BookableResourceId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBooking.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBooking.Table.al deleted file mode 100644 index f566b60040..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBooking.Table.al +++ /dev/null @@ -1,636 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6611 "FS Bookable Resource Booking" -{ - ExternalName = 'bookableresourcebooking'; - TableType = CRM; - Description = 'Represents the line details of a resource booking.'; - DataClassification = SystemMetadata; - - fields - { - field(1; BookableResourceBookingId; GUID) - { - ExternalName = 'bookableresourcebookingid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Unique identifier of the resource booking.'; - Caption = 'Bookable Resource Booking'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was created.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was modified.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who created the record.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who modified the record.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(15; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(20; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(21; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(22; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(24; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(25; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(26; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(27; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(28; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(29; Name; Text[100]) - { - ExternalName = 'name'; - ExternalType = 'String'; - Description = 'Type a name for the booking.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(30; ProcessId; GUID) - { - ExternalName = 'processid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Contains the id of the process associated with the entity.'; - Caption = 'Process Id'; - DataClassification = SystemMetadata; - } - field(31; StageId; GUID) - { - ExternalName = 'stageid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Contains the id of the stage where the entity is located.'; - Caption = '(Deprecated) Stage Id'; - DataClassification = SystemMetadata; - } - field(32; TraversedPath; Text[1250]) - { - ExternalName = 'traversedpath'; - ExternalType = 'String'; - Description = 'A comma separated list of string values representing the unique identifiers of stages in a Business Process Flow Instance in the order that they occur.'; - Caption = '(Deprecated) Traversed Path'; - DataClassification = SystemMetadata; - } - field(34; BookingType; Option) - { - ExternalName = 'bookingtype'; - ExternalType = 'Picklist'; - Description = 'Select whether the booking is solid or liquid. Solid bookings are firm and cannot be changed whereas liquid bookings can be changed.'; - Caption = 'Booking Type'; - InitValue = Solid; - OptionMembers = Liquid,Solid; - OptionOrdinalValues = 2, 1; - DataClassification = SystemMetadata; - } - field(36; Duration; Integer) - { - ExternalName = 'duration'; - ExternalType = 'Integer'; - Description = 'Enter the duration of the booking.'; - Caption = 'Duration'; - DataClassification = SystemMetadata; - } - field(37; EndTime; Datetime) - { - ExternalName = 'endtime'; - ExternalType = 'DateTime'; - Description = 'Enter the end date and time of the booking.'; - Caption = 'End Time'; - DataClassification = SystemMetadata; - } - field(38; Header; GUID) - { - ExternalName = 'header'; - ExternalType = 'Lookup'; - Description = 'Shows the reference to the booking header record that represents the summary of bookings.'; - Caption = 'Header'; - TableRelation = "FS BookableResourceBookingHdr".BookableResourceBookingHeaderId; - DataClassification = SystemMetadata; - } - field(39; Resource; GUID) - { - ExternalName = 'resource'; - ExternalType = 'Lookup'; - Description = 'Shows the resource that is booked.'; - Caption = 'Resource'; - TableRelation = "FS Bookable Resource".BookableResourceId; - DataClassification = SystemMetadata; - } - field(40; StartTime; Datetime) - { - ExternalName = 'starttime'; - ExternalType = 'DateTime'; - Description = 'Enter the start date and time of the booking.'; - Caption = 'Start Time'; - DataClassification = SystemMetadata; - } - field(41; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Bookable Resource Booking'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(43; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Bookable Resource Booking'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(45; ExchangeRate; Decimal) - { - ExternalName = 'exchangerate'; - ExternalType = 'Decimal'; - ExternalAccess = Read; - Description = 'Exchange rate for the currency associated with the bookableresourcebooking with respect to the base currency.'; - Caption = 'ExchangeRate'; - DataClassification = SystemMetadata; - } - field(46; TransactionCurrencyId; GUID) - { - ExternalName = 'transactioncurrencyid'; - ExternalType = 'Lookup'; - Description = 'Exchange rate for the currency associated with the BookableResourceBooking with respect to the base currency.'; - Caption = 'Currency'; - TableRelation = "CRM Transactioncurrency".TransactionCurrencyId; - DataClassification = SystemMetadata; - } - field(47; ResourceName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource".Name where(BookableResourceId = field(Resource))); - ExternalName = 'resourcename'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(48; HeaderName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS BookableResourceBookingHdr".Name where(BookableResourceBookingHeaderId = field(Header))); - ExternalName = 'headername'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(51; ActualArrivalTime; Datetime) - { - ExternalName = 'msdyn_actualarrivaltime'; - ExternalType = 'DateTime'; - Description = 'Shows the time that work started.'; - Caption = 'Actual Arrival Time'; - DataClassification = SystemMetadata; - } - field(52; ActualTravelDuration; Integer) - { - ExternalName = 'msdyn_actualtravelduration'; - ExternalType = 'Integer'; - Description = 'Shows the total travel duration. Calculated based on the difference between the Bookable Resource Booking''s start time and actual arrival time.'; - Caption = 'Actual Travel Duration'; - DataClassification = SystemMetadata; - } - field(53; AllowOverlapping; Boolean) - { - ExternalName = 'msdyn_allowoverlapping'; - ExternalType = 'Boolean'; - Description = 'Allow the time of this booking to be displayed on the schedule assistant as available.'; - Caption = 'Allow Overlapping'; - DataClassification = SystemMetadata; - } - field(56; BookingMethod; Option) - { - ExternalName = 'msdyn_bookingmethod'; - ExternalType = 'Picklist'; - Description = 'Shows the method used to create this booking.'; - Caption = 'Booking Method'; - InitValue = Manual; - OptionMembers = ResourceSchedulingOptimization,"System-AgreementSchedule",ScheduleBoard,Mobile,Manual,ScheduleAssistant; - OptionOrdinalValues = 192350000, 690970005, 690970001, 690970002, 690970003, 690970004; - DataClassification = SystemMetadata; - } - field(59; CascadeCrewChanges; Boolean) - { - ExternalName = 'msdyn_cascadecrewchanges'; - ExternalType = 'Boolean'; - Description = 'Defines whether changing any of the following fields (Start Time, End Time, Status) should cascade the changes to other bookings on this requirement that have the same start and end time.'; - Caption = 'Cascade Crew Changes'; - DataClassification = SystemMetadata; - } - field(61; AcceptCascadeCrewChanges; Boolean) - { - ExternalName = 'msdyn_acceptcascadecrewchanges'; - ExternalType = 'Boolean'; - Description = 'Defines whether this booking accepts changes propagated as cascading changes'; - Caption = 'Accept Cascade Crew Changes'; - DataClassification = SystemMetadata; - } - field(63; effort; Decimal) - { - ExternalName = 'msdyn_effort'; - ExternalType = 'Decimal'; - Description = 'Capacity that needs to take from resource capacity'; - Caption = 'Capacity'; - DataClassification = SystemMetadata; - } - field(64; EstimatedArrivalTime; Datetime) - { - ExternalName = 'msdyn_estimatedarrivaltime'; - ExternalType = 'DateTime'; - Description = 'Estimated Arrival Time'; - Caption = 'Estimated Arrival Time'; - DataClassification = SystemMetadata; - } - field(65; EstimatedTravelDuration; Integer) - { - ExternalName = 'msdyn_estimatedtravelduration'; - ExternalType = 'Integer'; - Description = 'Estimated Travel Duration'; - Caption = 'Estimated Travel Duration'; - DataClassification = SystemMetadata; - } - field(66; URSInternalFlags; BLOB) - { - ExternalName = 'msdyn_ursinternalflags'; - ExternalType = 'Memo'; - Description = 'For internal use only.'; - Caption = 'Internal Flags'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(67; Latitude; Decimal) - { - ExternalName = 'msdyn_latitude'; - ExternalType = 'Double'; - Description = ''; - Caption = 'Latitude'; - DataClassification = SystemMetadata; - } - field(68; Longitude; Decimal) - { - ExternalName = 'msdyn_longitude'; - ExternalType = 'Double'; - Description = ''; - Caption = 'Longitude'; - DataClassification = SystemMetadata; - } - field(69; MilesTraveled; Decimal) - { - ExternalName = 'msdyn_milestraveled'; - ExternalType = 'Double'; - Description = 'In this field you can enter the total miles the resource drove to the job site'; - Caption = 'Miles Traveled'; - DataClassification = SystemMetadata; - } - field(71; ResourceGroup; GUID) - { - ExternalName = 'msdyn_resourcegroup'; - ExternalType = 'Lookup'; - Description = 'Unique identifier for Resource associated with Resource Booking'; - Caption = 'Resource Group'; - TableRelation = "FS Bookable Resource".BookableResourceId; - DataClassification = SystemMetadata; - } - field(74; WorkLocation; Option) - { - ExternalName = 'msdyn_worklocation'; - ExternalType = 'Picklist'; - Description = ''; - Caption = 'Work Location'; - InitValue = " "; - OptionMembers = " ",Onsite,Facility,LocationAgnostic; - OptionOrdinalValues = -1, 690970000, 690970001, 690970002; - DataClassification = SystemMetadata; - } - field(78; ResourceGroupName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource".Name where(BookableResourceId = field(ResourceGroup))); - ExternalName = 'msdyn_resourcegroupname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(82; BaseTravelDuration; Integer) - { - ExternalName = 'msdyn_basetravelduration'; - ExternalType = 'Integer'; - Description = 'The Base travel duration indicates the travel time without traffic'; - Caption = 'Base Travel Duration'; - DataClassification = SystemMetadata; - } - field(83; requirementgroupset; Text[40]) - { - ExternalName = 'msdyn_requirementgroupset'; - ExternalType = 'String'; - Description = 'Requirement Group Set'; - Caption = 'Requirement Group Set'; - DataClassification = SystemMetadata; - } - field(84; TravelTimeCalculationType; Option) - { - ExternalName = 'msdyn_traveltimecalculationtype'; - ExternalType = 'Picklist'; - Description = 'Travel Time Calculation'; - Caption = 'Travel Time Calculation'; - InitValue = BingMapsWithoutHistoricalTraffic; - OptionMembers = BingMapsWithoutHistoricalTraffic,BingMapsWithHistoricalTraffic,CustomMapProvider,Approximate; - OptionOrdinalValues = 192350000, 192350001, 192350002, 192350003; - DataClassification = SystemMetadata; - } - field(87; InternalFlags; BLOB) - { - ExternalName = 'msdyn_internalflags'; - ExternalType = 'Memo'; - Description = 'For internal use only.'; - Caption = 'Internal Flags'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(88; OfflineTimestamp; Datetime) - { - ExternalName = 'msdyn_offlinetimestamp'; - ExternalType = 'DateTime'; - Description = 'Internal Use. This field is used to capture the time when the Booking was updated on mobile offline.'; - Caption = 'Offline Timestamp'; - DataClassification = SystemMetadata; - } - field(89; PreventTimestampCreation; Boolean) - { - ExternalName = 'msdyn_preventtimestampcreation'; - ExternalType = 'Boolean'; - Description = 'Prevents time stamp creation if the time stamp was already created on a mobile device.'; - Caption = 'Prevent Timestamp Creation'; - DataClassification = SystemMetadata; - } - field(91; Signature; BLOB) - { - ExternalName = 'msdyn_signature'; - ExternalType = 'Memo'; - Description = 'This field is used for capturing signature on Mobile (using the Pen Control)'; - Caption = 'Signature'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(92; SlotText; BLOB) - { - ExternalName = 'msdyn_slottext'; - ExternalType = 'Memo'; - Description = 'Shows the automatically generated text of the time slot on the schedule board.'; - Caption = 'Slot Text'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(93; TotalBillableDuration; Integer) - { - ExternalName = 'msdyn_totalbillableduration'; - ExternalType = 'Integer'; - Description = 'Shows the total billable duration. If you leave this field blank the system automatically determines the billable duration by calculating the resource journal details.'; - Caption = 'Total Billable Duration'; - DataClassification = SystemMetadata; - } - field(94; TotalBreakDuration; Integer) - { - ExternalName = 'msdyn_totalbreakduration'; - ExternalType = 'Integer'; - Description = 'Shows the total break duration. If you leave this field blank the system automatically determines the break duration by calculating the resource journal details.'; - Caption = 'Total Break Duration'; - DataClassification = SystemMetadata; - } - field(95; TotalCost; Decimal) - { - ExternalName = 'msdyn_totalcost'; - ExternalType = 'Money'; - Description = 'Shows the total cost for this booking.'; - Caption = 'Total Cost'; - DataClassification = SystemMetadata; - } - field(96; totalcost_Base; Decimal) - { - ExternalName = 'msdyn_totalcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Value of the Total Cost in base currency.'; - Caption = 'Total Cost (Base)'; - DataClassification = SystemMetadata; - } - field(97; TotalDurationInProgress; Integer) - { - ExternalName = 'msdyn_totaldurationinprogress'; - ExternalType = 'Integer'; - Description = 'Shows the total duration that this booking was in progress.'; - Caption = 'Total Duration In Progress'; - DataClassification = SystemMetadata; - } - field(98; TravelTimeRescheduling; Boolean) - { - ExternalName = 'msdyn_traveltimerescheduling'; - ExternalType = 'Boolean'; - Description = ''; - Caption = 'Travel Time Rescheduling (Deprecated)'; - DataClassification = SystemMetadata; - } - field(100; WorkOrder; GUID) - { - ExternalName = 'msdyn_workorder'; - ExternalType = 'Lookup'; - Description = 'Unique identifier for Work Order associated with Resource Booking.'; - Caption = 'Work Order'; - TableRelation = "FS Work Order".WorkOrderId; - DataClassification = SystemMetadata; - } - field(102; WorkOrderName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order".Name where(WorkOrderId = field(WorkOrder))); - ExternalName = 'msdyn_workordername'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(103; Crew; GUID) - { - ExternalName = 'msdyn_crew'; - ExternalType = 'Lookup'; - Description = 'This field is populated by the Field Service solution to define to which crew a booking is connected.'; - Caption = 'Crew'; - TableRelation = "FS Bookable Resource".BookableResourceId; - DataClassification = SystemMetadata; - } - field(104; CrewMemberType; Option) - { - ExternalName = 'msdyn_crewmembertype'; - ExternalType = 'Picklist'; - Description = 'Crew Member Type'; - Caption = 'Crew Member Type'; - InitValue = " "; - OptionMembers = " ",Leader,Member,None; - OptionOrdinalValues = -1, 192350000, 192350001, 192350002; - DataClassification = SystemMetadata; - } - field(106; QuickNoteAction; Option) - { - ExternalName = 'msdyn_quickNoteAction'; - ExternalType = 'Picklist'; - Description = 'Internal For Quick note pcf control actions'; - Caption = 'Quick note actions'; - InitValue = None; - OptionMembers = None,Text,Photo,Video,Audio,File; - OptionOrdinalValues = 100000000, 100000001, 100000002, 100000003, 100000004, 100000005; - DataClassification = SystemMetadata; - } - field(108; CrewName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource".Name where(BookableResourceId = field(Crew))); - ExternalName = 'msdyn_crewname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - } - keys - { - key(PK; BookableResourceBookingId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBookingHdr.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBookingHdr.Table.al deleted file mode 100644 index 8a12e8c01c..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSBookableResourceBookingHdr.Table.al +++ /dev/null @@ -1,308 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6612 "FS BookableResourceBookingHdr" -{ - ExternalName = 'bookableresourcebookingheader'; - TableType = CRM; - Description = 'Reservation entity representing the summary of the associated resource bookings.'; - DataClassification = SystemMetadata; - - fields - { - field(1; BookableResourceBookingHeaderId; GUID) - { - ExternalName = 'bookableresourcebookingheaderid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Unique identifier of the resource booking header.'; - Caption = 'Bookable Resource Booking Header'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was created.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was modified.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who created the record.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who modified the record.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(15; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(20; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(21; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(22; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(24; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(25; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(26; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(27; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(28; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(29; Name; Text[100]) - { - ExternalName = 'name'; - ExternalType = 'String'; - Description = 'The name of the booking summary.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(30; ProcessId; GUID) - { - ExternalName = 'processid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Contains the id of the process associated with the entity.'; - Caption = 'Process Id'; - DataClassification = SystemMetadata; - } - field(31; StageId; GUID) - { - ExternalName = 'stageid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Contains the id of the stage where the entity is located.'; - Caption = '(Deprecated) Stage Id'; - DataClassification = SystemMetadata; - } - field(32; TraversedPath; Text[1250]) - { - ExternalName = 'traversedpath'; - ExternalType = 'String'; - Description = 'A comma separated list of string values representing the unique identifiers of stages in a Business Process Flow Instance in the order that they occur.'; - Caption = '(Deprecated) Traversed Path'; - DataClassification = SystemMetadata; - } - field(33; Duration; Integer) - { - ExternalName = 'duration'; - ExternalType = 'Integer'; - Description = 'Shows the aggregate duration of the linked bookings.'; - Caption = 'Duration'; - DataClassification = SystemMetadata; - } - field(34; EndTime; Datetime) - { - ExternalName = 'endtime'; - ExternalType = 'DateTime'; - Description = 'Shows the end date and time of the booking summary.'; - Caption = 'End Time'; - DataClassification = SystemMetadata; - } - field(35; StartTime; Datetime) - { - ExternalName = 'starttime'; - ExternalType = 'DateTime'; - Description = 'Shows the start date and time of the booking summary.'; - Caption = 'Start Time'; - DataClassification = SystemMetadata; - } - field(36; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Bookable Resource Booking Header'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(38; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Bookable Resource Booking Header'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(40; ExchangeRate; Decimal) - { - ExternalName = 'exchangerate'; - ExternalType = 'Decimal'; - ExternalAccess = Read; - Description = 'Exchange rate for the currency associated with the bookableresourcebookingheader with respect to the base currency.'; - Caption = 'ExchangeRate'; - DataClassification = SystemMetadata; - } - field(41; TransactionCurrencyId; GUID) - { - ExternalName = 'transactioncurrencyid'; - ExternalType = 'Lookup'; - Description = 'Exchange rate for the currency associated with the BookableResourceBookingHeader with respect to the base currency.'; - Caption = 'Currency'; - TableRelation = "CRM Transactioncurrency".TransactionCurrencyId; - DataClassification = SystemMetadata; - } - field(43; BookableResourceId; GUID) - { - ExternalName = 'msdyn_bookableresourceid'; - ExternalType = 'Lookup'; - Description = 'Bookable Resource'; - Caption = 'Bookable Resource'; - TableRelation = "FS Bookable Resource".BookableResourceId; - DataClassification = SystemMetadata; - } - field(45; BookingType; Option) - { - ExternalName = 'msdyn_bookingtype'; - ExternalType = 'Picklist'; - Description = 'Select whether the booking is solid or liquid. Solid bookings are firm and cannot be changed whereas liquid bookings can be changed.'; - Caption = 'Booking Type'; - InitValue = Solid; - OptionMembers = Solid,Liquid; - OptionOrdinalValues = 1, 2; - DataClassification = SystemMetadata; - } - field(48; BookableResourceIdName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource".Name where(BookableResourceId = field(BookableResourceId))); - ExternalName = 'msdyn_bookableresourceidname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - } - keys - { - key(PK; BookableResourceBookingHeaderId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSConnectionSetup.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSConnectionSetup.Table.al deleted file mode 100644 index 1aa8d0defe..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSConnectionSetup.Table.al +++ /dev/null @@ -1,1054 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.CRM.Outlook; -using Microsoft.Foundation.UOM; -using Microsoft.Integration.Dataverse; -using Microsoft.Integration.D365Sales; -using Microsoft.Integration.SyncEngine; -using Microsoft.Service.Item; -using Microsoft.Projects.Project.Job; -using Microsoft.Projects.Project.Journal; -using System.Environment; -using System.Environment.Configuration; -using System.Security.Encryption; -using System.Threading; -using Microsoft.Projects.Resources.Resource; - -table 6623 "FS Connection Setup" -{ - Caption = 'Dynamics 365 Field Service Integration Setup'; - Permissions = tabledata "FS Connection Setup" = r; - InherentEntitlements = rX; - InherentPermissions = rX; - DataClassification = CustomerContent; - ReplicateData = true; - - fields - { - field(1; "Primary Key"; Code[20]) - { - DataClassification = SystemMetadata; - Caption = 'Primary Key'; - } - field(2; "Server Address"; Text[250]) - { - DataClassification = OrganizationIdentifiableInformation; - Caption = 'Field Service URL'; - - trigger OnValidate() - var - EnvironmentInfo: Codeunit "Environment Information"; - begin - CRMIntegrationManagement.CheckModifyCRMConnectionURL("Server Address"); - - if "Server Address" <> '' then - if EnvironmentInfo.IsSaaS() or (StrPos("Server Address", '.dynamics.com') > 0) then - "Authentication Type" := "Authentication Type"::Office365 - else - "Authentication Type" := "Authentication Type"::AD; - UpdateConnectionString(); - end; - } - field(3; "User Name"; Text[250]) - { - Caption = 'User Name'; - DataClassification = EndUserIdentifiableInformation; - - trigger OnValidate() - begin - "User Name" := DelChr("User Name", '<>'); - CheckUserName(); - UpdateDomainName(); - UpdateConnectionString(); - end; - } - field(4; "User Password Key"; Guid) - { - Caption = 'User Password Key'; - DataClassification = EndUserPseudonymousIdentifiers; - - trigger OnValidate() - begin - if not IsTemporary() then - if "User Password Key" <> xRec."User Password Key" then - xRec.DeletePassword(); - end; - } - field(59; "Restore Connection"; Boolean) - { - DataClassification = SystemMetadata; - Caption = 'Restore Connection'; - } - field(60; "Is Enabled"; Boolean) - { - DataClassification = SystemMetadata; - Caption = 'Is Enabled'; - - trigger OnValidate() - var - CRMConnectionSetup: Record "CRM Connection Setup"; - FSSetupDefaults: Codeunit "FS Setup Defaults"; - CRMConnectionSetupPage: Page "CRM Connection Setup"; - begin - if "Is Enabled" then begin - TestField("Job Journal Template"); - TestField("Job Journal Batch"); - if not CRMConnectionSetup.IsEnabled() then - Error(CRMConnSetupMustBeEnabledErr, CRMConnectionSetupPage.Caption()); - if "Hour Unit of Measure" = '' then - Error(HourUnitOfMeasureMustBePickedErr); - if not RemoveExistingCouplingOfResources() then - Error(''); - end; - UpdateConnectionDetails(); - RefreshDataFromFS(); - if "Is Enabled" then begin - TestIntegrationUserRequirements(); - FSSetupDefaults.ResetConfiguration(Rec); - Session.LogMessage('0000MAT', CRMConnEnabledTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - end else - Session.LogMessage('0000MAU', CRMConnDisabledTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - end; - } - field(63; "FS Version"; Text[30]) - { - DataClassification = SystemMetadata; - Caption = 'Field Service Version'; - } - field(67; "Is FS Solution Installed"; Boolean) - { - DataClassification = SystemMetadata; - Caption = 'Is CRM Solution Installed'; - } - field(76; "Proxy Version"; Integer) - { - Caption = 'Proxy Version'; - DataClassification = SystemMetadata; - - trigger OnValidate() - begin - UpdateProxyVersionInConnectionString(); - end; - } - field(118; CurrencyDecimalPrecision; Integer) - { - DataClassification = SystemMetadata; - Caption = 'Currency Decimal Precision'; - Description = 'Number of decimal places that can be used for currency.'; - } - field(124; BaseCurrencyId; Guid) - { - DataClassification = SystemMetadata; - Caption = 'Currency'; - Description = 'Unique identifier of the base currency of the organization.'; - TableRelation = "CRM Transactioncurrency".TransactionCurrencyId; - } - field(133; BaseCurrencyPrecision; Integer) - { - DataClassification = SystemMetadata; - Caption = 'Base Currency Precision'; - Description = 'Number of decimal places that can be used for the base currency.'; - MaxValue = 4; - MinValue = 0; - } - field(134; BaseCurrencySymbol; Text[5]) - { - DataClassification = SystemMetadata; - Caption = 'Base Currency Symbol'; - Description = 'Symbol used for the base currency.'; - } - field(135; "Authentication Type"; Option) - { - DataClassification = SystemMetadata; - Caption = 'Authentication Type'; - OptionCaption = 'OAuth 2.0,AD,IFD,OAuth'; - OptionMembers = Office365,AD,IFD,OAuth; - - trigger OnValidate() - begin - case "Authentication Type" of - "Authentication Type"::Office365: - Domain := ''; - "Authentication Type"::AD: - UpdateDomainName(); - end; - UpdateConnectionString(); - end; - } - field(136; "Connection String"; Text[250]) - { - DataClassification = OrganizationIdentifiableInformation; - Caption = 'Connection String'; - } - field(137; Domain; Text[250]) - { - Caption = 'Domain'; - DataClassification = OrganizationIdentifiableInformation; - Editable = false; - } - field(138; "Server Connection String"; BLOB) - { - DataClassification = OrganizationIdentifiableInformation; - Caption = 'Server Connection String'; - } - field(139; "Disable Reason"; Text[250]) - { - DataClassification = SystemMetadata; - Caption = 'Disable Reason'; - } - field(200; "Job Journal Template"; Code[10]) - { - DataClassification = SystemMetadata; - Caption = 'Project Journal Template'; - TableRelation = "Job Journal Template"; - } - field(201; "Job Journal Batch"; Code[10]) - { - DataClassification = SystemMetadata; - Caption = 'Project Journal Batch'; - TableRelation = "Job Journal Batch".Name where("Journal Template Name" = field("Job Journal Template")); - } - field(202; "Hour Unit of Measure"; Code[10]) - { - DataClassification = SystemMetadata; - Caption = 'Hour Unit of Measure'; - TableRelation = "Unit of Measure"; - } - field(203; "Line Synch. Rule"; Enum "FS Work Order Line Synch. Rule") - { - DataClassification = SystemMetadata; - Caption = 'Synchronize work order products/services'; - } - field(204; "Line Post Rule"; Enum "FS Work Order Line Post Rule") - { - DataClassification = SystemMetadata; - Caption = 'Automatically post project journal lines'; - } - } - - keys - { - key(Key1; "Primary Key") - { - Clustered = true; - } - } - - fieldgroups - { - } - - trigger OnModify() - begin - if IsTemporary() then - exit; - if "User Password Key" <> xRec."User Password Key" then - xRec.DeletePassword(); - end; - - trigger OnDelete() - begin - if IsTemporary() then - exit; - DeletePassword(); - end; - - var - CRMIntegrationManagement: Codeunit "CRM Integration Management"; - FSIntegrationMgt: Codeunit "FS Integration Mgt."; - CDSIntegrationImpl: Codeunit "CDS Integration Impl."; - CRMProductName: Codeunit "CRM Product Name"; - IsolatedStorageManagement: Codeunit "Isolated Storage Management"; - TempUserPassword: SecretText; - ConnectionErr: Label 'The connection setup cannot be validated. Verify the settings and try again.\Detailed error description: %1.', Comment = '%1 Error message from the provider (.NET exception message)'; - ConnectionStringFormatTok: Label 'Url=%1; UserName=%2; Password=%3; ProxyVersion=%4; %5', Locked = true; - ConnectionSuccessMsg: Label 'The connection test was successful. The settings are valid.'; - DetailsMissingErr: Label 'A %1 URL and user name are required to enable a connection.', Comment = '%1 = CRM product name'; - MissingUsernameTok: Label '{USER}', Locked = true; - MissingPasswordTok: Label '{PASSWORD}', Locked = true; - AccessTokenTok: Label 'AccessToken', Locked = true; - ClientSecretConnectionStringFormatTxt: Label '%1; Url=%2; ClientId=%3; ClientSecret=%4; ProxyVersion=%5', Locked = true; - ClientSecretAuthTxt: Label 'AuthType=ClientSecret', Locked = true; - ClientSecretTok: Label '{CLIENTSECRET}', Locked = true; - CertificateConnectionStringFormatTxt: Label '%1; Url=%2; ClientId=%3; Certificate=%4; ProxyVersion=%5', Locked = true; - CertificateAuthTxt: Label 'AuthType=Certificate', Locked = true; - CertificateTok: Label '{CERTIFICATE}', Locked = true; - ClientIdTok: Label '{CLIENTID}', Locked = true; - UserNameMustIncludeDomainErr: Label 'The user name must include the domain when the authentication type is set to Active Directory.'; - UserNameMustBeEmailErr: Label 'The user name must be a valid email address when the authentication type is set to Office 365.'; - ConnectionStringPwdPlaceHolderMissingErr: Label 'The connection string must include the password placeholder {PASSWORD}.'; - ConnectionStringPwdOrClientSecretPlaceHolderMissingErr: Label 'The connection string must include either the password placeholder {PASSWORD}, the client secret placeholder {CLIENTSECRET} or the certificate placeholder {CERTIFICATE}.', Comment = '{PASSWORD}, {CERTIFICATE} and {CLIENTSECRET} are locked strings - do not translate them.'; - SystemAdminRoleTemplateIdTxt: Label '{627090FF-40A3-4053-8790-584EDC5BE201}', Locked = true; - SystemAdminErr: Label 'User %1 has the %2 role on server %3.\\You must choose a user that does not have the %2 role.', Comment = '%1 user name, %2 - security role name, %3 - server address'; - BCRolesErr: Label 'User %1 does not have the required roles on server %4.\\You must choose a user that has the roles %2 and %3.', Comment = '%1 user name, %2 - security role name, %3 - security role name, %4 - server address'; - UserNotLicensedErr: Label 'User %1 is not licensed on server %2.', Comment = '%1 user name, %2 - server address'; - UserNotActiveErr: Label 'User %1 is disabled on server %2.', Comment = '%1 user name, %2 - server address'; - UserHasNoRolesErr: Label 'User %1 has no user roles assigned on server %2.', Comment = '%1 user name, %2 - server address'; - BCIntegrationUserFSRoleIdTxt: Label '{c11b4fa8-956b-439d-8b3c-021e8736a78b}', Locked = true; - CDSConnectionMustBeEnabledErr: Label 'You must enable the connection to Dataverse before you can set up the connection to %1.\\Choose ''Set up Dataverse connection'' in %2 page.', Comment = '%1 = CRM product name, %2 = Assisted Setup page caption.'; - CRMConnectionMustBeEnabledErr: Label 'You must enable the connection to Dynamics 365 Field Service before you can set up the connection to %1.\\Choose ''Set up a connection to Dynamics 365 Field Service'' in %2 page.', Comment = '%1 = CRM product name, %2 = Assisted Setup page caption.'; - ShowDataverseConnectionSetupLbl: Label 'Show Dataverse Connection Setup'; - ShowCRMConnectionSetupLbl: Label 'Show Microsoft Dynamics 365 Connection Setup'; - DeploySucceedMsg: Label 'The solution, user roles, and entities have been deployed.'; - DeployFailedMsg: Label 'The deployment of the solution succeeded, but the deployment of user roles failed.'; - DeploySolutionFailedMsg: Label 'The deployment of the solution failed.'; - CategoryTok: Label 'AL Field Service Integration', Locked = true; - CRMConnDisabledTxt: Label 'Field Service connection has been disabled.', Locked = true; - CRMConnEnabledTxt: Label 'Field Service connection has been enabled.', Locked = true; - DefaultingToDataverseServiceClientTxt: Label 'Defaulting to DataverseServiceClient', Locked = true; - CRMConnSetupMustBeEnabledErr: label 'You must enable the connection in page %1', Comment = '%1 - page caption'; - HourUnitOfMeasureMustBePickedErr: label 'Field Service uses a fixed unit of measure for bookable resources - hour. You must pick a corresponding resource unit of measure.'; - UncoupleResourcesQst: label 'The current coupling of Resource records to Product entity will be removed. New mapping will be set up between Resource table and Bookable Resource entity. All resources will be uncoupled, but not deleted. Do you want to continue?'; - - local procedure RemoveExistingCouplingOfResources(): Boolean - var - IntegrationTableMapping: Record "Integration Table Mapping"; - CRMIntegrationRecord: Record "CRM Integration Record"; - begin - IntegrationTableMapping.SetRange("Table ID", Database::Resource); - IntegrationTableMapping.SetRange("Integration Table ID", Database::"CRM Product"); - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - - CRMIntegrationRecord.SetRange("Table ID", Database::Resource); - - if IntegrationTableMapping.IsEmpty() and CRMIntegrationRecord.IsEmpty() then - exit(true); - - if not Confirm(UncoupleResourcesQst) then - exit(false); - - if not IntegrationTableMapping.IsEmpty() then - CRMIntegrationRecord.DeleteAll(); - - IntegrationTableMapping.DeleteAll(true); - exit(true); - end; - - internal procedure EnsureCDSConnectionIsEnabled(); - var - CDSConnectionSetup: Record "CDS Connection Setup"; - begin - if Get() then - if "Is Enabled" then - exit; - - if CDSConnectionSetup.Get() then - if CDSConnectionSetup."Is Enabled" then - exit; - - CDSConnectionNotEnabledError(); - end; - - internal procedure EnsureCRMConnectionIsEnabled(); - var - CRMConnectionSetup: Record "CRM Connection Setup"; - begin - if Get() then - if "Is Enabled" then - exit; - - if CRMConnectionSetup.Get() then - if CRMConnectionSetup."Is Enabled" then - exit; - - CRMConnectionNotEnabledError(); - end; - - internal procedure LoadConnectionStringElementsFromCDSConnectionSetup(); - var - CDSConnectionSetup: Record "CDS Connection Setup"; - begin - if Get() then - if "Is Enabled" then - exit; - - if CDSConnectionSetup.Get() then - if CDSConnectionSetup."Is Enabled" then begin - "Server Address" := CDSConnectionSetup."Server Address"; - "User Name" := CDSConnectionSetup."User Name"; - "User Password Key" := CDSConnectionSetup."User Password Key"; - "Authentication Type" := CDSConnectionSetup."Authentication Type"; - "Proxy Version" := CDSConnectionSetup."Proxy Version"; - if not Modify() then - Insert(); - SetConnectionString(CDSConnectionSetup."Connection String"); - exit; - end; - - CDSConnectionNotEnabledError(); - end; - - internal procedure DeployFSSolution(ForceRedeploy: Boolean); - var - DummyCRMConnectionSetup: Record "CRM Connection Setup"; - AdminEmail: Text; - AdminPassword: SecretText; - AccessToken: SecretText; - AdminADDomain: Text; - ImportSolutionFailed: Boolean; - begin - if not ForceRedeploy and FSIntegrationMgt.IsFSSolutionInstalled() then - exit; - - DummyCRMConnectionSetup.EnsureCDSConnectionIsEnabled(); - case "Authentication Type" of - "Authentication Type"::Office365: - CDSIntegrationImpl.GetAccessToken("Server Address", true, AccessToken); - "Authentication Type"::AD: - if not PromptForCredentials(AdminEmail, AdminPassword, AdminADDomain) then - exit; - else - if not PromptForCredentials(AdminEmail, AdminPassword) then - exit; - end; - - if FSIntegrationMgt.ImportFSSolution("Server Address", "User Name", AdminEmail, AdminPassword, AccessToken, AdminADDomain, GetProxyVersion(), ForceRedeploy, ImportSolutionFailed) then - Message(DeploySucceedMsg) - else - if ImportSolutionFailed then - Message(DeploySolutionFailedMsg) - else - Message(DeployFailedMsg); - end; - - internal procedure CountCRMJobQueueEntries(var ActiveJobs: Integer; var TotalJobs: Integer) - var - JobQueueEntry: Record "Job Queue Entry"; - begin - if not "Is Enabled" then begin - TotalJobs := 0; - ActiveJobs := 0; - end else begin - if "Is FS Solution Installed" then - JobQueueEntry.SetFilter("Object ID to Run", GetJobQueueEntriesObjectIDToRunFilter()) - else - JobQueueEntry.SetRange("Object ID to Run", Codeunit::"Integration Synch. Job Runner"); - TotalJobs := JobQueueEntry.Count(); - - JobQueueEntry.SetFilter(Status, '%1|%2', JobQueueEntry.Status::Ready, JobQueueEntry.Status::"In Process"); - ActiveJobs := JobQueueEntry.Count(); - end; - end; - - internal procedure SetPassword(PasswordText: SecretText) - begin - if IsTemporary() then begin - TempUserPassword := PasswordText; - exit; - end; - if IsNullGuid("User Password Key") then - "User Password Key" := CreateGuid(); - - IsolatedStorageManagement.Set("User Password Key", PasswordText, DATASCOPE::Company); - end; - - internal procedure DeletePassword() - begin - if IsTemporary() then begin - Clear(TempUserPassword); - exit; - end; - - if IsNullGuid("User Password Key") then - exit; - - IsolatedStorageManagement.Delete(Format("User Password Key"), DATASCOPE::Company); - end; - - internal procedure RegisterConnection() - begin - if not HasTableConnection(TableConnectionType::CRM, "Primary Key") then - RegisterConnectionWithName("Primary Key"); - end; - - [NonDebuggable] - internal procedure RegisterConnectionWithName(ConnectionName: Text) - begin - RegisterTableConnection(TableConnectionType::CRM, ConnectionName, GetConnectionStringWithCredentials().Unwrap()); - SetDefaultTableConnection(TableConnectionType::CRM, GetDefaultFSConnection(ConnectionName)); - end; - - internal procedure UnregisterConnection(): Boolean - begin - exit(UnregisterConnectionWithName("Primary Key")); - end; - - [TryFunction] - internal procedure UnregisterConnectionWithName(ConnectionName: Text) - begin - UnregisterTableConnection(TableConnectionType::CRM, ConnectionName); - end; - - [NonDebuggable] - internal procedure GetConnectionStringWithCredentials() ConnectionString: SecretText - var - ConnectionStringWithPlaceholders: Text; - PasswordPlaceHolderPos: Integer; - begin - ConnectionStringWithPlaceholders := GetConnectionStringAsStoredInSetup(); - - // if the setup record is temporary and connection string contains access token, this is a temp setup record constructed for the admin log-on - // in this case just use the connection string - if IsTemporary() and ConnectionStringWithPlaceholders.Contains(AccessTokenTok) then - exit(ConnectionStringWithPlaceholders); - - if ConnectionStringWithPlaceholders = '' then - ConnectionStringWithPlaceholders := UpdateConnectionString(); - - // if auth type is Office365 and connection string contains {ClientSecret} token - // then we will connect via OAuth client credentials grant flow, and construct the connection string accordingly, with the actual client secret - if "Authentication Type" = "Authentication Type"::Office365 then begin - if ConnectionStringWithPlaceholders.Contains(ClientSecretTok) then begin - ConnectionStringWithPlaceholders := StrSubstNo(ClientSecretConnectionStringFormatTxt, ClientSecretAuthTxt, "Server Address", CDSIntegrationImpl.GetCDSConnectionClientId(), '%1', GetProxyVersion()); - ConnectionString := SecretStrSubstNo(ConnectionStringWithPlaceholders, CDSIntegrationImpl.GetCDSConnectionClientSecret()); - exit(ConnectionString); - end; - - if ConnectionStringWithPlaceholders.Contains(CertificateTok) then begin - ConnectionString := StrSubstNo(CertificateConnectionStringFormatTxt, CertificateAuthTxt, "Server Address", CDSIntegrationImpl.GetCDSConnectionFirstPartyAppId(), CDSIntegrationImpl.GetCDSConnectionFirstPartyAppCertificate(), GetProxyVersion()); - exit(ConnectionString); - end; - end; - - PasswordPlaceHolderPos := StrPos(ConnectionStringWithPlaceholders, MissingPasswordTok); - ConnectionStringWithPlaceholders := - CopyStr(ConnectionStringWithPlaceholders, 1, PasswordPlaceHolderPos - 1) + '%1' + - CopyStr(ConnectionStringWithPlaceholders, PasswordPlaceHolderPos + StrLen(MissingPasswordTok)); - ConnectionString := SecretStrSubstNo(ConnectionStringWithPlaceholders, GetPassword()); - end; - - [NonDebuggable] - internal procedure GetPassword(): SecretText - var - Value: SecretText; - begin - if IsTemporary() then - exit(TempUserPassword); - if not IsNullGuid("User Password Key") then - IsolatedStorageManagement.Get("User Password Key", DATASCOPE::Company, Value); - exit(Value); - end; - - local procedure GetUserName() UserName: Text - begin - if "User Name" = '' then - UserName := MissingUsernameTok - else - UserName := CopyStr("User Name", StrPos("User Name", '\') + 1); - end; - - internal procedure GetJobQueueEntriesObjectIDToRunFilter(): Text - begin - exit( - StrSubstNo( - '%1|%2|%3|%4|%5|%6', - Codeunit::"Integration Synch. Job Runner", - Codeunit::"CRM Statistics Job", - Codeunit::"Auto Create Sales Orders", - Codeunit::"Auto Process Sales Quotes", - Codeunit::"Int. Uncouple Job Runner", - Codeunit::"Int. Coupling Job Runner")); - end; - - internal procedure PerformTestConnection() - begin - VerifyTestConnection(); - Message(ConnectionSuccessMsg); - end; - - internal procedure VerifyTestConnection(): Boolean - begin - if ("Server Address" = '') or ("User Name" = '') then - Error(DetailsMissingErr, CRMProductName.FSServiceName()); - - CRMIntegrationManagement.ClearState(); - - if not TestConnection() then - Error(ConnectionErr, CRMIntegrationManagement.GetLastErrorMessage()); - - TestIntegrationUserRequirements(); - - exit(true); - end; - - internal procedure TestConnection() Success: Boolean - var - TestConnectionName: Text; - begin - TestConnectionName := Format(CreateGuid()); - UnregisterConnectionWithName(TestConnectionName); - RegisterConnectionWithName(TestConnectionName); - SetDefaultTableConnection( - TableConnectionType::CRM, GetDefaultFSConnection(TestConnectionName), true); - Success := TryReadSystemUsers(); - - UnregisterConnectionWithName(TestConnectionName); - end; - - internal procedure TestIntegrationUserRequirements() - var - CRMRole: Record "CRM Role"; - TempCRMRole: Record "CRM Role" temporary; - CRMSystemuserroles: Record "CRM Systemuserroles"; - CRMSystemuser: Record "CRM Systemuser"; - BCIntAdminCRMRoleName: Text; - BCIntUserCRMRoleName: Text; - SystemAdminCRMRoleName: Text; - TestConnectionName: Text; - BCIntegrationAdminRoleDeployed: Boolean; - BCIntegrationRolesDeployed: Boolean; - ChosenUserIsSystemAdmin: Boolean; - ChosenUserHasBCFSSecurityRole: Boolean; - begin - TestConnectionName := Format(CreateGuid()); - UnregisterConnectionWithName(TestConnectionName); - RegisterConnectionWithName(TestConnectionName); - SetDefaultTableConnection( - TableConnectionType::CRM, GetDefaultFSConnection(TestConnectionName), true); - - if CRMRole.FindSet() then - repeat - TempCRMRole.TransferFields(CRMRole); - TempCRMRole.Insert(); - if LowerCase(Format(TempCRMRole.RoleId)) = BCIntegrationUserFSRoleIdTxt then begin - BCIntegrationAdminRoleDeployed := true; - BCIntAdminCRMRoleName := TempCRMRole.Name; - end; - until CRMRole.Next() = 0; - - BCIntegrationRolesDeployed := BCIntegrationAdminRoleDeployed; - - CRMSystemuser.SetFilter(InternalEMailAddress, StrSubstNo('@%1', "User Name")); - if CRMSystemuser.FindFirst() then begin - if CRMSystemuser.IsDisabled then - Error(UserNotActiveErr, "User Name", "Server Address"); - if "Authentication Type" <> "Authentication Type"::Office365 then - if not CRMSystemuser.IsLicensed then - Error(UserNotLicensedErr, "User Name", "Server Address"); - - CRMSystemuserroles.SetRange(SystemUserId, CRMSystemuser.SystemUserId); - if CRMSystemuserroles.FindSet() then - repeat - if TempCRMRole.Get(CRMSystemuserroles.RoleId) then begin - if UpperCase(Format(TempCRMRole.RoleTemplateId)) = SystemAdminRoleTemplateIdTxt then begin - ChosenUserIsSystemAdmin := true; - SystemAdminCRMRoleName := TempCRMRole.Name - end; - if LowerCase(Format(TempCRMRole.RoleId)) = BCIntegrationUserFSRoleIdTxt then - ChosenUserHasBCFSSecurityRole := true; - end; - until CRMSystemuserroles.Next() = 0 - else - if ("Server Address" <> '') and ("Server Address" <> '@@test@@') then - Error(UserHasNoRolesErr, "User Name", "Server Address"); - - if ChosenUserIsSystemAdmin then - Error(SystemAdminErr, "User Name", SystemAdminCRMRoleName, "Server Address"); - - if BCIntegrationRolesDeployed and not ChosenUserHasBCFSSecurityRole then - Error(BCRolesErr, "User Name", BCIntAdminCRMRoleName, BCIntUserCRMRoleName, "Server Address"); - end; - - UnregisterConnectionWithName(TestConnectionName); - end; - - [TryFunction] - internal procedure TryReadSystemUsers() - var - CRMSystemuser: Record "CRM Systemuser"; - begin - if CRMSystemuser.Count() > 0 then - exit; - end; - - internal procedure UpdateFromWizard(var SourceFSConnectionSetup: Record "FS Connection Setup"; PasswordText: SecretText) - begin - if not Get() then begin - Init(); - Insert(); - end; - Validate("Server Address", SourceFSConnectionSetup."Server Address"); - Validate("Authentication Type", "Authentication Type"::Office365); - Validate("User Name", SourceFSConnectionSetup."User Name"); - SetPassword(PasswordText); - Validate("Proxy Version", SourceFSConnectionSetup."Proxy Version"); - Validate("Job Journal Template", SourceFSConnectionSetup."Job Journal Template"); - Validate("Job Journal Batch", SourceFSConnectionSetup."Job Journal Batch"); - Validate("Hour Unit of Measure", SourceFSConnectionSetup."Hour Unit of Measure"); - Validate("Line Synch. Rule", SourceFSConnectionSetup."Line Synch. Rule"); - Validate("Line Post Rule", SourceFSConnectionSetup."Line Post Rule"); - Modify(true); - end; - - internal procedure EnableFSConnectionFromWizard() - begin - Get(); - Validate("Is Enabled", true); - Modify(true); - end; - - local procedure UpdateConnectionDetails() - begin - if "Is Enabled" = xRec."Is Enabled" then - exit; - - if not UnregisterConnection() then - ClearLastError(); - - if "Is Enabled" then begin - VerifyTestConnection(); - RegisterConnection(); - InstallIntegrationSolution(); - EnableIntegrationTables(); - if "Disable Reason" <> '' then - Clear("Disable Reason"); - end else begin - "FS Version" := ''; - "Is FS Solution Installed" := false; - CurrencyDecimalPrecision := 0; - Clear(BaseCurrencyId); - BaseCurrencyPrecision := 0; - BaseCurrencySymbol := ''; - UpdateFSJobQueueEntriesStatus(); - end; - end; - - local procedure InstallIntegrationSolution() - var - AdminEmail: Text; - AdminPassword: SecretText; - AccessToken: SecretText; - AdminADDomain: Text; - ImportSolutionFailed: Boolean; - begin - if FSIntegrationMgt.IsFSSolutionInstalled() then - exit; - - case "Authentication Type" of - "Authentication Type"::Office365: - CDSIntegrationImpl.GetAccessToken("Server Address", true, AccessToken); - "Authentication Type"::AD: - if not PromptForCredentials(AdminEmail, AdminPassword, AdminADDomain) then - exit; - else - if not PromptForCredentials(AdminEmail, AdminPassword) then - exit; - end; - - FSIntegrationMgt.ImportFSSolution( - "Server Address", "User Name", AdminEmail, AdminPassword, AccessToken, AdminADDomain, GetProxyVersion(), false, ImportSolutionFailed); - end; - - local procedure EnableIntegrationTables() - var - FSSetupDefaults: Codeunit "FS Setup Defaults"; - begin - Modify(); // Job Queue to read "Is Enabled" - Commit(); - FSSetupDefaults.ResetConfiguration(Rec); - end; - - internal procedure RefreshDataFromFS() - begin - RefreshDataFromFS(true); - end; - - internal procedure RefreshDataFromFS(ResetSalesOrderMappingConfiguration: Boolean) - begin - if "Is Enabled" then begin - "Is FS Solution Installed" := FSIntegrationMgt.IsFSSolutionInstalled(); - if not TryRefreshFSSettings() then - exit; - end; - end; - - [TryFunction] - local procedure TryRefreshFSSettings() - var - CRMOrganization: Record "CRM Organization"; - begin - if CRMOrganization.FindFirst() then begin - CurrencyDecimalPrecision := CRMOrganization.CurrencyDecimalPrecision; - BaseCurrencyId := CRMOrganization.BaseCurrencyId; - BaseCurrencyPrecision := CRMOrganization.BaseCurrencyPrecision; - BaseCurrencySymbol := CRMOrganization.BaseCurrencySymbol; - end - end; - - [NonDebuggable] - internal procedure PromptForCredentials(var AdminEmail: Text; var AdminPassword: SecretText): Boolean - var - TempOfficeAdminCredentials: Record "Office Admin. Credentials" temporary; - begin - if TempOfficeAdminCredentials.IsEmpty() then begin - TempOfficeAdminCredentials.Init(); - TempOfficeAdminCredentials.Insert(true); - Commit(); - if Page.RunModal(Page::"Dynamics CRM Admin Credentials", TempOfficeAdminCredentials) <> Action::LookupOK then - exit(false); - end; - if (not TempOfficeAdminCredentials.FindFirst()) or - (TempOfficeAdminCredentials.Email = '') or (TempOfficeAdminCredentials.Password = '') - then begin - TempOfficeAdminCredentials.DeleteAll(true); - exit(false); - end; - - AdminEmail := TempOfficeAdminCredentials.Email; - AdminPassword := TempOfficeAdminCredentials.Password; - exit(true); - end; - - [NonDebuggable] - internal procedure PromptForCredentials(var AdminEmail: Text; var AdminPassword: SecretText; var AdminADDomain: Text): Boolean - var - TempOfficeAdminCredentials: Record "Office Admin. Credentials" temporary; - BackslashPos: Integer; - begin - if TempOfficeAdminCredentials.IsEmpty() then begin - TempOfficeAdminCredentials.Init(); - TempOfficeAdminCredentials.Insert(true); - Commit(); - if Page.RunModal(Page::"Dynamics CRM Admin Credentials", TempOfficeAdminCredentials) <> Action::LookupOK then - exit(false); - end; - if (not TempOfficeAdminCredentials.FindFirst()) or - (TempOfficeAdminCredentials.Email = '') or (TempOfficeAdminCredentials.Password = '') - then begin - TempOfficeAdminCredentials.DeleteAll(true); - exit(false); - end; - - BackslashPos := StrPos(TempOfficeAdminCredentials.Email, '\'); - if (BackslashPos <= 1) or (BackslashPos = StrLen(TempOfficeAdminCredentials.Email)) then - Error(UserNameMustIncludeDomainErr); - AdminADDomain := CopyStr(TempOfficeAdminCredentials.Email, 1, BackslashPos - 1); - AdminEmail := CopyStr(TempOfficeAdminCredentials.Email, BackslashPos + 1); - AdminPassword := TempOfficeAdminCredentials.Password; - exit(true); - end; - - local procedure GetDefaultFSConnection(ConnectionName: Text): Text - begin - OnGetDefaultFSConnection(ConnectionName); - exit(ConnectionName); - end; - - [IntegrationEvent(false, false)] - local procedure OnGetDefaultFSConnection(var ConnectionName: Text) - begin - end; - - local procedure CrmAuthenticationType(): Text - begin - case "Authentication Type" of - "Authentication Type"::Office365: - exit('AuthType=Office365;'); - "Authentication Type"::AD: - exit('AuthType=AD;' + GetDomain()); - "Authentication Type"::IFD: - exit('AuthType=IFD;' + GetDomain() + 'HomeRealmUri= ;'); - "Authentication Type"::OAuth: - exit('AuthType=OAuth;' + 'AppId= ;' + 'RedirectUri= ;' + 'TokenCacheStorePath= ;' + 'LoginPrompt=Auto;'); - end; - end; - - internal procedure UpdateConnectionString() ConnectionString: Text - begin - if "Authentication Type" <> "Authentication Type"::Office365 then - ConnectionString := StrSubstNo(ConnectionStringFormatTok, "Server Address", GetUserName(), MissingPasswordTok, GetProxyVersion(), CrmAuthenticationType()) - else - if CDSIntegrationImpl.GetCDSConnectionFirstPartyAppId() <> '' then - ConnectionString := StrSubstNo(CertificateConnectionStringFormatTxt, CertificateAuthTxt, "Server Address", ClientIdTok, CertificateTok, GetProxyVersion()) - else - ConnectionString := StrSubstNo(ClientSecretConnectionStringFormatTxt, ClientSecretAuthTxt, "Server Address", ClientIdTok, ClientSecretTok, GetProxyVersion()); - - SetConnectionString(ConnectionString); - end; - - local procedure UpdateProxyVersionInConnectionString() ConnectionString: Text - var - LeftPart: Text; - RightPart: Text; - ProxyVersionTok: Text; - IndexOfProxyVersion: Integer; - begin - ProxyVersionTok := 'ProxyVersion='; - ConnectionString := GetConnectionStringAsStoredInSetup(); - - // if the connection string is empty, just initialize it the standard way - if ConnectionString = '' then begin - ConnectionString := UpdateConnectionString(); - exit; - end; - - IndexOfProxyVersion := ConnectionString.IndexOf(ProxyVersionTok); - - // if there is no proxy version in the connection string, just add it to the end - if IndexOfProxyVersion = 0 then begin - ConnectionString += ('; ' + ProxyVersionTok + Format(GetProxyVersion())); - SetConnectionString(ConnectionString); - exit; - end; - - LeftPart := CopyStr(ConnectionString, 1, IndexOfProxyVersion - 1); - RightPart := CopyStr(ConnectionString, IndexOfProxyVersion); - - // RightPart starts with ProxyVersion= - // if there is no ; in it, then this is the end of the original connection string - // just add proxy version to the end of LeftPart - if RightPart.IndexOf(';') = 0 then begin - ConnectionString := LeftPart + ProxyVersionTok + Format(GetProxyVersion()); - SetConnectionString(ConnectionString); - exit; - end; - - // in the remaining case, ProxyVersion=XYZ is in the middle of the string - RightPart := CopyStr(RightPart, RightPart.IndexOf(';')); - ConnectionString := LeftPart + ProxyVersionTok + Format(GetProxyVersion()) + RightPart; - SetConnectionString(ConnectionString); - end; - - local procedure UpdateDomainName() - begin - if "User Name" <> '' then - if StrPos("User Name", '\') > 0 then - Validate(Domain, CopyStr("User Name", 1, StrPos("User Name", '\') - 1)) - else - Domain := ''; - end; - - local procedure CheckUserName() - begin - if "User Name" <> '' then - case "Authentication Type" of - "Authentication Type"::AD: - if StrPos("User Name", '\') = 0 then - Error(UserNameMustIncludeDomainErr); - "Authentication Type"::Office365: - if StrPos("User Name", '@') = 0 then - Error(UserNameMustBeEmailErr); - end; - end; - - local procedure GetDomain(): Text - var - DomainLbl: Label 'Domain=%1;', Locked = true; - begin - if Domain <> '' then - exit(StrSubstNo(DomainLbl, Domain)); - end; - - local procedure UpdateFSJobQueueEntriesStatus() - var - IntegrationTableMapping: Record "Integration Table Mapping"; - JobQueueEntry: Record "Job Queue Entry"; - NewStatus: Option; - begin - if "Is Enabled" then - NewStatus := JobQueueEntry.Status::Ready - else - NewStatus := JobQueueEntry.Status::"On Hold"; - IntegrationTableMapping.SetRange(Type, IntegrationTableMapping.Type::Dataverse); - IntegrationTableMapping.SetRange("Synch. Codeunit ID", Codeunit::"CRM Integration Table Synch."); - IntegrationTableMapping.SetRange("Delete After Synchronization", false); - if CDSIntegrationImpl.IsIntegrationEnabled() then - IntegrationTableMapping.SetFilter("Table ID", StrSubstNo('<>%1&<>%2&<>%3&<>%4', Database::"Job Journal Line", Database::"Job Task", Database::Resource, Database::"Service Item")); - if IntegrationTableMapping.FindSet() then - repeat - JobQueueEntry.SetRange("Record ID to Process", IntegrationTableMapping.RecordId); - if JobQueueEntry.FindSet() then - repeat - JobQueueEntry.SetStatus(NewStatus); - until JobQueueEntry.Next() = 0; - until IntegrationTableMapping.Next() = 0; - end; - - internal procedure GetConnectionStringAsStoredInSetup() ConnectionString: Text - var - CRMConnectionSetup: Record "CRM Connection Setup"; - InStream: InStream; - begin - if CRMConnectionSetup.Get("Primary Key") then - CalcFields("Server Connection String"); - "Server Connection String".CreateInStream(InStream); - InStream.ReadText(ConnectionString); - end; - - internal procedure SetConnectionString(ConnectionString: Text) - var - OutStream: OutStream; - begin - if ConnectionString = '' then - Clear("Server Connection String") - else begin - if "Authentication Type" <> "Authentication Type"::Office365 then - if StrPos(ConnectionString, MissingPasswordTok) = 0 then - Error(ConnectionStringPwdPlaceHolderMissingErr); - - if "Authentication Type" = "Authentication Type"::Office365 then - if (StrPos(ConnectionString, MissingPasswordTok) = 0) and (StrPos(ConnectionString, ClientSecretTok) = 0) and (StrPos(ConnectionString, CertificateTok) = 0) then - Error(ConnectionStringPwdOrClientSecretPlaceHolderMissingErr); - - Clear("Server Connection String"); - "Server Connection String".CreateOutStream(OutStream); - OutStream.WriteText(ConnectionString); - end; - if not Modify() then; - end; - - internal procedure IsEnabled(): Boolean - begin - if not Get() then - exit(false); - exit("Is Enabled"); - end; - - internal procedure GetProxyVersion(): Integer - var - EnvironmentInformation: Codeunit "Environment Information"; - begin - if "Proxy Version" >= 100 then - exit("Proxy Version"); - - if not EnvironmentInformation.IsSaaS() then - exit("Proxy Version"); - - Session.LogMessage('0000K7P', DefaultingToDataverseServiceClientTxt, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CategoryTok); - exit(100); - end; - - local procedure CDSConnectionNotEnabledError() - var - AssistedSetup: Page "Assisted Setup"; - CDSConnectionNotEnabledErrorInfo: ErrorInfo; - begin - CDSConnectionNotEnabledErrorInfo.DataClassification := CDSConnectionNotEnabledErrorInfo.DataClassification::SystemMetadata; - CDSConnectionNotEnabledErrorInfo.ErrorType := CDSConnectionNotEnabledErrorInfo.ErrorType::Client; - CDSConnectionNotEnabledErrorInfo.Verbosity := CDSConnectionNotEnabledErrorInfo.Verbosity::Error; - CDSConnectionNotEnabledErrorInfo.Message := StrSubstNo(CDSConnectionMustBeEnabledErr, CRMProductName.FSServiceName(), AssistedSetup.Caption()); - CDSConnectionNotEnabledErrorInfo.AddNavigationAction(ShowDataverseConnectionSetupLbl); - CDSConnectionNotEnabledErrorInfo.PageNo(Page::"CDS Connection Setup Wizard"); - Error(CDSConnectionNotEnabledErrorInfo); - end; - - local procedure CRMConnectionNotEnabledError() - var - AssistedSetup: Page "Assisted Setup"; - CRMConnectionNotEnabledErrorInfo: ErrorInfo; - begin - CRMConnectionNotEnabledErrorInfo.DataClassification := CRMConnectionNotEnabledErrorInfo.DataClassification::SystemMetadata; - CRMConnectionNotEnabledErrorInfo.ErrorType := CRMConnectionNotEnabledErrorInfo.ErrorType::Client; - CRMConnectionNotEnabledErrorInfo.Verbosity := CRMConnectionNotEnabledErrorInfo.Verbosity::Error; - CRMConnectionNotEnabledErrorInfo.Message := StrSubstNo(CRMConnectionMustBeEnabledErr, CRMProductName.FSServiceName(), AssistedSetup.Caption()); - CRMConnectionNotEnabledErrorInfo.AddNavigationAction(ShowCRMConnectionSetupLbl); - CRMConnectionNotEnabledErrorInfo.PageNo(Page::"CRM Connection Setup Wizard"); - Error(CRMConnectionNotEnabledErrorInfo); - end; -} - diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAsset.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAsset.Table.al deleted file mode 100644 index f7abe0f081..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAsset.Table.al +++ /dev/null @@ -1,423 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6613 "FS Customer Asset" -{ - ExternalName = 'msdyn_customerasset'; - TableType = CRM; - Description = 'Specify Customer Asset.'; - DataClassification = SystemMetadata; - - fields - { - field(1; CustomerAssetId; GUID) - { - ExternalName = 'msdyn_customerassetid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'Customer Asset'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Customer Asset'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Customer Asset'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[100]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Enter the name of the custom entity.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(36; Account; GUID) - { - ExternalName = 'msdyn_account'; - ExternalType = 'Lookup'; - Description = 'Parent Customer of this Asset'; - Caption = 'Account'; - TableRelation = "CRM Account".AccountId; - DataClassification = SystemMetadata; - } - field(37; CustomerAssetCategory; GUID) - { - ExternalName = 'msdyn_customerassetcategory'; - ExternalType = 'Lookup'; - Description = 'The category of the customer asset'; - Caption = 'Category'; - TableRelation = "FS Customer Asset Category".CustomerAssetCategoryId; - DataClassification = SystemMetadata; - } - field(38; Latitude; Decimal) - { - ExternalName = 'msdyn_latitude'; - ExternalType = 'Double'; - Description = ''; - Caption = 'Latitude'; - DataClassification = SystemMetadata; - } - field(39; Longitude; Decimal) - { - ExternalName = 'msdyn_longitude'; - ExternalType = 'Double'; - Description = ''; - Caption = 'Longitude'; - DataClassification = SystemMetadata; - } - field(40; MasterAsset; GUID) - { - ExternalName = 'msdyn_masterasset'; - ExternalType = 'Lookup'; - Description = 'Top-Level Asset, (if this asset is a sub asset)'; - Caption = 'Top-Level Asset'; - TableRelation = "FS Customer Asset".CustomerAssetId; - DataClassification = SystemMetadata; - } - field(41; ParentAsset; GUID) - { - ExternalName = 'msdyn_parentasset'; - ExternalType = 'Lookup'; - Description = 'Parent Asset'; - Caption = 'Parent Asset'; - TableRelation = "FS Customer Asset".CustomerAssetId; - DataClassification = SystemMetadata; - } - field(42; Product; GUID) - { - ExternalName = 'msdyn_product'; - ExternalType = 'Lookup'; - Description = 'Reference to Product associated with this Asset'; - Caption = 'Product'; - TableRelation = "CRM Product".ProductId; - DataClassification = SystemMetadata; - } - field(46; MasterAssetName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Customer Asset".Name where(CustomerAssetId = field(MasterAsset))); - ExternalName = 'msdyn_masterassetname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(47; ParentAssetName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Customer Asset".Name where(CustomerAssetId = field(ParentAsset))); - ExternalName = 'msdyn_parentassetname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(48; CustomerAssetCategoryName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Customer Asset Category".Name where(CustomerAssetCategoryId = field(CustomerAssetCategory))); - ExternalName = 'msdyn_customerassetcategoryname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(50; DeviceId; Text[100]) - { - ExternalName = 'msdyn_deviceid'; - ExternalType = 'String'; - Description = 'Device ID used to register with the IoT provider. This will not be used if there are two or more connected devices for this asset. This value will be updated based on the connected devices.'; - Caption = 'Device ID'; - DataClassification = SystemMetadata; - } - field(52; LastCommandSentTime; Date) - { - ExternalName = 'msdyn_lastcommandsenttime'; - ExternalType = 'DateTime'; - Description = 'The timestamp of the last command sent for any of the connected devices for this asset.'; - Caption = 'Last Command Sent Time'; - DataClassification = SystemMetadata; - } - field(53; RegistrationStatus; Option) - { - ExternalName = 'msdyn_registrationstatus'; - ExternalType = 'Picklist'; - Description = 'A status field that denotes whether all the devices connected to this asset are registered with the IoT provider.'; - Caption = 'Registration Status'; - InitValue = " "; - OptionMembers = " ",Unknown,Unregistered,InProgress,Registered,Error; - OptionOrdinalValues = -1, 192350000, 192350001, 192350002, 192350003, 192350004; - DataClassification = SystemMetadata; - } - field(56; Alert; Boolean) - { - ExternalName = 'msdyn_alert'; - ExternalType = 'Boolean'; - ExternalAccess = Read; - Description = 'If active parent alerts exist for the customer asset'; - Caption = 'Active or in-progress alerts'; - DataClassification = SystemMetadata; - } - field(58; AlertCount; Integer) - { - ExternalName = 'msdyn_alertcount'; - ExternalType = 'Integer'; - ExternalAccess = Read; - Description = 'Count of parent alerts for this customer asset'; - Caption = 'Alert Count'; - DataClassification = SystemMetadata; - } - field(59; AalertCount_Date; Datetime) - { - ExternalName = 'msdyn_alertcount_date'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Last Updated time of rollup field Alert Count.'; - Caption = 'Alert Count (Last Updated On)'; - DataClassification = SystemMetadata; - } - field(60; AlertCount_State; Integer) - { - ExternalName = 'msdyn_alertcount_state'; - ExternalType = 'Integer'; - ExternalAccess = Read; - Description = 'State of rollup field Alert Count.'; - Caption = 'Alert Count (State)'; - DataClassification = SystemMetadata; - } - field(61; LastAlertTime; Datetime) - { - ExternalName = 'msdyn_lastalerttime'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = ''; - Caption = 'Last active alert time'; - DataClassification = SystemMetadata; - } - field(62; LastAlertTime_Date; Datetime) - { - ExternalName = 'msdyn_lastalerttime_date'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Last Updated time of rollup field Last active alert time.'; - Caption = 'Last active alert time (Last Updated On)'; - DataClassification = SystemMetadata; - } - field(63; LastAlertTime_State; Integer) - { - ExternalName = 'msdyn_lastalerttime_state'; - ExternalType = 'Integer'; - ExternalAccess = Read; - Description = 'State of rollup field Last active alert time.'; - Caption = 'Last active alert time (State)'; - DataClassification = SystemMetadata; - } - field(64; AssetTag; Text[100]) - { - ExternalName = 'msdyn_assettag'; - ExternalType = 'String'; - Description = ''; - Caption = 'Asset Tag'; - DataClassification = SystemMetadata; - } - field(66; WorkOrderProduct; GUID) - { - ExternalName = 'msdyn_workorderproduct'; - ExternalType = 'Lookup'; - Description = 'Indicates a link to the Work Order Product from where this Asset was auto created by the system.'; - Caption = 'Work Order Product'; - TableRelation = "FS Work Order Product".WorkOrderProductId; - DataClassification = SystemMetadata; - } - field(67; WorkOrderProductName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order Product".Name where(WorkOrderProductId = field(WorkOrderProduct))); - ExternalName = 'msdyn_workorderproductname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(68; CompanyId; GUID) - { - ExternalName = 'bcbi_company'; - ExternalType = 'Lookup'; - Description = 'Business Central Company'; - Caption = 'Company Id'; - TableRelation = "CDS Company".CompanyId; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; customerassetId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAssetCategory.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAssetCategory.Table.al deleted file mode 100644 index 07936c2617..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSCustomerAssetCategory.Table.al +++ /dev/null @@ -1,214 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6614 "FS Customer Asset Category" -{ - ExternalName = 'msdyn_customerassetcategory'; - TableType = CRM; - Description = 'The Category of Customer Asset.'; - DataClassification = SystemMetadata; - - fields - { - field(1; CustomerAssetCategoryId; GUID) - { - ExternalName = 'msdyn_customerassetcategoryid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Unique identifier for entity instances'; - Caption = 'Customer Asset Category'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was created.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was modified.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who created the record.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who modified the record.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Customer Asset Category'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Customer Asset Category'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[100]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'The name of the custom entity.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; CustomerAssetCategoryId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSProjectTask.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSProjectTask.Table.al deleted file mode 100644 index 838b8f7f89..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSProjectTask.Table.al +++ /dev/null @@ -1,259 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6615 "FS Project Task" -{ - ExternalName = 'bcbi_projecttask'; - TableType = CRM; - Description = 'An entity for storing the Microsoft Dynamics 365 Business Central project task.'; - DataClassification = SystemMetadata; - - fields - { - field(1; ProjectTaskId; GUID) - { - ExternalName = 'bcbi_projecttaskid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Unique identifier for entity instances.'; - Caption = 'Business Central Project Task'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was created.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was modified.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who created the record.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who modified the record.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(8; CreatedByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM SystemUser".FullName where(SystemUserId = field(CreatedBy))); - ExternalName = 'createdbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(10; CreatedOnBehalfByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM SystemUser".FullName where(SystemUserId = field(CreatedOnBehalfBy))); - ExternalName = 'createdonbehalfbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(12; ModifiedByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(ModifiedBy))); - ExternalName = 'modifiedbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(14; ModifiedOnBehalfByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(ModifiedOnBehalfBy))); - ExternalName = 'modifiedonbehalfbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(18; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Business Central Project Task'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(20; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Business Central Project Task'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(22; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(23; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(24; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(25; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(26; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(27; Description; Text[250]) - { - ExternalName = 'bcbi_projecttaskdescription'; - ExternalType = 'String'; - Description = 'Business Central Project Task Description'; - Caption = 'Business Central Project Task Description'; - DataClassification = SystemMetadata; - } - field(28; ProjectNumber; Text[250]) - { - ExternalName = 'bcbi_projectnumber'; - ExternalType = 'String'; - Description = 'Business Central Project Number'; - Caption = 'Business Central Project Number'; - DataClassification = SystemMetadata; - } - field(29; ProjectTaskNumber; Text[250]) - { - ExternalName = 'bcbi_projecttasknumber'; - ExternalType = 'String'; - Description = 'Business Central Project Task Number'; - Caption = 'Business Central Project Task Number'; - DataClassification = SystemMetadata; - } - field(30; ProjectDescription; Text[250]) - { - ExternalName = 'bcbi_projectdescription'; - ExternalType = 'String'; - Description = 'Business Central Project Description'; - Caption = 'Business Central Project Description'; - DataClassification = SystemMetadata; - } - field(31; ServiceAccountId; GUID) - { - ExternalName = 'bcbi_serviceaccountid'; - ExternalType = 'Lookup'; - Description = 'Account to be serviced'; - Caption = 'Service Account'; - TableRelation = "CRM Account".AccountId; - DataClassification = SystemMetadata; - } - field(32; BillingAccountId; GUID) - { - ExternalName = 'bcbi_billingaccountid'; - ExternalType = 'Lookup'; - Description = 'Account to be billed'; - Caption = 'Billing Account'; - TableRelation = "CRM Account".AccountId; - DataClassification = SystemMetadata; - } - field(33; CompanyId; GUID) - { - ExternalName = 'bcbi_companyid'; - ExternalType = 'Lookup'; - Description = 'The unique identifier of the company associated with the project task.'; - Caption = 'Company'; - TableRelation = "CDS Company".CompanyId; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; ProjectTaskId) - { - Clustered = true; - } - key(Name; Description) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Description) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSResourcePayType.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSResourcePayType.Table.al deleted file mode 100644 index ac2279ceee..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSResourcePayType.Table.al +++ /dev/null @@ -1,261 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6616 "FS Resource Pay Type" -{ - ExternalName = 'msdyn_resourcepaytype'; - TableType = CRM; - Description = 'Pay Types of resources hourly rate to calculate the resource cost'; - DataClassification = SystemMetadata; - - fields - { - field(1; ResourcePayTypeId; GUID) - { - ExternalName = 'msdyn_resourcepaytypeid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'Resource Pay Type'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(8; CreatedByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(CreatedBy))); - ExternalName = 'createdbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(10; CreatedOnBehalfByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(CreatedOnBehalfBy))); - ExternalName = 'createdonbehalfbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(12; ModifiedByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(ModifiedBy))); - ExternalName = 'modifiedbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(14; ModifiedOnBehalfByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(ModifiedOnBehalfBy))); - ExternalName = 'modifiedonbehalfbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM BusinessUnit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(24; OwningBusinessUnitName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM BusinessUnit".Name where(BusinessUnitId = field(OwningBusinessUnit))); - ExternalName = 'owningbusinessunitname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(25; statecode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Resource Pay Type'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; statuscode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Resource Pay Type'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[200]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Enter the resource pay type name.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(35; msdyn_HourlyMarkup; Decimal) - { - ExternalName = 'msdyn_hourlymarkup'; - ExternalType = 'Double'; - Description = 'Enter the markup percentage on the resource hourly cost. Use a value greater than 100% to mark it up and a value less than 100% to mark it down.'; - Caption = 'Hourly Markup %'; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; ResourcePayTypeId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWarehouse.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWarehouse.Table.al deleted file mode 100644 index a36c232f06..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWarehouse.Table.al +++ /dev/null @@ -1,222 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6624 "FS Warehouse" -{ - ExternalName = 'msdyn_warehouse'; - TableType = CRM; - Description = 'An entity for storing the Microsoft Dynamics 365 Business Central location.'; - DataClassification = SystemMetadata; - - fields - { - field(1; WarehouseId; Guid) - { - Caption = 'Warehouse'; - Description = 'Unique identifier of the warehouse.'; - ExternalAccess = Insert; - ExternalName = 'msdyn_warehouseid'; - ExternalType = 'Uniqueidentifier'; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was created.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Date and time when the record was modified.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who created the record.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the delegate user who modified the record.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM SystemUser".SystemUserId; - DataClassification = SystemMetadata; - } - field(8; CreatedByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM SystemUser".FullName where(SystemUserId = field(CreatedBy))); - ExternalName = 'createdbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(10; CreatedOnBehalfByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM SystemUser".FullName where(SystemUserId = field(CreatedOnBehalfBy))); - ExternalName = 'createdonbehalfbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(12; ModifiedByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(ModifiedBy))); - ExternalName = 'modifiedbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(14; ModifiedOnBehalfByName; Text[200]) - { - FieldClass = FlowField; - CalcFormula = lookup("CRM Systemuser".FullName where(SystemUserId = field(ModifiedOnBehalfBy))); - ExternalName = 'modifiedonbehalfbyname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(18; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Business Central Location'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(20; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Business Central Location'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(22; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(23; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(24; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(25; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(26; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(27; Name; Text[20]) - { - Caption = 'Name'; - Description = 'Type location code.'; - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - } - field(28; Description; Text[100]) - { - Caption = 'Description'; - Description = 'Type location description.'; - ExternalName = 'msdyn_description'; - ExternalType = 'String'; - } - field(33; CompanyId; GUID) - { - ExternalName = 'bcbi_companyid'; - ExternalType = 'Lookup'; - Description = 'The unique identifier of the company associated with the location.'; - Caption = 'Company'; - TableRelation = "CDS Company".CompanyId; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; WarehouseId) - { - Clustered = true; - } - key(Name; Description) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Description) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrder.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrder.Table.al deleted file mode 100644 index fa94ea702b..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrder.Table.al +++ /dev/null @@ -1,906 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6617 "FS Work Order" -{ - ExternalName = 'msdyn_workorder'; - TableType = CRM; - Description = 'Work orders store all information about the job performed for an account. Stores incident details, resource, expenses, tasks, communications, billing and more'; - DataClassification = SystemMetadata; - - fields - { - field(1; WorkOrderId; GUID) - { - ExternalName = 'msdyn_workorderId'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'WO Number'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Work Order'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Work Order'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[100]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Enter the name of the custom entity.'; - Caption = 'Work Order Number'; - DataClassification = SystemMetadata; - } - field(35; ProcessId; GUID) - { - ExternalName = 'processid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Shows the ID of the process associated with the entity.'; - Caption = 'Process Id'; - DataClassification = SystemMetadata; - } - field(36; StageId; GUID) - { - ExternalName = 'stageid'; - ExternalType = 'Uniqueidentifier'; - Description = 'Shows the ID of the stage where the entity is located.'; - Caption = 'Stage Id'; - DataClassification = SystemMetadata; - } - field(37; TraversedPath; Text[1250]) - { - ExternalName = 'traversedpath'; - ExternalType = 'String'; - Description = 'Shows a comma-separated list of string values representing the unique identifiers of stages in a business process flow instance in the order that they occur.'; - Caption = 'Traversed Path'; - DataClassification = SystemMetadata; - } - field(38; Address1; Text[250]) - { - ExternalName = 'msdyn_address1'; - ExternalType = 'String'; - Caption = 'Street 1'; - DataClassification = SystemMetadata; - } - field(39; Address2; Text[250]) - { - ExternalName = 'msdyn_address2'; - ExternalType = 'String'; - Caption = 'Street 2'; - DataClassification = SystemMetadata; - } - field(40; Address3; Text[250]) - { - ExternalName = 'msdyn_address3'; - ExternalType = 'String'; - Caption = 'Street 3'; - DataClassification = SystemMetadata; - } - field(41; AddressName; Text[250]) - { - ExternalName = 'msdyn_addressname'; - ExternalType = 'String'; - Caption = 'Address Name'; - DataClassification = SystemMetadata; - } - field(43; AutoNumbering; Text[100]) - { - ExternalName = 'msdyn_autonumbering'; - ExternalType = 'String'; - Description = 'Internal field used to generate the next name upon entity creation. It is optionally copied to the msdyn_name field.'; - Caption = 'Auto-Numbering'; - DataClassification = SystemMetadata; - } - field(44; BillingAccount; GUID) - { - ExternalName = 'msdyn_billingaccount'; - ExternalType = 'Lookup'; - Description = 'Account to be billed. If a billing account has been set on service account it will be populated by default. Otherwise, the billing account will be the same as the service account.'; - Caption = 'Billing Account'; - TableRelation = "CRM Account".AccountId; - DataClassification = SystemMetadata; - } - field(45; BookingSummary; BLOB) - { - ExternalName = 'msdyn_bookingsummary'; - ExternalType = 'Memo'; - Description = 'For internal use only.'; - Caption = 'Booking Summary'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(46; ChildIndex; Integer) - { - ExternalName = 'msdyn_childindex'; - ExternalType = 'Integer'; - Caption = 'Child Index'; - DataClassification = SystemMetadata; - } - field(47; City; Text[80]) - { - ExternalName = 'msdyn_city'; - ExternalType = 'String'; - Caption = 'City'; - DataClassification = SystemMetadata; - } - field(48; ClosedBy; GUID) - { - ExternalName = 'msdyn_closedby'; - ExternalType = 'Lookup'; - Description = 'The user that last closed this work order'; - Caption = 'Closed By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(49; Country; Text[80]) - { - ExternalName = 'msdyn_country'; - ExternalType = 'String'; - Caption = 'Country/Region'; - DataClassification = SystemMetadata; - } - field(50; CustomerAsset; GUID) - { - ExternalName = 'msdyn_customerasset'; - ExternalType = 'Lookup'; - Description = 'Customer Asset related to this incident reported'; - Caption = 'Primary Incident Customer Asset'; - TableRelation = "FS Customer Asset".CustomerAssetId; - DataClassification = SystemMetadata; - } - field(51; DateWindowEnd; Date) - { - ExternalName = 'msdyn_datewindowend'; - ExternalType = 'DateTime'; - Caption = 'Date Window End'; - DataClassification = SystemMetadata; - } - field(52; DateWindowStart; Date) - { - ExternalName = 'msdyn_datewindowstart'; - ExternalType = 'DateTime'; - Caption = 'Date Window Start'; - DataClassification = SystemMetadata; - } - field(53; EstimateSubtotalAmount; Decimal) - { - ExternalName = 'msdyn_estimatesubtotalamount'; - ExternalType = 'Money'; - Description = 'Enter the summary of total estimated billing amount for this work order'; - Caption = 'Estimate Subtotal Amount'; - DataClassification = SystemMetadata; - } - field(54; TransactionCurrencyId; GUID) - { - ExternalName = 'transactioncurrencyid'; - ExternalType = 'Lookup'; - Description = 'Unique identifier of the currency associated with the entity.'; - Caption = 'Currency'; - TableRelation = "CRM Transactioncurrency".TransactionCurrencyId; - DataClassification = SystemMetadata; - } - field(56; ExchangeRate; Decimal) - { - ExternalName = 'exchangerate'; - ExternalType = 'Decimal'; - ExternalAccess = Read; - Description = 'Shows the exchange rate for the currency associated with the entity with respect to the base currency.'; - Caption = 'Exchange Rate'; - DataClassification = SystemMetadata; - } - field(57; EstimateSubtotalAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimatesubtotalamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate subtotal amount in the base currency.'; - Caption = 'Estimate Subtotal Amount (Base)'; - DataClassification = SystemMetadata; - } - field(58; FollowUpNote; BLOB) - { - ExternalName = 'msdyn_followupnote'; - ExternalType = 'Memo'; - Description = 'Indicate the details of the follow up work'; - Caption = 'Follow Up Note (Deprecated)'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(59; FollowUpRequired; Boolean) - { - ExternalName = 'msdyn_followuprequired'; - ExternalType = 'Boolean'; - Description = 'Allows indication if follow up work is required for a work order.'; - Caption = 'Follow Up Required (Deprecated)'; - DataClassification = SystemMetadata; - } - field(61; Instructions; BLOB) - { - ExternalName = 'msdyn_instructions'; - ExternalType = 'Memo'; - Description = 'Shows instructions for booked resources. By default, this information is taken from the work order instructions field on the service account.'; - Caption = 'Instructions'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(62; InternalFlags; BLOB) - { - ExternalName = 'msdyn_internalflags'; - ExternalType = 'Memo'; - Description = 'For internal use only.'; - Caption = 'Internal Flags'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(63; IsFollowUp; Boolean) - { - ExternalName = 'msdyn_isfollowup'; - ExternalType = 'Boolean'; - Caption = 'Is FollowUp (Deprecated)'; - DataClassification = SystemMetadata; - } - field(65; IsMobile; Boolean) - { - ExternalName = 'msdyn_ismobile'; - ExternalType = 'Boolean'; - Caption = 'Is Mobile'; - DataClassification = SystemMetadata; - } - field(67; Latitude; Decimal) - { - ExternalName = 'msdyn_latitude'; - ExternalType = 'Double'; - Description = ''; - Caption = 'Latitude'; - DataClassification = SystemMetadata; - } - field(68; Longitude; Decimal) - { - ExternalName = 'msdyn_longitude'; - ExternalType = 'Double'; - Description = ''; - Caption = 'Longitude'; - DataClassification = SystemMetadata; - } - field(69; MapControl; Text[100]) - { - ExternalName = 'msdyn_mapcontrol'; - ExternalType = 'String'; - ExternalAccess = Read; - Description = ''; - Caption = 'This field should only be used to load the custom map control'; - DataClassification = SystemMetadata; - } - field(70; OpportunityId; GUID) - { - ExternalName = 'msdyn_opportunityid'; - ExternalType = 'Lookup'; - Description = 'Unique identifier for Opportunity associated with Work Order.'; - Caption = 'Opportunity'; - TableRelation = "CRM Opportunity".OpportunityId; - DataClassification = SystemMetadata; - } - field(71; ParentWorkOrder; GUID) - { - ExternalName = 'msdyn_parentworkorder'; - ExternalType = 'Lookup'; - Description = 'Unique identifier for Work Order associated with Work Order.'; - Caption = 'Parent Work Order'; - TableRelation = "FS Work Order".WorkOrderId; - DataClassification = SystemMetadata; - } - field(72; PostalCode; Text[20]) - { - ExternalName = 'msdyn_postalcode'; - ExternalType = 'String'; - Caption = 'Postal Code'; - DataClassification = SystemMetadata; - } - field(73; PreferredResource; GUID) - { - ExternalName = 'msdyn_preferredresource'; - ExternalType = 'Lookup'; - Description = 'The customer Preferred Resource to work on this job. Should be taken into consideration while scheduling resources'; - Caption = 'Preferred Resource (Deprecated)'; - TableRelation = "FS Bookable Resource".BookableResourceId; - DataClassification = SystemMetadata; - } - field(74; PriceList; GUID) - { - ExternalName = 'msdyn_pricelist'; - ExternalType = 'Lookup'; - Description = 'Price List that controls pricing for products / services added to this work order. By default the system will use the Price List specified on the account'; - Caption = 'Price List'; - TableRelation = "CRM Pricelevel".PriceLevelId; - DataClassification = SystemMetadata; - } - field(75; PrimaryIncidentDescription; BLOB) - { - ExternalName = 'msdyn_primaryincidentdescription'; - ExternalType = 'Memo'; - Description = 'Incident description'; - Caption = 'Primary Incident Description'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(76; PrimaryIncidentEstimatedDuration; Integer) - { - ExternalName = 'msdyn_primaryincidentestimatedduration'; - ExternalType = 'Integer'; - Description = 'Shows the time estimated to resolve this incident.'; - Caption = 'Primary Incident Estimated Duration'; - DataClassification = SystemMetadata; - } - field(79; ReportedByContact; GUID) - { - ExternalName = 'msdyn_reportedbycontact'; - ExternalType = 'Lookup'; - Description = 'The contact that reported this Work Order'; - Caption = 'Reported By Contact'; - TableRelation = "CRM Contact".ContactId; - DataClassification = SystemMetadata; - } - field(80; ServiceAccount; GUID) - { - ExternalName = 'msdyn_serviceaccount'; - ExternalType = 'Lookup'; - Description = 'Account to be serviced'; - Caption = 'Service Account'; - TableRelation = "CRM Account".AccountId; - DataClassification = SystemMetadata; - } - field(81; ServiceRequest; GUID) - { - ExternalName = 'msdyn_servicerequest'; - ExternalType = 'Lookup'; - Description = 'Case of which this work order originates from'; - Caption = 'Case'; - TableRelation = "CRM Incident".IncidentId; - DataClassification = SystemMetadata; - } - field(83; StateOrProvince; Text[50]) - { - ExternalName = 'msdyn_stateorprovince'; - ExternalType = 'String'; - Caption = 'State Or Province'; - DataClassification = SystemMetadata; - } - field(84; SubStatus; GUID) - { - ExternalName = 'msdyn_substatus'; - ExternalType = 'Lookup'; - Description = 'Work Order subsstatus'; - Caption = 'Substatus'; - TableRelation = "FS Work Order Substatus".WorkOrderSubstatusId; - DataClassification = SystemMetadata; - } - field(85; SubtotalAmount; Decimal) - { - ExternalName = 'msdyn_subtotalamount'; - ExternalType = 'Money'; - Description = 'Enter the summary of subtotal billing amount excluding tax for this work order.'; - Caption = 'Subtotal Amount'; - DataClassification = SystemMetadata; - } - field(86; SubTotalAmount_Base; Decimal) - { - ExternalName = 'msdyn_subtotalamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the subtotal amount in the base currency.'; - Caption = 'Subtotal Amount (Base)'; - DataClassification = SystemMetadata; - } - field(87; SupportContact; GUID) - { - ExternalName = 'msdyn_supportcontact'; - ExternalType = 'Lookup'; - Description = 'A support contact can be specified so that the individual working on the work order has someone to contact for assistance.'; - Caption = 'Support Contact'; - TableRelation = "FS Bookable Resource".BookableResourceId; - DataClassification = SystemMetadata; - } - field(88; SystemStatus; Option) - { - ExternalName = 'msdyn_systemstatus'; - ExternalType = 'Picklist'; - Description = 'Tracks the current system status.'; - Caption = 'System Status'; - InitValue = " "; - OptionMembers = " ",Unscheduled,Scheduled,InProgress,Completed,Posted,Canceled; - OptionOrdinalValues = -1, 690970000, 690970001, 690970002, 690970003, 690970004, 690970005; - DataClassification = SystemMetadata; - } - field(90; Taxable; Boolean) - { - ExternalName = 'msdyn_taxable'; - ExternalType = 'Boolean'; - Description = 'Shows whether sales tax is to be charged for this work order.'; - Caption = 'Taxable'; - DataClassification = SystemMetadata; - } - field(93; TimeClosed; Datetime) - { - ExternalName = 'msdyn_timeclosed'; - ExternalType = 'DateTime'; - Description = 'Enter the time this work order was last closed.'; - Caption = 'Closed On'; - DataClassification = SystemMetadata; - } - field(94; TimeFromPromised; Datetime) - { - ExternalName = 'msdyn_timefrompromised'; - ExternalType = 'DateTime'; - Description = 'Enter the starting range of the time promised to the account that incidents will be resolved.'; - Caption = 'Time From Promised'; - DataClassification = SystemMetadata; - } - field(97; TimeToPromised; Datetime) - { - ExternalName = 'msdyn_timetopromised'; - ExternalType = 'DateTime'; - Description = 'Enter the ending range of the time promised to the account that incidents will be resolved.'; - Caption = 'Time To Promised'; - DataClassification = SystemMetadata; - } - field(98; TimeWindowEnd; Datetime) - { - ExternalName = 'msdyn_timewindowend'; - ExternalType = 'DateTime'; - Caption = 'Time Window End'; - DataClassification = SystemMetadata; - } - field(99; TimeWindowStart; Datetime) - { - ExternalName = 'msdyn_timewindowstart'; - ExternalType = 'DateTime'; - Caption = 'Time Window Start'; - DataClassification = SystemMetadata; - } - field(100; TotalAmount; Decimal) - { - ExternalName = 'msdyn_totalamount'; - ExternalType = 'Money'; - Description = 'Enter the summary of total billing amount for this work order.'; - Caption = 'Total Amount'; - DataClassification = SystemMetadata; - } - field(101; TotalAmount_Base; Decimal) - { - ExternalName = 'msdyn_totalamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the total amount in the base currency.'; - Caption = 'Total Amount (Base)'; - DataClassification = SystemMetadata; - } - field(102; TotalSalesTax; Decimal) - { - ExternalName = 'msdyn_totalsalestax'; - ExternalType = 'Money'; - Description = 'Enter the summary of total sales tax charged for this work order.'; - Caption = 'Total Sales Tax'; - DataClassification = SystemMetadata; - } - field(103; TotalSalesTax_Base; Decimal) - { - ExternalName = 'msdyn_totalsalestax_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the total sales tax in the base currency.'; - Caption = 'Total Sales Tax (Base)'; - DataClassification = SystemMetadata; - } - field(105; WorkLocation; Option) - { - ExternalName = 'msdyn_worklocation'; - ExternalType = 'Picklist'; - Caption = 'Work Location'; - InitValue = Onsite; - OptionMembers = Onsite,Facility,LocationAgnostic; - OptionOrdinalValues = 690970000, 690970001, 690970002; - DataClassification = SystemMetadata; - } - field(109; WorkOrderSummary; BLOB) - { - ExternalName = 'msdyn_workordersummary'; - ExternalType = 'Memo'; - Description = 'Type a summary description of the job.'; - Caption = 'Work Order Summary'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(110; WorkOrderType; GUID) - { - ExternalName = 'msdyn_workordertype'; - ExternalType = 'Lookup'; - Description = 'Work Order Type'; - Caption = 'Work Order Type'; - TableRelation = "FS Work Order Type".WorkOrderTypeId; - DataClassification = SystemMetadata; - } - field(115; PreferredResourceName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource".Name where(BookableResourceId = field(PreferredResource))); - ExternalName = 'msdyn_preferredresourcename'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(116; SupportContactName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource".Name where(BookableResourceId = field(SupportContact))); - ExternalName = 'msdyn_supportcontactname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(121; CustomerAssetName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Customer Asset".Name where(CustomerAssetId = field(CustomerAsset))); - ExternalName = 'msdyn_customerassetname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(128; ParentWorkOrderName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order".Name where(WorkOrderId = field(ParentWorkOrder))); - ExternalName = 'msdyn_parentworkordername'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(129; SubStatusName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order Substatus".Name where(WorkOrderSubstatusId = field(SubStatus))); - ExternalName = 'msdyn_substatusname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(130; WorkOrderTypeName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order Type".Name where(WorkOrderTypeId = field(WorkOrderType))); - ExternalName = 'msdyn_workordertypename'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(138; completedon; Datetime) - { - ExternalName = 'msdyn_completedon'; - ExternalType = 'DateTime'; - Description = 'When Bookings are used on a Work Order, this field is auto-populated based on the latest End Time from the related Bookings. Otherwise, this field is populated based on the change of System Status.'; - Caption = 'Completed On'; - DataClassification = SystemMetadata; - } - field(139; CostNTEPercent; Integer) - { - ExternalName = 'msdyn_costntepercent'; - ExternalType = 'Integer'; - Description = 'Indicates the percentage proximity or overage of the work order cost based on applied Cost not-to-exceed (rounded up to the nearest whole number).'; - Caption = 'Cost not-to-exceed'; - DataClassification = SystemMetadata; - } - field(140; firstarrivedon; Datetime) - { - ExternalName = 'msdyn_firstarrivedon'; - ExternalType = 'DateTime'; - Description = 'When Bookings are used on a Work Order, this field is auto-populated based on the earliest Actual Arrival Time from the related Bookings.'; - Caption = 'First Arrived On'; - DataClassification = SystemMetadata; - } - field(142; NotToExceedCostAmount; Decimal) - { - ExternalName = 'msdyn_nottoexceedcostamount'; - ExternalType = 'Money'; - Description = 'The value of not-to-exceed cost for the work order in base currency.'; - Caption = 'Cost not-to-exceed'; - DataClassification = SystemMetadata; - } - field(143; NotToExceedCostAmount_Base; Decimal) - { - ExternalName = 'msdyn_nottoexceedcostamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Value of the Cost not-to-exceed in base currency.'; - Caption = 'Cost not-to-exceed (Base)'; - DataClassification = SystemMetadata; - } - field(144; NotToExceedPriceAmount; Decimal) - { - ExternalName = 'msdyn_nottoexceedpriceamount'; - ExternalType = 'Money'; - Description = 'The value of not-to-exceed price for the work order in base currency.'; - Caption = 'Price not-to-exceed'; - DataClassification = SystemMetadata; - } - field(145; NotToExceedPriceAmount_Base; Decimal) - { - ExternalName = 'msdyn_nottoexceedpriceamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Value of the Price not-to-exceed in base currency.'; - Caption = 'Price not-to-exceed (Base)'; - DataClassification = SystemMetadata; - } - field(146; PhoneNumber; Text[250]) - { - ExternalName = 'msdyn_phoneNumber'; - ExternalType = 'String'; - Caption = 'Customer Phone Number'; - DataClassification = SystemMetadata; - } - field(147; PriceNTEPercent; Integer) - { - ExternalName = 'msdyn_pricentepercent'; - ExternalType = 'Integer'; - Description = 'Indicates the percentage proximity or overage of the work order price based on applied Price not-to-exceed (rounded up to the nearest whole number).'; - Caption = 'Price not-to-exceed'; - DataClassification = SystemMetadata; - } - field(149; ProductsServicesCost; Decimal) - { - ExternalName = 'msdyn_productsservicescost'; - ExternalType = 'Money'; - Description = 'The total actual cost of the products and services'; - Caption = 'Total Cost'; - DataClassification = SystemMetadata; - } - field(150; ProductsServicesCost_Base; Decimal) - { - ExternalName = 'msdyn_productsservicescost_base'; - ExternalType = 'Money'; - Description = 'Value of the Total Cost in base currency.'; - Caption = 'Total Cost (Base)'; - DataClassification = SystemMetadata; - } - field(151; ProductsServicesEstimatedCost; Decimal) - { - ExternalName = 'msdyn_productsservicesestimatedcost'; - ExternalType = 'Money'; - Description = 'The total estimated cost of the products and services'; - Caption = 'Total Estimated Cost'; - DataClassification = SystemMetadata; - } - field(152; ProductsServicesEstimatedCost_Base; Decimal) - { - ExternalName = 'msdyn_productsservicesestimatedcost_base'; - ExternalType = 'Money'; - Description = 'Value of the Total Estimated Cost in base currency.'; - Caption = 'Total Estimated Cost (Base)'; - DataClassification = SystemMetadata; - } - field(153; TotalEstimatedAfterTaxPrice; Decimal) - { - ExternalName = 'msdyn_totalestimatedaftertaxprice'; - ExternalType = 'Money'; - Description = 'The estimated price after adding tax to the subtotal'; - Caption = 'Total Estimated After Tax Price'; - DataClassification = SystemMetadata; - } - field(154; TotalEstimatedAfterTaxPrice_Base; Decimal) - { - ExternalName = 'msdyn_totalestimatedaftertaxprice_base'; - ExternalType = 'Money'; - Description = 'Value of the Total Estimated After Tax Price in base currency.'; - Caption = 'Total Estimated After Tax Price (Base)'; - DataClassification = SystemMetadata; - } - field(155; TotalEstimatedDuration; Integer) - { - ExternalName = 'msdyn_totalestimatedduration'; - ExternalType = 'Integer'; - Description = 'Calculated from the estimated duration of Work Order Incidents and Work Order Service Tasks not related to a Work Order Incident on the Work Order. Intended to be read-only.'; - Caption = 'Total Estimated Duration'; - DataClassification = SystemMetadata; - } - field(162; DisplayAddress; Text[2048]) - { - ExternalName = 'msdyn_displayaddress'; - ExternalType = 'String'; - ExternalAccess = Read; - Description = 'Combined address field suitable for display'; - Caption = 'Display Address'; - DataClassification = SystemMetadata; - } - field(163; ProjectTask; GUID) - { - ExternalName = 'bcbi_businesscentralprojecttask'; - ExternalType = 'Lookup'; - Description = 'Business Central Project Task'; - Caption = 'Business Central Project Task'; - TableRelation = "FS Project Task".ProjectTaskId; - DataClassification = SystemMetadata; - } - field(164; CompanyId; GUID) - { - ExternalName = 'bcbi_company'; - ExternalType = 'Lookup'; - Description = 'Business Central Company'; - Caption = 'Company Id'; - TableRelation = "CDS Company".CompanyId; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; WorkOrderId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderIncident.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderIncident.Table.al deleted file mode 100644 index 6837e3621c..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderIncident.Table.al +++ /dev/null @@ -1,312 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6618 "FS Work Order Incident" -{ - ExternalName = 'msdyn_workorderincident'; - TableType = CRM; - Description = 'Specify work order incidents reported to you by the client. These are also referred to as problem codes.'; - DataClassification = SystemMetadata; - - fields - { - field(1; WorkOrderIncidentId; GUID) - { - ExternalName = 'msdyn_workorderincidentid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'Work Order Incident'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Work Order Incident'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Work Order Incident'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[100]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Enter the name of the custom entity.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(36; CustomerAsset; GUID) - { - ExternalName = 'msdyn_customerasset'; - ExternalType = 'Lookup'; - Description = 'Customer Asset related to this incident reported'; - Caption = 'Customer Asset'; - TableRelation = "FS Customer Asset".CustomerAssetId; - DataClassification = SystemMetadata; - } - field(37; Description; BLOB) - { - ExternalName = 'msdyn_description'; - ExternalType = 'Memo'; - Description = 'Incident description'; - Caption = 'Description'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(38; EstimatedDuration; Integer) - { - ExternalName = 'msdyn_estimatedduration'; - ExternalType = 'Integer'; - Description = 'Shows the time estimated to resolve this incident.'; - Caption = 'Estimated Duration'; - DataClassification = SystemMetadata; - } - field(39; IncidentResolved; Boolean) - { - ExternalName = 'msdyn_incidentresolved'; - ExternalType = 'Boolean'; - Description = 'Shows if the incident has been resolved by one of its related tasks.'; - Caption = 'Incident Resolved'; - DataClassification = SystemMetadata; - } - field(42; InternalFlags; BLOB) - { - ExternalName = 'msdyn_internalflags'; - ExternalType = 'Memo'; - Description = 'For internal use only.'; - Caption = 'Internal Flags'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(43; IsMobile; Boolean) - { - ExternalName = 'msdyn_ismobile'; - ExternalType = 'Boolean'; - Caption = 'Is Mobile'; - DataClassification = SystemMetadata; - } - field(45; IsPrimary; Boolean) - { - ExternalName = 'msdyn_isprimary'; - ExternalType = 'Boolean'; - Description = ''; - Caption = 'Is Primary'; - DataClassification = SystemMetadata; - } - field(47; ItemsPopulated; Boolean) - { - ExternalName = 'msdyn_itemspopulated'; - ExternalType = 'Boolean'; - Caption = 'Items Populated'; - DataClassification = SystemMetadata; - } - field(50; TasksPercentCompleted; Decimal) - { - ExternalName = 'msdyn_taskspercentcompleted'; - ExternalType = 'Double'; - Description = 'Shows the percent completed on associated tasks. This indicates the total of completed tasks, but not if the incident was resolved.'; - Caption = 'Tasks % Completed'; - DataClassification = SystemMetadata; - } - field(51; WorkOrder; GUID) - { - ExternalName = 'msdyn_workorder'; - ExternalType = 'Lookup'; - Description = 'Parent Work Order where incident was reported on'; - Caption = 'Work Order'; - TableRelation = "FS Work Order".WorkOrderId; - DataClassification = SystemMetadata; - } - field(53; CustomerAssetName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Customer Asset".Name where(CustomerAssetId = field(CustomerAsset))); - ExternalName = 'msdyn_customerassetname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(56; WorkOrderName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order".Name where(WorkOrderId = field(WorkOrder))); - ExternalName = 'msdyn_workordername'; - ExternalType = 'String'; - ExternalAccess = Read; - } - } - keys - { - key(PK; WorkOrderIncidentId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderProduct.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderProduct.Table.al deleted file mode 100644 index aff2eaf9fd..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderProduct.Table.al +++ /dev/null @@ -1,726 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6619 "FS Work Order Product" -{ - ExternalName = 'msdyn_workorderproduct'; - TableType = CRM; - Description = 'In this entity you record all the products proposed and used for a work order'; - DataClassification = SystemMetadata; - - fields - { - field(1; WorkOrderProductId; GUID) - { - ExternalName = 'msdyn_workorderproductid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'Work Order Product'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Work Order Product'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Work Order Product'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[200]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Enter the name of the custom entity.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(35; AdditionalCost; Decimal) - { - ExternalName = 'msdyn_additionalcost'; - ExternalType = 'Money'; - Description = 'Enter any additional costs associated with this product. The values are manually entered. Note: additional cost is not unit dependent.'; - Caption = 'Additional Cost'; - DataClassification = SystemMetadata; - } - field(36; TransactionCurrencyId; GUID) - { - ExternalName = 'transactioncurrencyid'; - ExternalType = 'Lookup'; - Description = 'Unique identifier of the currency associated with the entity.'; - Caption = 'Currency'; - TableRelation = "CRM Transactioncurrency".TransactionCurrencyId; - DataClassification = SystemMetadata; - } - field(38; ExchangeRate; Decimal) - { - ExternalName = 'exchangerate'; - ExternalType = 'Decimal'; - ExternalAccess = Read; - Description = 'Shows the exchange rate for the currency associated with the entity with respect to the base currency.'; - Caption = 'Exchange Rate'; - DataClassification = SystemMetadata; - } - field(39; additionalcost_Base; Decimal) - { - ExternalName = 'msdyn_additionalcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the additional cost in the base currency.'; - Caption = 'Additional Cost (Base)'; - DataClassification = SystemMetadata; - } - field(40; WarehouseId; GUID) - { - ExternalName = 'msdyn_warehouse'; - ExternalType = 'Lookup'; - Description = 'Unique identifier of the warehouse associated with the entity.'; - Caption = 'Warehouse'; - TableRelation = "FS Warehouse".WarehouseId; - DataClassification = SystemMetadata; - } - field(41; Allocated; Boolean) - { - ExternalName = 'msdyn_allocated'; - ExternalType = 'Boolean'; - Caption = 'Allocated'; - DataClassification = SystemMetadata; - } - field(43; Booking; GUID) - { - ExternalName = 'msdyn_booking'; - ExternalType = 'Lookup'; - Description = 'The booking where this product was added'; - Caption = 'Booking'; - TableRelation = "FS Bookable Resource Booking".BookableResourceBookingId; - DataClassification = SystemMetadata; - } - field(44; CommissionCosts; Decimal) - { - ExternalName = 'msdyn_commissioncosts'; - ExternalType = 'Money'; - Description = 'Enter the commission costs associated with this product. The value is manually specified and isn''t automatically calculated.'; - Caption = 'Commission Costs'; - DataClassification = SystemMetadata; - } - field(45; commissioncosts_Base; Decimal) - { - ExternalName = 'msdyn_commissioncosts_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the commission costs in the base currency.'; - Caption = 'Commission Costs (Base)'; - DataClassification = SystemMetadata; - } - field(46; CustomerAsset; GUID) - { - ExternalName = 'msdyn_customerasset'; - ExternalType = 'Lookup'; - Description = 'Unique identifier for Customer Asset associated with Work Order Product.'; - Caption = 'Customer Asset'; - TableRelation = "FS Customer Asset".CustomerAssetId; - DataClassification = SystemMetadata; - } - field(47; Description; BLOB) - { - ExternalName = 'msdyn_description'; - ExternalType = 'Memo'; - Description = 'Enter the description of the product as presented to the customer. The value defaults to the description defined on the product.'; - Caption = 'Description'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(48; DisableEntitlement; Boolean) - { - ExternalName = 'msdyn_disableentitlement'; - ExternalType = 'Boolean'; - Description = 'Choose whether to disable entitlement selection for this work order product.'; - Caption = 'Disable Entitlement'; - DataClassification = SystemMetadata; - } - field(50; DiscountAmount; Decimal) - { - ExternalName = 'msdyn_discountamount'; - ExternalType = 'Money'; - Description = 'Specify any discount amount on this product. Note: If you enter a discount amount you cannot enter a discount %'; - Caption = 'Discount Amount'; - DataClassification = SystemMetadata; - } - field(51; DiscountAmount_Base; Decimal) - { - ExternalName = 'msdyn_discountamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the discount amount in the base currency.'; - Caption = 'Discount Amount (Base)'; - DataClassification = SystemMetadata; - } - field(52; DiscountPercent; Decimal) - { - ExternalName = 'msdyn_discountpercent'; - ExternalType = 'Float'; - Description = 'Specify any discount % on this product. Note: If you enter a discount % it will overwrite the discount $'; - Caption = 'Discount %'; - DataClassification = SystemMetadata; - } - field(54; EstimateDiscountAmount; Decimal) - { - ExternalName = 'msdyn_estimatediscountamount'; - ExternalType = 'Money'; - Description = 'Enter a discount amount on the subtotal amount. Note: If you enter a discount amount you cannot enter a discount %'; - Caption = 'Estimate Discount Amount'; - DataClassification = SystemMetadata; - } - field(55; EstimateDiscountAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimatediscountamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate discount amount in the base currency.'; - Caption = 'Estimate Discount Amount (Base)'; - DataClassification = SystemMetadata; - } - field(56; EstimateDiscountPercent; Decimal) - { - ExternalName = 'msdyn_estimatediscountpercent'; - ExternalType = 'Float'; - Description = 'Enter a discount % on the subtotal amount. Note: If you enter a discount % it will overwrite the discount $'; - Caption = 'Estimate Discount %'; - DataClassification = SystemMetadata; - } - field(57; EstimateQuantity; Decimal) - { - ExternalName = 'msdyn_estimatequantity'; - ExternalType = 'Float'; - Description = 'Enter the estimated required quantity of this product.'; - Caption = 'Estimate Quantity'; - DataClassification = SystemMetadata; - } - field(58; EstimateSubtotal; Decimal) - { - ExternalName = 'msdyn_estimatesubtotal'; - ExternalType = 'Money'; - Description = 'Shows the total amount for this product, excluding discounts.'; - Caption = 'Estimate Subtotal'; - DataClassification = SystemMetadata; - } - field(59; EstimateSubtotal_Base; Decimal) - { - ExternalName = 'msdyn_estimatesubtotal_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate subtotal in the base currency.'; - Caption = 'Estimate Subtotal (Base)'; - DataClassification = SystemMetadata; - } - field(60; EstimateTotalAmount; Decimal) - { - ExternalName = 'msdyn_estimatetotalamount'; - ExternalType = 'Money'; - Description = 'Shows the estimated total amount of this product, including discounts.'; - Caption = 'Estimate Total Amount'; - DataClassification = SystemMetadata; - } - field(61; EstimateTotalAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimatetotalamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate total amount in the base currency.'; - Caption = 'Estimate Total Amount (Base)'; - DataClassification = SystemMetadata; - } - field(62; EstimateTotalCost; Decimal) - { - ExternalName = 'msdyn_estimatetotalcost'; - ExternalType = 'Money'; - Description = 'Shows the estimated total cost of this product.'; - Caption = 'Estimate Total Cost'; - DataClassification = SystemMetadata; - } - field(63; EtimateTotalCost_Base; Decimal) - { - ExternalName = 'msdyn_estimatetotalcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate total cost in the base currency.'; - Caption = 'Estimate Total Cost (Base)'; - DataClassification = SystemMetadata; - } - field(64; EstimateUnitAmount; Decimal) - { - ExternalName = 'msdyn_estimateunitamount'; - ExternalType = 'Money'; - Description = 'Shows the estimated sale amount per unit.'; - Caption = 'Estimate Unit Amount'; - DataClassification = SystemMetadata; - } - field(65; EstimateUnitAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimateunitamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate unit amount in the base currency.'; - Caption = 'Estimate Unit Amount (Base)'; - DataClassification = SystemMetadata; - } - field(66; EstimateUnitCost; Decimal) - { - ExternalName = 'msdyn_estimateunitcost'; - ExternalType = 'Money'; - Description = 'Shows the estimated cost amount per unit.'; - Caption = 'Estimate Unit Cost'; - DataClassification = SystemMetadata; - } - field(67; EstimateUnitCost_Base; Decimal) - { - ExternalName = 'msdyn_estimateunitcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate unit cost in the base currency.'; - Caption = 'Estimate Unit Cost (Base)'; - DataClassification = SystemMetadata; - } - field(68; InternalDescription; BLOB) - { - ExternalName = 'msdyn_internaldescription'; - ExternalType = 'Memo'; - Description = 'Enter any internal notes you want to track on this product.'; - Caption = 'Internal Description'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(69; InternalFlags; BLOB) - { - ExternalName = 'msdyn_internalflags'; - ExternalType = 'Memo'; - Description = 'For internal use only.'; - Caption = 'Internal Flags'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(70; LineOrder; Integer) - { - ExternalName = 'msdyn_lineorder'; - ExternalType = 'Integer'; - Description = ''; - Caption = 'Line Order'; - DataClassification = SystemMetadata; - } - field(71; LineStatus; Option) - { - ExternalName = 'msdyn_linestatus'; - ExternalType = 'Picklist'; - Description = 'Enter the current status of the line, estimate or used.'; - Caption = 'Line Status'; - InitValue = Estimated; - OptionMembers = Estimated,Used; - OptionOrdinalValues = 690970000, 690970001; - DataClassification = SystemMetadata; - } - field(73; PriceList; GUID) - { - ExternalName = 'msdyn_pricelist'; - ExternalType = 'Lookup'; - Description = 'Price List that determines the pricing for this product'; - Caption = 'Price List'; - TableRelation = "CRM Pricelevel".PriceLevelId; - DataClassification = SystemMetadata; - } - field(74; Product; GUID) - { - ExternalName = 'msdyn_product'; - ExternalType = 'Lookup'; - Description = 'Product to use'; - Caption = 'Product'; - TableRelation = "CRM Product".ProductId; - DataClassification = SystemMetadata; - } - field(76; QtyToBill; Decimal) - { - ExternalName = 'msdyn_qtytobill'; - ExternalType = 'Float'; - Description = 'Enter the quantity you wish to bill the customer for. By default, this will default to the same value as "Quantity."'; - Caption = 'Quantity To Bill'; - DataClassification = SystemMetadata; - } - field(77; Quantity; Decimal) - { - ExternalName = 'msdyn_quantity'; - ExternalType = 'Float'; - Description = 'Shows the actual quantity of the product.'; - Caption = 'Quantity'; - DataClassification = SystemMetadata; - } - field(78; Subtotal; Decimal) - { - ExternalName = 'msdyn_subtotal'; - ExternalType = 'Money'; - Description = 'Enter the total amount excluding discounts.'; - Caption = 'Subtotal'; - DataClassification = SystemMetadata; - } - field(79; Subtotal_Base; Decimal) - { - ExternalName = 'msdyn_subtotal_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the subtotal in the base currency.'; - Caption = 'Subtotal (Base)'; - DataClassification = SystemMetadata; - } - field(80; Taxable; Boolean) - { - ExternalName = 'msdyn_taxable'; - ExternalType = 'Boolean'; - Description = 'Specify if product is taxable. If you do not wish to charge tax set this field to No.'; - Caption = 'Taxable'; - DataClassification = SystemMetadata; - } - field(82; TotalAmount; Decimal) - { - ExternalName = 'msdyn_totalamount'; - ExternalType = 'Money'; - Description = 'Enter the total amount charged to the customer.'; - Caption = 'Total Amount'; - DataClassification = SystemMetadata; - } - field(83; TotalAmount_Base; Decimal) - { - ExternalName = 'msdyn_totalamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the total amount in the base currency.'; - Caption = 'Total Amount (Base)'; - DataClassification = SystemMetadata; - } - field(84; TotalCost; Decimal) - { - ExternalName = 'msdyn_totalcost'; - ExternalType = 'Money'; - Description = 'Shows the total cost of this product. This is calculated by (Unit Cost * Units) + Additional Cost + Commission Costs.'; - Caption = 'Total Cost'; - DataClassification = SystemMetadata; - } - field(85; TotalCost_Base; Decimal) - { - ExternalName = 'msdyn_totalcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the total cost in the base currency.'; - Caption = 'Total Cost (Base)'; - DataClassification = SystemMetadata; - } - field(86; Unit; GUID) - { - ExternalName = 'msdyn_unit'; - ExternalType = 'Lookup'; - Description = 'The unit that determines the pricing and final quantity for this product'; - Caption = 'Unit'; - TableRelation = "CRM Uom".UoMId; - DataClassification = SystemMetadata; - } - field(87; UnitAmount; Decimal) - { - ExternalName = 'msdyn_unitamount'; - ExternalType = 'Money'; - Description = 'Enter the amount you want to charge the customer per unit. By default, this is calculated based on the selected price list. The amount can be changed.'; - Caption = 'Unit Amount'; - DataClassification = SystemMetadata; - } - field(88; UnitAmount_Base; Decimal) - { - ExternalName = 'msdyn_unitamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the unit amount in the base currency.'; - Caption = 'Unit Amount (Base)'; - DataClassification = SystemMetadata; - } - field(89; UnitCost; Decimal) - { - ExternalName = 'msdyn_unitcost'; - ExternalType = 'Money'; - Description = 'Shows the actual cost per unit.'; - Caption = 'Unit Cost'; - DataClassification = SystemMetadata; - } - field(90; UnitCost_Base; Decimal) - { - ExternalName = 'msdyn_unitcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the unit cost in the base currency.'; - Caption = 'Unit Cost (Base)'; - DataClassification = SystemMetadata; - } - field(92; WorkOrder; GUID) - { - ExternalName = 'msdyn_workorder'; - ExternalType = 'Lookup'; - Description = 'Unique identifier for Work Order associated with Work Order Product.'; - Caption = 'Work Order'; - TableRelation = "FS Work Order".WorkOrderId; - DataClassification = SystemMetadata; - } - field(93; WorkOrderIncident; GUID) - { - ExternalName = 'msdyn_workorderincident'; - ExternalType = 'Lookup'; - Description = 'The Incident related to this product'; - Caption = 'Work Order Incident'; - TableRelation = "FS Work Order Incident".WorkOrderIncidentId; - DataClassification = SystemMetadata; - } - field(94; BookingName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource Booking".Name where(BookableResourceBookingId = field(Booking))); - ExternalName = 'msdyn_bookingname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(97; CustomerAssetName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Customer Asset".Name where(CustomerAssetId = field(CustomerAsset))); - ExternalName = 'msdyn_customerassetname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(100; WorkOrderName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order".Name where(WorkOrderId = field(WorkOrder))); - ExternalName = 'msdyn_workordername'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(101; WorkOrderIncidentName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order Incident".Name where(WorkOrderIncidentId = field(WorkOrderIncident))); - ExternalName = 'msdyn_workorderincidentname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(105; ProjectTask; GUID) - { - ExternalName = 'bcbi_projecttask'; - ExternalType = 'Lookup'; - Description = 'Business Central Project Task'; - Caption = 'External Project'; - TableRelation = "FS Project Task".ProjectTaskId; - DataClassification = SystemMetadata; - } - field(106; WorkOrderStatus; Option) - { - ExternalName = 'bcbi_workorderstatus'; - ExternalType = 'Picklist'; - Description = 'The status of the work order'; - Caption = 'Work Order Status'; - InitValue = " "; - OptionMembers = " ",Unscheduled,Scheduled,InProgress,Completed,Posted,Canceled; - OptionOrdinalValues = -1, 690970000, 690970001, 690970002, 690970003, 690970004, 690970005; - DataClassification = SystemMetadata; - } - field(108; CompanyId; GUID) - { - ExternalName = 'bcbi_company'; - ExternalType = 'Lookup'; - Description = 'Business Central Company'; - Caption = 'Company Id'; - TableRelation = "CDS Company".CompanyId; - DataClassification = SystemMetadata; - } - field(111; QuantityConsumed; Decimal) - { - ExternalName = 'bcbi_quantityconsumed'; - ExternalType = 'Float'; - Description = 'Quantity consumed in Dynamics 365 Business Central'; - Caption = 'Quantity Consumed'; - } - field(112; QuantityInvoiced; Decimal) - { - ExternalName = 'bcbi_quantityinvoiced'; - ExternalType = 'Float'; - Description = 'Quantity invoiced in Dynamics 365 Business Central. When this value is different than 0, you can no longer edit the work order product.'; - Caption = 'Quantity Invoiced'; - } - } - keys - { - key(PK; workorderproductId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderService.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderService.Table.al deleted file mode 100644 index 4830d0383b..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderService.Table.al +++ /dev/null @@ -1,767 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6620 "FS Work Order Service" -{ - ExternalName = 'msdyn_workorderservice'; - TableType = CRM; - Description = 'Record all services proposed and performed for work order'; - DataClassification = SystemMetadata; - - fields - { - field(1; WorkOrderServiceId; GUID) - { - ExternalName = 'msdyn_workorderserviceid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'Work Order Service'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Work Order Service'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Work Order Service'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[200]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Enter the name of the custom entity.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(35; AdditionalCost; Decimal) - { - ExternalName = 'msdyn_additionalcost'; - ExternalType = 'Money'; - Description = 'Enter any additional costs associated with this service. The values are manually entered. Note: additional cost is not unit dependent.'; - Caption = 'Additional Cost'; - DataClassification = SystemMetadata; - } - field(36; TransactionCurrencyId; GUID) - { - ExternalName = 'transactioncurrencyid'; - ExternalType = 'Lookup'; - Description = 'Unique identifier of the currency associated with the entity.'; - Caption = 'Currency'; - TableRelation = "CRM Transactioncurrency".TransactionCurrencyId; - DataClassification = SystemMetadata; - } - field(38; ExchangeRate; Decimal) - { - ExternalName = 'exchangerate'; - ExternalType = 'Decimal'; - ExternalAccess = Read; - Description = 'Shows the exchange rate for the currency associated with the entity with respect to the base currency.'; - Caption = 'Exchange Rate'; - DataClassification = SystemMetadata; - } - field(39; AdditionalCost_Base; Decimal) - { - ExternalName = 'msdyn_additionalcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the additional cost in the base currency.'; - Caption = 'Additional Cost (Base)'; - DataClassification = SystemMetadata; - } - field(41; Booking; GUID) - { - ExternalName = 'msdyn_booking'; - ExternalType = 'Lookup'; - Description = 'Shows the resource booking detail where this product was added.'; - Caption = 'Booking'; - TableRelation = "FS Bookable Resource Booking".BookableResourceBookingId; - DataClassification = SystemMetadata; - } - field(42; CalculatedUnitAmount; Decimal) - { - ExternalName = 'msdyn_calculatedunitamount'; - ExternalType = 'Money'; - Description = 'Shows the sale amount per unit calculated by the system considering the minimum charge, if applicable.'; - Caption = 'Calculated Unit Amount'; - DataClassification = SystemMetadata; - } - field(43; CalculatedUnitAmount_Base; Decimal) - { - ExternalName = 'msdyn_calculatedunitamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the calculated unit amount in the base currency.'; - Caption = 'Calculated Unit Amount (Base)'; - DataClassification = SystemMetadata; - } - field(44; CommissionCosts; Decimal) - { - ExternalName = 'msdyn_commissioncosts'; - ExternalType = 'Money'; - Description = 'Enter the commission costs associated with this service. The value is manually specified and isn''t automatically calculated.'; - Caption = 'Commission Costs'; - DataClassification = SystemMetadata; - } - field(45; CommissionCosts_Base; Decimal) - { - ExternalName = 'msdyn_commissioncosts_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the commission costs in the base currency.'; - Caption = 'Commission Costs (Base)'; - DataClassification = SystemMetadata; - } - field(46; CustomerAsset; GUID) - { - ExternalName = 'msdyn_customerasset'; - ExternalType = 'Lookup'; - Description = 'Unique identifier for Customer Asset associated with Work Order Service.'; - Caption = 'Customer Asset'; - TableRelation = "FS Customer Asset".CustomerAssetId; - DataClassification = SystemMetadata; - } - field(47; Description; BLOB) - { - ExternalName = 'msdyn_description'; - ExternalType = 'Memo'; - Description = 'Enter the description of the service as presented to the customer. The value defaults to the description defined on the service.'; - Caption = 'Description'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(48; DisableEntitlement; Boolean) - { - ExternalName = 'msdyn_disableentitlement'; - ExternalType = 'Boolean'; - Description = 'Choose whether to disable entitlement selection for this work order service.'; - Caption = 'Disable Entitlement'; - DataClassification = SystemMetadata; - } - field(50; DiscountAmount; Decimal) - { - ExternalName = 'msdyn_discountamount'; - ExternalType = 'Money'; - Description = 'Specify any discount amount on this service. Note: If you enter a discount amount you cannot enter a discount %'; - Caption = 'Discount Amount'; - DataClassification = SystemMetadata; - } - field(51; DiscountAmount_Base; Decimal) - { - ExternalName = 'msdyn_discountamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the discount Amount in the base currency.'; - Caption = 'Discount Amount (Base)'; - DataClassification = SystemMetadata; - } - field(52; DiscountPercent; Decimal) - { - ExternalName = 'msdyn_discountpercent'; - ExternalType = 'Float'; - Description = 'Specify any discount % on this service. Note: If you enter a discount % it will overwrite the discount $'; - Caption = 'Discount %'; - DataClassification = SystemMetadata; - } - field(53; Duration; Integer) - { - ExternalName = 'msdyn_duration'; - ExternalType = 'Integer'; - Description = 'Shows the actual duration of service.'; - Caption = 'Duration'; - DataClassification = SystemMetadata; - } - field(54; DurationToBill; Integer) - { - ExternalName = 'msdyn_durationtobill'; - ExternalType = 'Integer'; - Description = 'Enter the quantity you wish to bill the customer for. By default, this will default to the same value as "Quantity."'; - Caption = 'Duration To Bill'; - DataClassification = SystemMetadata; - } - field(56; EstimateCalculatedUnitAmount; Decimal) - { - ExternalName = 'msdyn_estimatecalculatedunitamount'; - ExternalType = 'Money'; - Description = 'Shows the estimated sale amount per unit calculated by the system considering the initial charge (if applicable).'; - Caption = 'Estimate Calculated Unit Amount'; - DataClassification = SystemMetadata; - } - field(57; EstimateCalculatedUnitAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimatecalculatedunitamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate calculated unit amount in the base currency.'; - Caption = 'Estimate Calculated Unit Amount (Base)'; - DataClassification = SystemMetadata; - } - field(58; EstimateDiscountAmount; Decimal) - { - ExternalName = 'msdyn_estimatediscountamount'; - ExternalType = 'Money'; - Description = 'Enter a discount amount on the subtotal amount. Note: If you enter a discount amount you cannot enter a discount %'; - Caption = 'Estimate Discount Amount'; - DataClassification = SystemMetadata; - } - field(59; EstimateDiscountAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimatediscountamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate discount amount in the base currency.'; - Caption = 'Estimate Discount Amount (Base)'; - DataClassification = SystemMetadata; - } - field(60; EstimateDiscountPercent; Decimal) - { - ExternalName = 'msdyn_estimatediscountpercent'; - ExternalType = 'Float'; - Description = 'Enter a discount % on the subtotal amount. Note: If you enter a discount % it will overwrite the discount $'; - Caption = 'Estimate Discount %'; - DataClassification = SystemMetadata; - } - field(61; EstimateDuration; Integer) - { - ExternalName = 'msdyn_estimateduration'; - ExternalType = 'Integer'; - Description = 'Enter the estimated duration of this service.'; - Caption = 'Estimate Duration'; - DataClassification = SystemMetadata; - } - field(62; EstimateSubtotal; Decimal) - { - ExternalName = 'msdyn_estimatesubtotal'; - ExternalType = 'Money'; - Description = 'Shows the total amount for this service, excluding discounts.'; - Caption = 'Estimate Subtotal'; - DataClassification = SystemMetadata; - } - field(63; EstimateSubtotal_Base; Decimal) - { - ExternalName = 'msdyn_estimatesubtotal_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate subtotal in the base currency.'; - Caption = 'Estimate Subtotal (Base)'; - DataClassification = SystemMetadata; - } - field(64; EstimateTotalAmount; Decimal) - { - ExternalName = 'msdyn_estimatetotalamount'; - ExternalType = 'Money'; - Description = 'Shows the estimated total amount of this service, including discounts.'; - Caption = 'Estimate Total Amount'; - DataClassification = SystemMetadata; - } - field(65; EstimateTotalAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimatetotalamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate total amount in the base currency.'; - Caption = 'Estimate Total Amount (Base)'; - DataClassification = SystemMetadata; - } - field(66; EstimateTotalCost; Decimal) - { - ExternalName = 'msdyn_estimatetotalcost'; - ExternalType = 'Money'; - Description = 'Shows the estimated total cost of this service.'; - Caption = 'Estimate Total Cost'; - DataClassification = SystemMetadata; - } - field(67; EstimateTotalCost_Base; Decimal) - { - ExternalName = 'msdyn_estimatetotalcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate total cost in the base currency.'; - Caption = 'Estimate Total Cost (Base)'; - DataClassification = SystemMetadata; - } - field(68; EstimateUnitAmount; Decimal) - { - ExternalName = 'msdyn_estimateunitamount'; - ExternalType = 'Money'; - Description = 'Shows the estimated sale amount per unit.'; - Caption = 'Estimate Unit Amount'; - DataClassification = SystemMetadata; - } - field(69; EtimateUnitAmount_Base; Decimal) - { - ExternalName = 'msdyn_estimateunitamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate unit amount in the base currency.'; - Caption = 'Estimate Unit Amount (Base)'; - DataClassification = SystemMetadata; - } - field(70; EstimateUnitCost; Decimal) - { - ExternalName = 'msdyn_estimateunitcost'; - ExternalType = 'Money'; - Description = 'Shows the estimated cost amount per unit.'; - Caption = 'Estimate Unit Cost'; - DataClassification = SystemMetadata; - } - field(71; EstimateUnitCost_Base; Decimal) - { - ExternalName = 'msdyn_estimateunitcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the estimate unit cost in the base currency.'; - Caption = 'Estimate Unit Cost (Base)'; - DataClassification = SystemMetadata; - } - field(72; InternalDescription; BLOB) - { - ExternalName = 'msdyn_internaldescription'; - ExternalType = 'Memo'; - Description = 'Enter any internal notes you want to track on this service.'; - Caption = 'Internal Description'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(73; InternalFlags; BLOB) - { - ExternalName = 'msdyn_internalflags'; - ExternalType = 'Memo'; - Description = ''; - Caption = 'Internal Flags'; - Subtype = Memo; - DataClassification = SystemMetadata; - } - field(74; LineOrder; Integer) - { - ExternalName = 'msdyn_lineorder'; - ExternalType = 'Integer'; - Caption = 'Line Order'; - DataClassification = SystemMetadata; - } - field(75; LineStatus; Option) - { - ExternalName = 'msdyn_linestatus'; - ExternalType = 'Picklist'; - Description = 'Enter the current status of the line, estimate or used.'; - Caption = 'Line Status'; - InitValue = Estimated; - OptionMembers = Estimated,Used; - OptionOrdinalValues = 690970000, 690970001; - DataClassification = SystemMetadata; - } - field(77; MinimumChargeAmount; Decimal) - { - ExternalName = 'msdyn_minimumchargeamount'; - ExternalType = 'Money'; - Description = 'Enter the amount charged as a minimum charge.'; - Caption = 'Minimum Charge Amount'; - DataClassification = SystemMetadata; - } - field(78; MinimumChargeAmount_Base; Decimal) - { - ExternalName = 'msdyn_minimumchargeamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the minimum charge amount in the base currency.'; - Caption = 'Minimum Charge Amount (Base)'; - DataClassification = SystemMetadata; - } - field(79; MinimumChargeDuration; Integer) - { - ExternalName = 'msdyn_minimumchargeduration'; - ExternalType = 'Integer'; - Description = 'Enter the duration of up to how long the minimum charge applies.'; - Caption = 'Minimum Charge Duration'; - DataClassification = SystemMetadata; - } - field(80; PriceList; GUID) - { - ExternalName = 'msdyn_pricelist'; - ExternalType = 'Lookup'; - Description = 'Price List that determines the pricing for this service'; - Caption = 'Price List'; - TableRelation = "CRM Pricelevel".PriceLevelId; - DataClassification = SystemMetadata; - } - field(81; Service; GUID) - { - ExternalName = 'msdyn_service'; - ExternalType = 'Lookup'; - Description = 'Service proposed or used for this work order'; - Caption = 'Service'; - TableRelation = "CRM Product".ProductId; - DataClassification = SystemMetadata; - } - field(82; Subtotal; Decimal) - { - ExternalName = 'msdyn_subtotal'; - ExternalType = 'Money'; - Description = 'Enter the total amount excluding discounts.'; - Caption = 'Subtotal'; - DataClassification = SystemMetadata; - } - field(83; Subtotal_Base; Decimal) - { - ExternalName = 'msdyn_subtotal_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the subtotal in the base currency.'; - Caption = 'Subtotal (Base)'; - DataClassification = SystemMetadata; - } - field(84; Taxable; Boolean) - { - ExternalName = 'msdyn_taxable'; - ExternalType = 'Boolean'; - Description = 'Specify if service is taxable. If you do not wish to charge tax set this field to No.'; - Caption = 'Taxable'; - DataClassification = SystemMetadata; - } - field(86; TotalAmount; Decimal) - { - ExternalName = 'msdyn_totalamount'; - ExternalType = 'Money'; - Caption = 'Total Amount'; - DataClassification = SystemMetadata; - } - field(87; TotalAmount_Base; Decimal) - { - ExternalName = 'msdyn_totalamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the total amount in the base currency.'; - Caption = 'Total Amount (Base)'; - DataClassification = SystemMetadata; - } - field(88; TotalCost; Decimal) - { - ExternalName = 'msdyn_totalcost'; - ExternalType = 'Money'; - Description = 'Shows the total cost of this service. This is calculated by (Unit Cost * Units) + Additional Cost + Commission Costs.'; - Caption = 'Total Cost'; - DataClassification = SystemMetadata; - } - field(89; TotalCost_Base; Decimal) - { - ExternalName = 'msdyn_totalcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the total cost in the base currency.'; - Caption = 'Total Cost (Base)'; - DataClassification = SystemMetadata; - } - field(90; Unit; GUID) - { - ExternalName = 'msdyn_unit'; - ExternalType = 'Lookup'; - Description = 'The unit that determines the final quantity for this service'; - Caption = 'Unit'; - TableRelation = "CRM Uom".UoMId; - DataClassification = SystemMetadata; - } - field(91; UnitAmount; Decimal) - { - ExternalName = 'msdyn_unitamount'; - ExternalType = 'Money'; - Description = 'Enter the amount you want to charge the customer per unit. By default, this is calculated based on the selected price list. The amount can be changed.'; - Caption = 'Unit Amount'; - DataClassification = SystemMetadata; - } - field(92; UnitAmount_Base; Decimal) - { - ExternalName = 'msdyn_unitamount_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the unit amount in the base currency.'; - Caption = 'Unit Amount (Base)'; - DataClassification = SystemMetadata; - } - field(93; UnitCost; Decimal) - { - ExternalName = 'msdyn_unitcost'; - ExternalType = 'Money'; - Description = 'Shows the actual cost per unit.'; - Caption = 'Unit Cost'; - DataClassification = SystemMetadata; - } - field(94; UnitCost_Base; Decimal) - { - ExternalName = 'msdyn_unitcost_base'; - ExternalType = 'Money'; - ExternalAccess = Read; - Description = 'Shows the value of the unit cost in the base currency.'; - Caption = 'Unit Cost (Base)'; - DataClassification = SystemMetadata; - } - field(95; WorkOrder; GUID) - { - ExternalName = 'msdyn_workorder'; - ExternalType = 'Lookup'; - Description = 'The work order this service relates to'; - Caption = 'Work Order'; - TableRelation = "FS Work Order".WorkOrderId; - DataClassification = SystemMetadata; - } - field(96; WorkOrderIncident; GUID) - { - ExternalName = 'msdyn_workorderincident'; - ExternalType = 'Lookup'; - Description = 'The Incident related to this product'; - Caption = 'Work Order Incident'; - TableRelation = "FS Work Order Incident".WorkOrderIncidentId; - DataClassification = SystemMetadata; - } - field(97; BookingName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Bookable Resource Booking".Name where(BookableResourceBookingId = field(Booking))); - ExternalName = 'msdyn_bookingname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(100; CustomerAssetName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Customer Asset".Name where(CustomerAssetId = field(CustomerAsset))); - ExternalName = 'msdyn_customerassetname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(101; WorkOrderName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order".Name where(WorkOrderId = field(WorkOrder))); - ExternalName = 'msdyn_workordername'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(102; WorkOrderIncidentName; Text[100]) - { - FieldClass = FlowField; - CalcFormula = lookup("FS Work Order Incident".Name where(WorkOrderIncidentId = field(WorkOrderIncident))); - ExternalName = 'msdyn_workorderincidentname'; - ExternalType = 'String'; - ExternalAccess = Read; - } - field(106; CompanyId; GUID) - { - ExternalName = 'bcbi_company'; - ExternalType = 'Lookup'; - Description = 'Business Central Company'; - Caption = 'Company Id'; - TableRelation = "CDS Company".CompanyId; - DataClassification = SystemMetadata; - } - field(107; ProjectTask; GUID) - { - ExternalName = 'bcbi_projecttask'; - ExternalType = 'Lookup'; - Description = 'Business Central Project Task'; - Caption = 'External Project'; - TableRelation = "FS Project Task".ProjectTaskId; - DataClassification = SystemMetadata; - } - field(108; WorkOrderStatus; Option) - { - ExternalName = 'bcbi_workorderstatus'; - ExternalType = 'Picklist'; - Description = 'The system status of the work order'; - Caption = 'Work Order Status'; - InitValue = " "; - OptionMembers = " ",Unscheduled,Scheduled,InProgress,Completed,Posted,Canceled; - OptionOrdinalValues = -1, 690970000, 690970001, 690970002, 690970003, 690970004, 690970005; - DataClassification = SystemMetadata; - } - field(112; DurationConsumed; Integer) - { - ExternalName = 'bcbi_durationconsumed'; - ExternalType = 'Integer'; - Description = 'Duration consumed in Dynamics 365 Business Central'; - Caption = 'Duration Consumed'; - } - field(113; DurationInvoiced; Integer) - { - ExternalName = 'bcbi_durationinvoiced'; - ExternalType = 'Integer'; - Description = 'Duration invoiced in Dynamics 365 Business Central. When this value is different than 0, you can no longer edit the work order service.'; - Caption = 'Duration Invoiced'; - } - } - keys - { - key(PK; workorderserviceId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderSubstatus.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderSubstatus.Table.al deleted file mode 100644 index 62b6e4fd77..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderSubstatus.Table.al +++ /dev/null @@ -1,233 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6621 "FS Work Order Substatus" -{ - ExternalName = 'msdyn_workordersubstatus'; - TableType = CRM; - Description = 'Specify custom work order substatuses, which can be used to specify the current work order status more precisely.'; - DataClassification = SystemMetadata; - - fields - { - field(1; WorkOrderSubstatusId; GUID) - { - ExternalName = 'msdyn_workordersubstatusid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'Work Order Substatus'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Work Order Substatus'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Work Order Substatus'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[100]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Shows the work order status name.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(35; DefaultSubStatus; Boolean) - { - ExternalName = 'msdyn_defaultsubstatus'; - ExternalType = 'Boolean'; - Description = 'Specify whether this substatus should be the default substatus for this status type.'; - Caption = 'Default Substatus'; - DataClassification = SystemMetadata; - } - field(37; SystemStatus; Option) - { - ExternalName = 'msdyn_systemstatus'; - ExternalType = 'Picklist'; - Description = 'Specify the system status.'; - Caption = 'System Status'; - InitValue = " "; - OptionMembers = " ",Unscheduled,Scheduled,InProgress,Completed,Posted,Canceled; - OptionOrdinalValues = -1, 690970000, 690970001, 690970002, 690970003, 690970004, 690970005; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; WorkOrderSubstatusId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderType.Table.al b/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderType.Table.al deleted file mode 100644 index 5929311a8b..0000000000 --- a/Apps/W1/FieldServiceIntegration/app/src/Tables/FSWorkOrderType.Table.al +++ /dev/null @@ -1,239 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; - -using Microsoft.Integration.D365Sales; - -table 6622 "FS Work Order Type" -{ - ExternalName = 'msdyn_workordertype'; - TableType = CRM; - Description = 'Create different work order types to reflect the different types of work that your company offers. Work Order types are used to control various settings on a work order.'; - DataClassification = SystemMetadata; - - fields - { - field(1; WorkOrderTypeId; GUID) - { - ExternalName = 'msdyn_workordertypeid'; - ExternalType = 'Uniqueidentifier'; - ExternalAccess = Insert; - Description = 'Shows the entity instances.'; - Caption = 'Work Order Type'; - DataClassification = SystemMetadata; - } - field(2; CreatedOn; Datetime) - { - ExternalName = 'createdon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was created. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Created On'; - DataClassification = SystemMetadata; - } - field(3; CreatedBy; GUID) - { - ExternalName = 'createdby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who created the record.'; - Caption = 'Created By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(4; ModifiedOn; Datetime) - { - ExternalName = 'modifiedon'; - ExternalType = 'DateTime'; - ExternalAccess = Read; - Description = 'Shows the date and time when the record was last updated. The date and time are displayed in the time zone selected in Microsoft Dynamics 365 options.'; - Caption = 'Modified On'; - DataClassification = SystemMetadata; - } - field(5; ModifiedBy; GUID) - { - ExternalName = 'modifiedby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier of the user who modified the record.'; - Caption = 'Modified By'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(6; CreatedOnBehalfBy; GUID) - { - ExternalName = 'createdonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who created the record on behalf of another user.'; - Caption = 'Created By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(7; ModifiedOnBehalfBy; GUID) - { - ExternalName = 'modifiedonbehalfby'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Shows who last updated the record on behalf of another user.'; - Caption = 'Modified By (Delegate)'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(16; OwnerId; GUID) - { - ExternalName = 'ownerid'; - ExternalType = 'Owner'; - Description = 'Owner Id'; - Caption = 'Owner'; - DataClassification = SystemMetadata; - } - field(21; OwningBusinessUnit; GUID) - { - ExternalName = 'owningbusinessunit'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the business unit that owns the record'; - Caption = 'Owning Business Unit'; - TableRelation = "CRM Businessunit".BusinessUnitId; - DataClassification = SystemMetadata; - } - field(22; OwningUser; GUID) - { - ExternalName = 'owninguser'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the user that owns the record.'; - Caption = 'Owning User'; - TableRelation = "CRM Systemuser".SystemUserId; - DataClassification = SystemMetadata; - } - field(23; OwningTeam; GUID) - { - ExternalName = 'owningteam'; - ExternalType = 'Lookup'; - ExternalAccess = Read; - Description = 'Unique identifier for the team that owns the record.'; - Caption = 'Owning Team'; - TableRelation = "CRM Team".TeamId; - DataClassification = SystemMetadata; - } - field(25; StateCode; Option) - { - ExternalName = 'statecode'; - ExternalType = 'State'; - ExternalAccess = Modify; - Description = 'Status of the Work Order Type'; - Caption = 'Status'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 0, 1; - DataClassification = SystemMetadata; - } - field(27; StatusCode; Option) - { - ExternalName = 'statuscode'; - ExternalType = 'Status'; - Description = 'Reason for the status of the Work Order Type'; - Caption = 'Status Reason'; - InitValue = " "; - OptionMembers = " ",Active,Inactive; - OptionOrdinalValues = -1, 1, 2; - DataClassification = SystemMetadata; - } - field(29; VersionNumber; BigInteger) - { - ExternalName = 'versionnumber'; - ExternalType = 'BigInt'; - ExternalAccess = Read; - Description = 'Version Number'; - Caption = 'Version Number'; - DataClassification = SystemMetadata; - } - field(30; ImportSequenceNumber; Integer) - { - ExternalName = 'importsequencenumber'; - ExternalType = 'Integer'; - ExternalAccess = Insert; - Description = 'Shows the sequence number of the import that created this record.'; - Caption = 'Import Sequence Number'; - DataClassification = SystemMetadata; - } - field(31; OverriddenCreatedOn; Date) - { - ExternalName = 'overriddencreatedon'; - ExternalType = 'DateTime'; - ExternalAccess = Insert; - Description = 'Shows the date and time that the record was migrated.'; - Caption = 'Record Created On'; - DataClassification = SystemMetadata; - } - field(32; TimeZoneRuleVersionNumber; Integer) - { - ExternalName = 'timezoneruleversionnumber'; - ExternalType = 'Integer'; - Description = 'For internal use only.'; - Caption = 'Time Zone Rule Version Number'; - DataClassification = SystemMetadata; - } - field(33; UTCConversionTimeZoneCode; Integer) - { - ExternalName = 'utcconversiontimezonecode'; - ExternalType = 'Integer'; - Description = 'Shows the time zone code that was in use when the record was created.'; - Caption = 'UTC Conversion Time Zone Code'; - DataClassification = SystemMetadata; - } - field(34; Name; Text[100]) - { - ExternalName = 'msdyn_name'; - ExternalType = 'String'; - Description = 'Type the name of the work order type.'; - Caption = 'Name'; - DataClassification = SystemMetadata; - } - field(35; IncidentRequired; Boolean) - { - ExternalName = 'msdyn_incidentrequired'; - ExternalType = 'Boolean'; - Description = 'Select whether work orders of this type require an incident to be recorded on the work order.'; - Caption = 'Incident Required'; - DataClassification = SystemMetadata; - } - field(37; PriceList; GUID) - { - ExternalName = 'msdyn_pricelist'; - ExternalType = 'Lookup'; - Description = 'Default Price List to be used on Work Orders linked to this Work Order Type. Please review the help for further details on Price Lists'; - Caption = 'Price List'; - TableRelation = "CRM Pricelevel".PriceLevelId; - DataClassification = SystemMetadata; - } - field(38; Taxable; Boolean) - { - ExternalName = 'msdyn_taxable'; - ExternalType = 'Boolean'; - Description = 'Select whether work orders of this type are taxable.'; - Caption = 'Taxable'; - DataClassification = SystemMetadata; - } - } - keys - { - key(PK; workordertypeId) - { - Clustered = true; - } - key(Name; Name) - { - } - } - fieldgroups - { - fieldgroup(DropDown; Name) - { - } - } -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/test library/ExtensionLogo.png b/Apps/W1/FieldServiceIntegration/test library/ExtensionLogo.png deleted file mode 100644 index 4d2c9a626cb9617350617c40cd73904129d4c108..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5446 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 diff --git a/Apps/W1/FieldServiceIntegration/test library/app.json b/Apps/W1/FieldServiceIntegration/test library/app.json deleted file mode 100644 index 8cb20a4d39..0000000000 --- a/Apps/W1/FieldServiceIntegration/test library/app.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": "41b3ab6e-3f20-47c7-a67f-feccc4d58a55", - "name": "Field Service Integration Test Library", - "publisher": "Microsoft", - "brief": "Test library for the Field Service Integration extension.", - "description": "Test library for the Field Service Integration extension.", - "version": "25.0.0.0", - "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724009", - "EULA": "https://go.microsoft.com/fwlink/?linkid=2182906", - "help": "https://go.microsoft.com/fwlink/?linkid=2206519", - "contextSensitiveHelpUrl": "https://learn.microsoft.com/dynamics365/business-central/", - "url": "https://go.microsoft.com/fwlink/?LinkId=724011", - "logo": "ExtensionLogo.png", - "dependencies": [ - { - "id": "1ba1031e-eae9-4f20-b9d2-d19b6d1e3f29", - "name": "Field Service Integration", - "publisher": "Microsoft", - "version": "25.0.0.0" - } - ], - "screenshots": [ - - ], - "platform": "25.0.0.0", - "target": "OnPrem", - "resourceExposurePolicy": { - "allowDebugging": false, - "allowDownloadingSource": true, - "includeSourceInSymbolFile": true - }, - "application": "25.0.0.0", - "idRanges": [ - { - "from": 139205, - "to": 139205 - } - ], - "features": [ - "NoImplicitWith", - "TranslationFile" - ] -} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/test library/src/FSIntegrationTestLibrary.Codeunit.al b/Apps/W1/FieldServiceIntegration/test library/src/FSIntegrationTestLibrary.Codeunit.al deleted file mode 100644 index dcc5054f25..0000000000 --- a/Apps/W1/FieldServiceIntegration/test library/src/FSIntegrationTestLibrary.Codeunit.al +++ /dev/null @@ -1,30 +0,0 @@ -// ------------------------------------------------------------------------------------------------ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// ------------------------------------------------------------------------------------------------ -namespace Microsoft.TestLibraries.DynamicsFieldService; - -using Microsoft.Integration.DynamicsFieldService; - -codeunit 139205 "FS Integration Test Library" -{ - procedure RegisterConnection(var FSConnectionSetup: Record "FS Connection Setup") - begin - FSConnectionSetup.RegisterConnection(); - end; - - procedure UnregisterConnection(var FSConnectionSetup: Record "FS Connection Setup") - begin - FSConnectionSetup.UnregisterConnection(); - end; - - procedure SetPassword(var FSConnectionSetup: Record "FS Connection Setup"; Password: SecretText) - begin - FSConnectionSetup.SetPassword(Password); - end; - - procedure PerformTestConnection(var FSConnectionSetup: Record "FS Connection Setup") - begin - FSConnectionSetup.PerformTestConnection(); - end; -} \ No newline at end of file diff --git a/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/codeunit/TaxPostingBufferMgmt.Codeunit.al b/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/codeunit/TaxPostingBufferMgmt.Codeunit.al index cb79447f8d..74b491eb06 100644 --- a/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/codeunit/TaxPostingBufferMgmt.Codeunit.al +++ b/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/codeunit/TaxPostingBufferMgmt.Codeunit.al @@ -231,6 +231,7 @@ codeunit 20343 "Tax Posting Buffer Mgmt." TempGroupTaxPostingBuffer.SetRange("Gen. Prod. Posting Group", TempTaxPostingBuffer."Gen. Prod. Posting Group"); TempGroupTaxPostingBuffer.SetRange("Component ID", TempTaxPostingBuffer."Component ID"); TempGroupTaxPostingBuffer.SetRange("Dimension Set ID", TempTaxPostingBuffer."Dimension Set ID"); + OnFindTempGroupTaxPostingBuffer(TempGroupTaxPostingBuffer, TempTaxPostingBuffer, Quantity, InvoiceQty); if not TempGroupTaxPostingBuffer.FindFirst() then begin TempGroupTaxPostingBuffer := TempTaxPostingBuffer; TempGroupTaxPostingBuffer."Group ID" := CreateGuid(); @@ -254,10 +255,16 @@ codeunit 20343 "Tax Posting Buffer Mgmt." end; procedure GetGroupTaxJournal(TaxID: Guid; var TempGroupTaxPostingBuffer2: Record "Transaction Posting Buffer") + var + IsHandled: Boolean; begin TempGroupTaxPostingBuffer2.Reset(); TempGroupTaxPostingBuffer2.DeleteAll(); + OnBeforeInitTempGroupTaxPostingBuffer2(TempGroupTaxPostingBuffer2, TempGroupTaxPostingBuffer, TaxID, IsHandled); + if IsHandled then + exit; + TempGroupTaxPostingBuffer.Reset(); TempGroupTaxPostingBuffer.SetRange("Tax Id", TaxID); TempGroupTaxPostingBuffer.SetRange("Skip Posting", false); @@ -442,6 +449,16 @@ codeunit 20343 "Tax Posting Buffer Mgmt." begin end; + [IntegrationEvent(true, false)] + local procedure OnFindTempGroupTaxPostingBuffer(var TempGroupTaxPostingBuffer: Record "Transaction Posting Buffer" temporary; TempTaxPostingBuffer: Record "Transaction Posting Buffer" temporary; Quantity: Decimal; InvoiceQty: Decimal) + begin + end; + + [IntegrationEvent(true, false)] + local procedure OnBeforeInitTempGroupTaxPostingBuffer2(var TempGroupTaxPostingBuffer2: Record "Transaction Posting Buffer" temporary; var TempGroupTaxPostingBuffer: Record "Transaction Posting Buffer" temporary; TaxID: Guid; var IsHandled: Boolean) + begin + end; + var TempTaxPostingBuffer: Record "Transaction Posting Buffer" temporary; TempGroupTaxPostingBuffer: Record "Transaction Posting Buffer" temporary; diff --git a/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/table/TransactionPostingBuffer.Table.al b/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/table/TransactionPostingBuffer.Table.al index 520b7fd85e..8b2c71ae2a 100644 --- a/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/table/TransactionPostingBuffer.Table.al +++ b/Apps/W1/INTaxEngine/app/TaxEngine-PostingHandler/src/PostingManagement/table/TransactionPostingBuffer.Table.al @@ -13,7 +13,6 @@ table 20336 "Transaction Posting Buffer" Caption = 'Transaction Posting Buffer'; DataClassification = EndUserIdentifiableInformation; TableType = Temporary; - Access = Internal; Extensible = false; fields { diff --git a/Apps/W1/Intrastat/app/src/IntrastatReportManagement.Codeunit.al b/Apps/W1/Intrastat/app/src/IntrastatReportManagement.Codeunit.al index e37fb6774f..dccb13b89c 100644 --- a/Apps/W1/Intrastat/app/src/IntrastatReportManagement.Codeunit.al +++ b/Apps/W1/Intrastat/app/src/IntrastatReportManagement.Codeunit.al @@ -107,9 +107,15 @@ codeunit 4810 IntrastatReportManagement var IntrastatReportSetup: Record "Intrastat Report Setup"; Job: Record Job; + IsHandled: Boolean; begin IntrastatReportSetup.Get(); + IsHandled := false; + OnBeforeGetIntrastatBaseCountryCodeFromJLE(JobLedgerEntry, IntrastatReportSetup, CountryCode, IsHandled); + if IsHandled then + exit(CountryCode); + CountryCode := JobLedgerEntry."Country/Region Code"; if Job.Get(JobLedgerEntry."Job No.") then @@ -130,9 +136,15 @@ codeunit 4810 IntrastatReportManagement PurchCrMemoHdr: Record "Purch. Cr. Memo Hdr."; SalesInvHeader: Record "Sales Invoice Header"; SalesCrMemoHeader: Record "Sales Cr.Memo Header"; + IsHandled: Boolean; begin IntrastatReportSetup.Get(); + IsHandled := false; + OnBeforeGetIntrastatBaseCountryCodeFromFALE(FALedgerEntry, IntrastatReportSetup, CountryCode, IsHandled); + if IsHandled then + exit(CountryCode); + CountryCode := ''; if FALedgerEntry."FA Posting Type" = FALedgerEntry."FA Posting Type"::"Acquisition Cost" then @@ -383,6 +395,7 @@ codeunit 4810 IntrastatReportManagement CompanyInformation.Get(); if not IntrastatReportSetup.Get() then exit(CompanyInformation."VAT Registration No."); + OnGetCompanyVATRegNoOnAfterGetIntrastatReportSetup(CompanyInformation, IntrastatReportSetup); exit( GetVATRegNo( CompanyInformation."Country/Region Code", CompanyInformation."VAT Registration No.", @@ -539,6 +552,7 @@ codeunit 4810 IntrastatReportManagement end; IntrastatReportSetup.Get(); + OnExportWithDataExchOnAfterGetIntrastatReportSetup(IntrastatReportSetup, IntrastatReportHeader); if IntrastatReportSetup."Split Files" then begin IntrastatReportSetup.TestField("Data Exch. Def. Code - Receipt"); IntrastatReportSetup.TestField("Data Exch. Def. Code - Shpt."); @@ -1119,4 +1133,24 @@ codeunit 4810 IntrastatReportManagement local procedure OnBeforeGetIntrastatBaseCountryCode(var ItemLedgerEntry: Record "Item Ledger Entry"; var IntrastatReportSetup: Record "Intrastat Report Setup"; var CountryCode: Code[10]; var IsHandled: Boolean) begin end; + + [IntegrationEvent(false, false)] + local procedure OnBeforeGetIntrastatBaseCountryCodeFromJLE(var JobLedgerEntry: Record "Job Ledger Entry"; var IntrastatReportSetup: Record "Intrastat Report Setup"; var CountryCode: Code[10]; var IsHandled: Boolean) + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnBeforeGetIntrastatBaseCountryCodeFromFALE(var FALedgerEntry: Record "FA Ledger Entry"; var IntrastatReportSetup: Record "Intrastat Report Setup"; var CountryCode: Code[10]; var IsHandled: Boolean) + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnGetCompanyVATRegNoOnAfterGetIntrastatReportSetup(var CompanyInformation: Record "Company Information"; var IntrastatReportSetup: Record "Intrastat Report Setup") + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnExportWithDataExchOnAfterGetIntrastatReportSetup(var IntrastatReportSetup: Record "Intrastat Report Setup"; var IntrastatReportHeader: Record "Intrastat Report Header") + begin + end; } \ No newline at end of file diff --git a/Apps/W1/MasterDataManagement/app/src/pages/MasterDataSynchTables.Page.al b/Apps/W1/MasterDataManagement/app/src/pages/MasterDataSynchTables.Page.al index 0357b0ceca..e59083811e 100644 --- a/Apps/W1/MasterDataManagement/app/src/pages/MasterDataSynchTables.Page.al +++ b/Apps/W1/MasterDataManagement/app/src/pages/MasterDataSynchTables.Page.al @@ -323,7 +323,7 @@ page 7233 "Master Data Synch. Tables" { ApplicationArea = Suite; Caption = 'Synchronize Modified Records'; - Enabled = HasRecords and (Rec."Parent Name" = ''); + Enabled = HasRecords and (Rec."Parent Name" = '') and DataSynchEnabled; Image = Refresh; ToolTip = 'Synchronize records that have been modified since the last time they were synchronized.'; @@ -352,7 +352,7 @@ page 7233 "Master Data Synch. Tables" { ApplicationArea = Suite; Caption = 'Run Full Synchronization'; - Enabled = HasRecords and (Rec."Parent Name" = ''); + Enabled = HasRecords and (Rec."Parent Name" = '') and DataSynchEnabled; Image = RefreshLines; ToolTip = 'Start a job for full synchronization from records in the chosen source company for each of the selected tables.'; @@ -377,8 +377,7 @@ page 7233 "Master Data Synch. Tables" { ApplicationArea = Suite; Caption = 'Integration Uncouple Job Log'; - Enabled = HasRecords; - Visible = DataSynchEnabled; + Enabled = HasRecords and DataSynchEnabled; Image = Log; ToolTip = 'View the status of jobs for uncoupling records.'; @@ -394,8 +393,7 @@ page 7233 "Master Data Synch. Tables" { ApplicationArea = Suite; Caption = 'Integration Coupling Job Log'; - Enabled = HasRecords; - Visible = DataSynchEnabled; + Enabled = HasRecords and DataSynchEnabled; Image = Log; ToolTip = 'View the status of jobs for match-based coupling of records.'; @@ -411,8 +409,7 @@ page 7233 "Master Data Synch. Tables" { ApplicationArea = Suite; Caption = 'Delete Couplings'; - Enabled = HasRecords and (Rec."Parent Name" = ''); - Visible = DataSynchEnabled; + Enabled = HasRecords and (Rec."Parent Name" = '') and DataSynchEnabled; Image = UnLinkAccount; ToolTip = 'Delete couplings for the selected tables.'; @@ -464,8 +461,7 @@ page 7233 "Master Data Synch. Tables" { ApplicationArea = Suite; Caption = 'Match-Based Coupling'; - Enabled = HasRecords and (Rec."Parent Name" = ''); - Visible = DataSynchEnabled; + Enabled = HasRecords and (Rec."Parent Name" = '') and DataSynchEnabled; Image = LinkAccount; ToolTip = 'Couple existing records in the selected tables based on matching criteria.'; @@ -508,6 +504,9 @@ page 7233 "Master Data Synch. Tables" actionref(SynchronizeNow_Promoted; SynchronizeNow) { } + actionref(MatchBasedCoupling_Promoted; MatchBasedCoupling) + { + } actionref(JobQueueEntry_Promoted; JobQueueEntry) { } diff --git a/Apps/W1/MicrosoftUniversalPrint/app/src/UniversalPrintGraphHelper.Codeunit.al b/Apps/W1/MicrosoftUniversalPrint/app/src/UniversalPrintGraphHelper.Codeunit.al index 4d4875a310..8c785298f0 100644 --- a/Apps/W1/MicrosoftUniversalPrint/app/src/UniversalPrintGraphHelper.Codeunit.al +++ b/Apps/W1/MicrosoftUniversalPrint/app/src/UniversalPrintGraphHelper.Codeunit.al @@ -102,7 +102,6 @@ codeunit 2752 "Universal Print Graph Helper" ResponseContent: Text; begin BodyConfigJsonObject.Add('outputBin', UniversalPrinterSettings."Paper Tray"); - BodyConfigJsonObject.Add('mediaSize', this.ConvertPaperSizeToUniversalPrintMediaSize(UniversalPrinterSettings."Paper Size")); if UniversalPrinterSettings.Landscape then BodyConfigJsonObject.Add('orientation', this.GetOrientationName(Enum::"Universal Printer Orientation"::landscape)); @@ -278,40 +277,6 @@ codeunit 2752 "Universal Print Graph Helper" RequestId := ResponseHeaders.Get('Request-Id'); end; - local procedure ConvertPaperSizeToUniversalPrintMediaSize(PaperSize: Enum "Printer Paper Kind"): Text - var - UniversalPrintMediaSize: Text; - begin - // For universal print supported media sizes, refer https://learn.microsoft.com/en-us/graph/api/resources/printercapabilities?view=graph-rest-1.0#mediasizes-values - case PaperSize of - PaperSize::A3: - UniversalPrintMediaSize := A3SizeTxt; - PaperSize::A4: - UniversalPrintMediaSize := A4SizeTxt; - PaperSize::A5: - UniversalPrintMediaSize := A5SizeTxt; - PaperSize::A6: - UniversalPrintMediaSize := A6SizeTxt; - PaperSize::JapanesePostcard: - UniversalPrintMediaSize := JPNHagakiSizeTxt; - PaperSize::Executive: - UniversalPrintMediaSize := NorthAmericaExecutiveSizeTxt; - PaperSize::Ledger: - UniversalPrintMediaSize := NorthAmericaLedgerSizeTxt; - PaperSize::Legal: - UniversalPrintMediaSize := NorthAmericaLegalSizeTxt; - PaperSize::Letter: - UniversalPrintMediaSize := NorthAmericaLetterSizeTxt; - PaperSize::Statement: - UniversalPrintMediaSize := NorthAmericaInvoiceSizeTxt - else - // Use the name value of the enum - UniversalPrintMediaSize := Format(PaperSize); - end; - - exit(UniversalPrintMediaSize); - end; - internal procedure GetPaperSizeFromUniversalPrintMediaSize(textValue: Text): Enum "Printer Paper Kind" var PrinterPaperKind: Enum "Printer Paper Kind"; @@ -465,10 +430,6 @@ codeunit 2752 "Universal Print Graph Helper" InvokeWebRequestFailedTelemetryTxt: Label 'Invoking web request has failed. Status %1, Message %2, RequestId %3', Locked = true; NotFoundTelemetryTxt: Label 'Not Found.', Locked = true; UniversalPrintPortalUrlTxt: Label 'https://go.microsoft.com/fwlink/?linkid=2153618', Locked = true; - A3SizeTxt: Label 'A3', Locked = true; - A4SizeTxt: Label 'A4', Locked = true; - A5SizeTxt: Label 'A5', Locked = true; - A6SizeTxt: Label 'A6', Locked = true; JPNHagakiSizeTxt: Label 'JPN Hagaki', Locked = true; NorthAmericaExecutiveSizeTxt: Label 'North America Executive', Locked = true; NorthAmericaInvoiceSizeTxt: Label 'North America Invoice', Locked = true; diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMapping.Table.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMapping.Table.al new file mode 100644 index 0000000000..72c350d6f5 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMapping.Table.al @@ -0,0 +1,84 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +table 7277 "Attachment Mapping" +{ + InherentEntitlements = X; + InherentPermissions = X; + TableType = Temporary; + Access = Internal; + + fields + { + field(1; "Entry No."; Integer) + { + Caption = 'Entry No.'; + DataClassification = SystemMetadata; + } + field(2; "Column Name"; Text[2048]) + { + Caption = 'Column Name'; + DataClassification = SystemMetadata; + } + field(3; "Column Type"; Enum "Column Type") + { + Caption = 'Column Type'; + DataClassification = SystemMetadata; + } + field(4; "Column Action"; Enum "Column Action") + { + Caption = 'Column Action'; + DataClassification = SystemMetadata; + + trigger OnValidate() + var + TempAttachmentMapping: Record "Attachment Mapping" temporary; + begin + if Rec."Column Action" = xRec."Column Action" then + exit; + + if Rec."Column Action" = Rec."Column Action"::"Quantity Info." then begin + if Rec."Column Type" <> Rec."Column Type"::Number then + if not Confirm(MismatchColumnTypeQst, false, Rec.FieldCaption("Column Type")) then + Error(''); // Cancel the action + TempAttachmentMapping.Copy(Rec, true); + TempAttachmentMapping.SetFilter("Entry No.", '<> %1', Rec."Entry No."); + TempAttachmentMapping.SetRange("Column Action", TempAttachmentMapping."Column Action"::"Quantity Info."); + TempAttachmentMapping.ModifyAll("Column Action", Rec."Column Action"::Ignore); + end; + + if Rec."Column Action" = Rec."Column Action"::"UoM Info." then begin + TempAttachmentMapping.Copy(Rec, true); + TempAttachmentMapping.SetFilter("Entry No.", '<> %1', Rec."Entry No."); + TempAttachmentMapping.SetRange("Column Action", TempAttachmentMapping."Column Action"::"UoM Info."); + TempAttachmentMapping.ModifyAll("Column Action", Rec."Column Action"::Ignore); + end + end; + } + } + + keys + { + key(PK; "Entry No.") + { + Clustered = true; + } + } + + internal procedure IncrementEntryNumber() + var + TempAttachmentMappingPart: Record "Attachment Mapping" temporary; + begin + TempAttachmentMappingPart.Copy(Rec, true); + if TempAttachmentMappingPart.FindLast() then + Rec."Entry No." := TempAttachmentMappingPart."Entry No." + 1 + else + Rec."Entry No." := 1; + end; + + var + MismatchColumnTypeQst: Label 'The %1 is not of type numeric. Do you want to continue?', Comment = '%1 = column type field caption'; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMappingPart.Page.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMappingPart.Page.al new file mode 100644 index 0000000000..896f67f871 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/AttachmentMappingPart.Page.al @@ -0,0 +1,257 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +page 7289 "Attachment Mapping Part" +{ + Caption = 'Attachment Mapping'; + PageType = ListPart; + ApplicationArea = All; + ModifyAllowed = true; + InsertAllowed = false; + DeleteAllowed = false; + InherentPermissions = X; + InherentEntitlements = X; + SourceTable = "Attachment Mapping"; + SourceTableTemporary = true; + Extensible = false; + + layout + { + area(Content) + { + field(ColumnSeparator; GlobalColumnSeparator) + { + Caption = 'Column Separator'; + ToolTip = 'Specifies the character that separates each column in the attached file.'; + Importance = Additional; + Visible = false; + } + field(DecimalSeparator; GlobalDecimalSeparator) + { + Caption = 'Decimal Separator'; + ToolTip = 'Specifies the character that separates integer and fractional part of number.'; + Importance = Additional; + Visible = false; + } + repeater(PreviewRepeater) + { + field("Entry No"; Rec."Entry No.") + { + ApplicationArea = Suite; + Editable = false; + ShowCaption = false; + Visible = false; + ToolTip = 'Specifies the line number from the attached file.'; + } + field(PreviewColumnName; Rec."Column Name") + { + ApplicationArea = Suite; + Editable = false; + Style = Strong; + Caption = 'Column Name'; + ToolTip = 'Specifies the column name from the attached file.'; + } + field(ColumnAction; Rec."Column Action") + { + ApplicationArea = Suite; + Caption = 'Column action'; + ToolTip = 'Specifies the sample row data for each column from the attached file.'; + Style = Strong; + StyleExpr = Rec."Column Action" <> Rec."Column Action"::Ignore; + } + field(SampleValue; SampleValue) + { + ApplicationArea = Suite; + Caption = 'Sample Value'; + ToolTip = 'Specifies whether the column contains the quantity.'; + Editable = false; + } + field(ColumnValues; ColumnValuesCaptionTok) + { + ApplicationArea = Suite; + Caption = 'Column values'; + ToolTip = 'Specifies whether the column contains product information.'; + + trigger OnDrillDown() + var + TempItemInfoFromFile: Page "Item Info. From File"; + SelectedColumns: List of [Integer]; + begin + Clear(SelectedColumns); + SelectedColumns.AddRange(GlobalProductInformationColumns); + SelectedColumns.Add(GlobalQuantityColumn); + SelectedColumns.Add(GlobalUoMColumn); + TempItemInfoFromFile.LoadData(GlobalFileContentAsTable, GlobalFileParserResult, SelectedColumns, Rec."Entry No."); + TempItemInfoFromFile.RunModal(); + end; + } + field(ColumnType; Rec."Column Type") + { + ApplicationArea = Suite; + Caption = 'Column Type'; + ToolTip = 'Specifies the data type of the column from the attached file.'; + } + } + } + } + + trigger OnAfterGetRecord() + begin + LoadSampleRowDataForPreview(); + end; + + local procedure BuildRecordForPreview(var FileDataAsTable: List of [List of [Text]]; var ProductInformationColumns: List of [Integer]; QuantityColumn: Integer; UoMColumn: Integer) + var + ColumnHeader: Text; + ColumnHeaderRow: List of [Text]; + begin + Rec.Reset(); + Rec.DeleteAll(); + + if FileDataAsTable.Count() > 0 then begin + if GlobalFileParserResult.GetContainsHeaderRow() then + ColumnHeaderRow := FileDataAsTable.Get(1) + else + ColumnHeaderRow := GlobalFileParserResult.GetColumnNames(); + foreach ColumnHeader in ColumnHeaderRow do begin // Considering the first line is header. Change the logic to make it more generic to handle lines without header. + Rec.Init(); + Rec.IncrementEntryNumber(); + Rec."Column Name" := CopyStr(ColumnHeader, 1, MaxStrLen(Rec."Column Name")); + // Set the boolean values by reading the mapping + if ProductInformationColumns.Contains(Rec."Entry No.") then + Rec."Column Action" := Rec."Column Action"::"Product Info."; + + if QuantityColumn = Rec."Entry No." then + Rec."Column Action" := Rec."Column Action"::"Quantity Info."; + + if UoMColumn = Rec."Entry No." then + Rec."Column Action" := Rec."Column Action"::"UoM Info."; + + Rec."Column Type" := GlobalColumnType.Get(Rec."Entry No."); + + Rec.Insert(); + end; + end; + end; + + internal procedure LoadCSVAndGetProductInfo(var FileContentAsTable: List of [List of [Text]]; var FileParserResult: Codeunit "File Handler Result") + begin + GlobalFileParserResult := FileParserResult; + GlobalProductInformationColumns := GlobalFileParserResult.GetProductColumnIndex(); + GlobalQuantityColumn := GlobalFileParserResult.GetQuantityColumnIndex(); + GlobalUoMColumn := GlobalFileParserResult.GetUoMColumnIndex(); + GlobalColumnType := GetColumnTypesFromText(GlobalFileParserResult.GetColumnTypes()); + + GlobalFileContentAsTable := FileContentAsTable; + BuildRecordForPreview(GlobalFileContentAsTable, GlobalProductInformationColumns, GlobalQuantityColumn, GlobalUoMColumn); + end; + + internal procedure ColumnMappingHasChanged(var NewProductInformationColumns: List of [Integer]; var NewQuantityColumn: Integer; var NewUoMColumn: Integer): Boolean + var + ColumnIndex: Integer; + begin + GetMappingSetup(NewProductInformationColumns, NewQuantityColumn, NewUoMColumn); + + if GlobalProductInformationColumns.Count() <> NewProductInformationColumns.Count() then begin + SaveColumnMapping(NewProductInformationColumns, NewQuantityColumn, NewUoMColumn); + exit(true); + end; + + foreach ColumnIndex in GlobalProductInformationColumns do + if not NewProductInformationColumns.Contains(ColumnIndex) then begin + SaveColumnMapping(NewProductInformationColumns, NewQuantityColumn, NewUoMColumn); + exit(true); + end; + + if GlobalQuantityColumn <> NewQuantityColumn then begin + SaveColumnMapping(NewProductInformationColumns, NewQuantityColumn, NewUoMColumn); + exit(true); + end; + + if GlobalUoMColumn <> NewUoMColumn then begin + SaveColumnMapping(NewProductInformationColumns, NewQuantityColumn, NewUoMColumn); + exit(true); + end; + end; + + local procedure SaveColumnMapping(NewProductInformationColumns: List of [Integer]; NewQuantityColumn: Integer; NewUoMColumn: Integer) + begin + GlobalProductInformationColumns := NewProductInformationColumns; + GlobalQuantityColumn := NewQuantityColumn; + GlobalUoMColumn := NewUoMColumn; + end; + + internal procedure GetMappingSetup(var ProductInformationColumns: List of [Integer]; var QuantityColumn: Integer; var UoMColumn: Integer) + var + TempAttachmentMapping: Record "Attachment Mapping" temporary; + begin + TempAttachmentMapping.Copy(Rec, true); + TempAttachmentMapping.SetRange("Column Action", TempAttachmentMapping."Column Action"::"Product Info."); + + if TempAttachmentMapping.FindSet() then + repeat + ProductInformationColumns.Add(TempAttachmentMapping."Entry No."); + until TempAttachmentMapping.Next() = 0; + + TempAttachmentMapping.Reset(); + TempAttachmentMapping.SetRange("Column Action", TempAttachmentMapping."Column Action"::"Quantity Info."); + if TempAttachmentMapping.FindFirst() then + QuantityColumn := TempAttachmentMapping."Entry No."; + + TempAttachmentMapping.Reset(); + TempAttachmentMapping.SetRange("Column Action", TempAttachmentMapping."Column Action"::"UoM Info."); + if TempAttachmentMapping.FindFirst() then + UoMColumn := TempAttachmentMapping."Entry No."; + end; + + local procedure LoadSampleRowDataForPreview() + begin + if Rec."Entry No." > 0 then begin + GlobalPreviewSampleDataTxt := ''; + + if GlobalFileParserResult.GetContainsHeaderRow() then + SampleValue := CopyStr(GlobalFileContentAsTable.Get(2).Get(Rec."Entry No."), 1, MaxStrLen(SampleValue)) + else + SampleValue := CopyStr(GlobalFileContentAsTable.Get(1).Get(Rec."Entry No."), 1, MaxStrLen(SampleValue)); + end + end; + + local procedure GetColumnTypesFromText(ColumnTypesAsText: List of [Text]) ColumnTypes: List of [Enum "Column Type"] + var + ColumnTypeTxt: Text; + begin + Clear(ColumnTypes); + + foreach ColumnTypeTxt in ColumnTypesAsText do + case ColumnTypeTxt.ToLower() of + 'text', 'string': + ColumnTypes.Add(Enum::"Column Type"::Text); + 'number', 'numeric', 'num', 'integer', 'int', 'float', 'double', 'decimal': + ColumnTypes.Add(Enum::"Column Type"::Number); + 'date': + ColumnTypes.Add(Enum::"Column Type"::Date); + 'boolean', 'bool': + ColumnTypes.Add(Enum::"Column Type"::Boolean); + else + ColumnTypes.Add(Enum::"Column Type"::Unknown); + end; + exit(ColumnTypes) + + end; + + var + GlobalFileParserResult: Codeunit "File Handler Result"; + GlobalFileContentAsTable: List of [List of [Text]]; + GlobalColumnSeparator: Text; + GlobalDecimalSeparator: Text; + GlobalPreviewSampleDataTxt: Text; + GlobalProductInformationColumns: List of [Integer]; + GlobalQuantityColumn: Integer; + GlobalUoMColumn: Integer; + GlobalColumnType: List of [Enum "Column Type"]; + SampleValue: Text[100]; + ColumnValuesCaptionTok: Label 'See all'; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnAction.Enum.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnAction.Enum.al new file mode 100644 index 0000000000..d7f541b462 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnAction.Enum.al @@ -0,0 +1,31 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +enum 7278 "Column Action" +{ + Extensible = false; + Access = Internal; + + value(0; Ignore) + { + Caption = 'Ignore'; + } + + value(10; "Product Info.") + { + Caption = 'Use (Product)'; + } + + value(20; "Quantity Info.") + { + Caption = 'Use (Quantity)'; + } + + value(30; "UoM Info.") + { + Caption = 'Use (Unit of Measure)'; + } +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnType.Enum.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnType.Enum.al new file mode 100644 index 0000000000..0178d11f76 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ColumnType.Enum.al @@ -0,0 +1,36 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +enum 7280 "Column Type" +{ + Extensible = false; + Access = Internal; + + value(0; Unknown) + { + Caption = 'Unknown'; + } + + value(10; Boolean) + { + Caption = 'Boolean'; + } + + value(20; Number) + { + Caption = 'Number'; + } + + value(30; Text) + { + Caption = 'Text'; + } + + value(40; Date) + { + Caption = 'Date'; + } +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ItemInfoFromFile.Page.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ItemInfoFromFile.Page.al new file mode 100644 index 0000000000..b339c91dde --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/ItemInfoFromFile.Page.al @@ -0,0 +1,346 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +using System.Utilities; + +page 7286 "Item Info. From File" +{ + Caption = 'Mapped & Selected column values in the file'; + PageType = List; + ApplicationArea = All; + ModifyAllowed = false; + InsertAllowed = false; + DeleteAllowed = false; + InherentPermissions = X; + InherentEntitlements = X; + SourceTable = Integer; + SourceTableTemporary = true; + SourceTableView = where(Number = filter(1 ..)); + Editable = false; + Extensible = false; + + layout + { + area(Content) + { + repeater(Rep) + { + field(Id; Rec.Number) + { + Caption = ' '; + ApplicationArea = All; + Visible = NoOfColumnsVisible > 10; + ToolTip = 'Specifies the line number.'; + } + field(Column0; GetCellValue(Rec.Number, LeftMostColumnIndex)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex); + ApplicationArea = All; + Visible = ColumnVisible1; + StyleExpr = StyleExpression1; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column1; GetCellValue(Rec.Number, LeftMostColumnIndex + 1)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 1); + ApplicationArea = All; + Visible = ColumnVisible2; + StyleExpr = StyleExpression2; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column2; GetCellValue(Rec.Number, LeftMostColumnIndex + 2)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 2); + ApplicationArea = All; + Visible = ColumnVisible3; + StyleExpr = StyleExpression3; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Colum3; GetCellValue(Rec.Number, LeftMostColumnIndex + 3)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 3); + ApplicationArea = All; + Visible = ColumnVisible4; + StyleExpr = StyleExpression4; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column4; GetCellValue(Rec.Number, LeftMostColumnIndex + 4)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 4); + ApplicationArea = All; + Visible = ColumnVisible5; + StyleExpr = StyleExpression5; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column5; GetCellValue(Rec.Number, LeftMostColumnIndex + 5)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 5); + ApplicationArea = All; + Visible = ColumnVisible6; + StyleExpr = StyleExpression6; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column6; GetCellValue(Rec.Number, LeftMostColumnIndex + 6)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 6); + ApplicationArea = All; + Visible = ColumnVisible7; + StyleExpr = StyleExpression7; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column7; GetCellValue(Rec.Number, LeftMostColumnIndex + 7)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 7); + ApplicationArea = All; + Visible = ColumnVisible8; + StyleExpr = StyleExpression8; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column8; GetCellValue(Rec.Number, LeftMostColumnIndex + 8)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 8); + ApplicationArea = All; + Visible = ColumnVisible9; + StyleExpr = StyleExpression9; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + field(Column9; GetCellValue(Rec.Number, LeftMostColumnIndex + 9)) + { + CaptionClass = '3,' + GetColumnHeading(LeftMostColumnIndex + 9); + ApplicationArea = All; + Visible = ColumnVisible10; + StyleExpr = StyleExpression10; +#pragma warning disable AA0219 + ToolTip = 'This is a generated column and does not have a tooltip.'; +#pragma warning restore AA0219 + } + } + } + } + actions + { + area(Processing) + { + action(Left) + { + Caption = 'Scroll Left'; + ApplicationArea = all; + Promoted = true; + PromotedCategory = Process; + PromotedOnly = true; + Image = PreviousRecord; + Visible = NoOfColumnsVisible > 10; + ToolTip = 'Scroll to the left to view more columns.'; + + trigger OnAction() + begin + if LeftMostColumnIndex > 1 then + LeftMostColumnIndex -= 1; + end; + } + action(Right) + { + Caption = 'Scroll Right'; + ApplicationArea = all; + Promoted = true; + PromotedCategory = Process; + PromotedOnly = true; + Image = NextRecord; + Visible = NoOfColumnsVisible > 10; + ToolTip = 'Scroll to the right to view more columns.'; + + trigger OnAction() + begin + LeftMostColumnIndex += 1; + end; + } + } + } + + trigger OnOpenPage() + begin + LeftMostColumnIndex := 1; + end; + + var + GlobalFileHandlerResult: Codeunit "File Handler Result"; + GlobalFileContentAsTable: List of [List of [Text]]; + LeftMostColumnIndex: Integer; + GlobalMappedColumns: List of [Integer]; + GlobalVisibleColumns: List of [Integer]; + GlobalCurrentColumn: Integer; + NoOfColumnsVisible: Integer; + CurrentColumnIsInMappedColumns: Boolean; + ColumnVisible1, ColumnVisible2, ColumnVisible3, ColumnVisible4, ColumnVisible5, ColumnVisible6, ColumnVisible7, ColumnVisible8, ColumnVisible9, ColumnVisible10 : Boolean; + ColumnVisible: array[10] of Boolean; + StyleExpression1, StyleExpression2, StyleExpression3, StyleExpression4, StyleExpression5, StyleExpression6, StyleExpression7, StyleExpression8, StyleExpression9, StyleExpression10 : Text; + StyleExpression: array[10] of Text; + + internal procedure ScrollLeft() + begin + if NoOfColumnsVisible <= 10 then + exit; + if LeftMostColumnIndex > 1 then + LeftMostColumnIndex -= 1; + end; + + internal procedure ScrollRight() + var + HeaderRow: List of [Text]; + begin + if NoOfColumnsVisible <= 10 then + exit; + if GlobalFileContentAsTable.Count() > 0 then begin + HeaderRow := GlobalFileContentAsTable.Get(1); + if LeftMostColumnIndex + 5 <= HeaderRow.Count() then + LeftMostColumnIndex += 1; + end; + end; + + internal procedure LoadData(Data: List of [List of [Text]]; FileHandlerResult: Codeunit "File Handler Result"; SelectedColumns: List of [Integer]; CurrentColumn: Integer) + var + i: Integer; + MaxDataRows: Integer; + begin + Clear(GlobalFileContentAsTable); + Clear(GlobalMappedColumns); + Clear(GlobalVisibleColumns); + Clear(GlobalCurrentColumn); + Clear(CurrentColumnIsInMappedColumns); + Clear(ColumnVisible); + Clear(StyleExpression); + Clear(GlobalFileHandlerResult); + NoOfColumnsVisible := 0; + GlobalFileContentAsTable := Data; + GlobalMappedColumns := SelectedColumns; + GlobalCurrentColumn := CurrentColumn; + GlobalFileHandlerResult := FileHandlerResult; + + CurrentColumnIsInMappedColumns := GlobalMappedColumns.Contains(GlobalCurrentColumn); + NoOfColumnsVisible := NumberOfColumnsToShow(); + GlobalVisibleColumns := GlobalMappedColumns; + GlobalVisibleColumns.Add(GlobalCurrentColumn); + SetColumnVisibility(); + SetStyleExpressions(); + Clear(Rec); + if GlobalFileHandlerResult.GetContainsHeaderRow() then + MaxDataRows := Data.Count() - 1 + else + MaxDataRows := Data.Count(); + for i := 1 to MaxDataRows do begin + Rec.Number := i; + Rec.Insert(); + end; + end; + + local procedure NumberOfColumnsToShow(): Integer + begin + if CurrentColumnIsInMappedColumns then + exit(GlobalMappedColumns.Count()) + else + exit(GlobalMappedColumns.Count() + 1); + end; + + local procedure GetColumnHeading(ColumnNumber: Integer): Text + var + ColumnName: Text; + HeaderRow: List of [Text]; + begin + if (GlobalFileContentAsTable.Count() > 0) and (ColumnNumber > 0) then begin + if GlobalFileHandlerResult.GetContainsHeaderRow() then + HeaderRow := GlobalFileContentAsTable.Get(1) + else + HeaderRow := GlobalFileHandlerResult.GetColumnNames(); + if ColumnNumber <= GlobalMappedColumns.Count then + ColumnName := HeaderRow.Get(GlobalMappedColumns.Get(ColumnNumber)); + end; + exit(ColumnName); + end; + + local procedure GetCellValue(Row: Integer; Column: Integer): Text + var + ColumnValue: Text; + RowValue: List of [Text]; + begin + if GlobalFileHandlerResult.GetContainsHeaderRow() then + Row := Row + 1; + if Row <= GlobalFileContentAsTable.Count() then begin + RowValue := GlobalFileContentAsTable.Get(Row); + if Column <= GlobalMappedColumns.Count then + ColumnValue := RowValue.Get(GlobalMappedColumns.Get(Column)); + end; + exit(ColumnValue); + end; + + local procedure SetColumnVisibility() + var + i: Integer; + NoOfColumns: Integer; + begin + Clear(ColumnVisible); + + if NoOfColumnsVisible > 10 then + NoOfColumns := 10 + else + NoOfColumns := NoOfColumnsVisible; + + for i := 1 to NoOfColumns do + ColumnVisible[i] := true; + + ColumnVisible1 := ColumnVisible[1]; + ColumnVisible2 := ColumnVisible[2]; + ColumnVisible3 := ColumnVisible[3]; + ColumnVisible4 := ColumnVisible[4]; + ColumnVisible5 := ColumnVisible[5]; + ColumnVisible6 := ColumnVisible[6]; + ColumnVisible7 := ColumnVisible[7]; + ColumnVisible8 := ColumnVisible[8]; + ColumnVisible9 := ColumnVisible[9]; + ColumnVisible10 := ColumnVisible[10]; + end; + + local procedure SetStyleExpressions() + var + Index: Integer; + begin + Clear(StyleExpression); + + Index := GlobalVisibleColumns.IndexOf(GlobalCurrentColumn); + if CurrentColumnIsInMappedColumns then + StyleExpression[Index] := 'Strong' + else + StyleExpression[Index] := 'Subordinate'; + + StyleExpression1 := StyleExpression[1]; + StyleExpression2 := StyleExpression[2]; + StyleExpression3 := StyleExpression[3]; + StyleExpression4 := StyleExpression[4]; + StyleExpression5 := StyleExpression[5]; + StyleExpression6 := StyleExpression[6]; + StyleExpression7 := StyleExpression[7]; + StyleExpression8 := StyleExpression[8]; + StyleExpression9 := StyleExpression[9]; + StyleExpression10 := StyleExpression[10]; + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCache.Table.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCache.Table.al new file mode 100644 index 0000000000..e947de29dc --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCache.Table.al @@ -0,0 +1,33 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; +table 7278 "Mapping Cache" +{ + InherentEntitlements = X; + InherentPermissions = X; + Access = Internal; + + fields + { + field(1; "File Identity Hash"; Text[1024]) + { + Caption = 'File Identity Hash'; + DataClassification = SystemMetadata; + } + field(2; Mapping; Blob) + { + Caption = 'Mapping'; + DataClassification = SystemMetadata; + } + } + + keys + { + key(PK; "File Identity Hash") + { + Clustered = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCacheManagement.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCacheManagement.Codeunit.al new file mode 100644 index 0000000000..5317a96fce --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FieldMapper/MappingCacheManagement.Codeunit.al @@ -0,0 +1,66 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +using System.Security.Encryption; +codeunit 7297 "Mapping Cache Management" +{ + internal procedure MappingExists(FileIdentityHash: Text): Boolean + var + MappingCache: Record "Mapping Cache"; + begin + exit(MappingCache.Get(FileIdentityHash)); + end; + + internal procedure GetMapping(FileIdentityHash: Text; var SavedMappingAsText: Text): Boolean + var + MappingCache: Record "Mapping Cache"; + InStream: InStream; + StreamLength: Integer; + begin + if MappingCache.Get(FileIdentityHash) then begin + MappingCache.CalcFields(Mapping); + if not MappingCache.Mapping.HasValue then begin + MappingCache.Delete(); + exit(false); + end; + MappingCache.Mapping.CreateInStream(InStream, TextEncoding::UTF8); + StreamLength := InStream.ReadText(SavedMappingAsText); + if (StreamLength <= 0) or (SavedMappingAsText = '') then begin + MappingCache.Delete(); + exit(false); + end; + exit(true); + end; + exit(false); + end; + + internal procedure SaveMapping(FileIdentityHash: Text; MappingAsText: Text) + var + MappingCache: Record "Mapping Cache"; + OutStream: OutStream; + begin + if MappingCache.Get(FileIdentityHash) then begin + Clear(MappingCache.Mapping); + MappingCache.Mapping.CreateOutStream(OutStream, TextEncoding::UTF8); + OutStream.WriteText(MappingAsText); + MappingCache.Modify(); + end else begin + MappingCache.Init(); + MappingCache."File Identity Hash" := CopyStr(FileIdentityHash, 1, MaxStrLen(MappingCache."File Identity Hash")); + MappingCache.Mapping.CreateOutStream(OutStream); + OutStream.WriteText(MappingAsText); + MappingCache.Insert(); + end; + end; + + internal procedure GenerateFileHashInHex(TextToHash: Text): Text[1024] + var + CryptographyManagement: Codeunit "Cryptography Management"; + HashAlgorithmType: Option MD5,SHA1,SHA256,SHA384,SHA512; + begin + exit(CopyStr(CryptographyManagement.GenerateHash(TextToHash, HashAlgorithmType::SHA256), 1, 1024)); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/CSVHandler.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/CSVHandler.Codeunit.al new file mode 100644 index 0000000000..8c87794dca --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/CSVHandler.Codeunit.al @@ -0,0 +1,152 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +using Microsoft.Sales.Document; +using System.IO; + +codeunit 7293 "Csv Handler" implements "File Handler" +{ + Access = Internal; + + var + CsvFileStream: InStream; + isIntialized: Boolean; + FirstLineAsHash: Text; + ConcatTwoLinesLbl: Label '%1\n%2', Comment = '%1 = first line, %2 = second line.'; + InvalidCsvDataErr: Label 'Cannot process input data. Either the data is not in a valid CSV format or data is missing.'; + HandlerNotInitializedErr: Label 'Handler not initialized'; + InvalidFileConfigurationErr: Label 'Invalid File Configuration'; + + internal procedure Process(var FileInputStream: InStream): Variant + var + MappingCacheManagement: Codeunit "Mapping Cache Management"; + FileHandlerResult: Codeunit "File Handler Result"; + CsvInput: Text; + FirstLine: Text; + SavedMappingAsText: Text; + JsonObject: JsonObject; + begin + CsvFileStream := FileInputStream; + + // Load mappings from csv if available + FirstLine := ReadLines(CsvFileStream, 1, true); + FirstLineAsHash := MappingCacheManagement.GenerateFileHashInHex(FirstLine); + + if MappingCacheManagement.GetMapping(FirstLineAsHash, SavedMappingAsText) then begin + JsonObject.ReadFrom(SavedMappingAsText); + FileHandlerResult.FromJson(JsonObject); + isIntialized := true; + exit(FileHandlerResult); + end; + + // Else get LLM to generate mapping + CsvInput := ReadLines(CsvFileStream, 11, true); // Read first 11 lines assuming first line is header line + FileHandlerResult := GenerateCsvMappingSuggestionFromAttachment(CsvInput); + isIntialized := true; + exit(FileHandlerResult); + end; + + internal procedure GetFileData(FileHandlerResultVariant: Variant): List of [List of [Text]] + var + TempCSVBuffer: Record "CSV Buffer" temporary; + FileHandlerResult: Codeunit "File Handler Result"; + ColumnSeparatorChar: Char; + Row: List of [Text]; + AllRows: List of [List of [Text]]; + i: Integer; + j: Integer; + begin + if not isIntialized then + Error(HandlerNotInitializedErr); + + if not FileHandlerResultVariant.IsCodeunit() then + Error(InvalidFileConfigurationErr); + + FileHandlerResult := FileHandlerResultVariant; + + CsvFileStream.ResetPosition(); + + ColumnSeparatorChar := FileHandlerResult.GetColumnDelimiter() [1]; + + TempCSVBuffer.InitializeReaderFromStream(CsvFileStream, ColumnSeparatorChar); + + if TempCSVBuffer.ReadLines(0) then begin // reads all lines + // Assuming the first line is header. + // Rows + for i := 1 to TempCSVBuffer.GetNumberOfLines() do begin + Clear(Row); + + // Columns + for j := 1 to TempCSVBuffer.GetNumberOfColumns() do + Row.Add(TempCSVBuffer.GetValue(i, j)); + AllRows.Add(Row); + end; + + if AllRows.Count <= 1 then + Error(InvalidCsvDataErr); + exit(AllRows); + end; + end; + + internal procedure Finalize(FileHandlerResultVariant: Variant) + var + MappingCacheManagement: Codeunit "Mapping Cache Management"; + FileHandlerResult: Codeunit "File Handler Result"; + JsonObject: JsonObject; + JsonAsText: Text; + begin + if not isIntialized then + Error(HandlerNotInitializedErr); + + if not FileHandlerResultVariant.IsCodeunit() then + Error(InvalidFileConfigurationErr); + + FileHandlerResult := FileHandlerResultVariant; + + if not FileHandlerResult.GetContainsHeaderRow() then + exit; + JsonObject := FileHandlerResult.ToJson(); + JsonObject.WriteTo(JsonAsText); + MappingCacheManagement.SaveMapping(FirstLineAsHash, JsonAsText); + end; + + local procedure ReadLines(var FileInStream: InStream; NoOfLinesToRead: Integer; FromBeginning: Boolean): Text + begin + if FromBeginning then + FileInStream.ResetPosition(); + exit(ReadLines(FileInStream, NoOfLinesToRead)); + end; + + local procedure ReadLines(var FileInStream: InStream; NoOfLinesToRead: Integer): Text + var + Line: Text; + LineCounter: Integer; + Lines: Text; + begin + while not FileInStream.EOS() do begin + FileInStream.ReadText(Line); + Lines := StrSubstNo(ConcatTwoLinesLbl, Lines, Line); + LineCounter += 1; + if LineCounter >= NoOfLinesToRead then + exit(Lines); + end; + exit(Lines); + end; + + local procedure GenerateCsvMappingSuggestionFromAttachment(CsvData: Text): Codeunit "File Handler Result" + var + Prompt: Codeunit "SLS Prompts"; + LookupItemsFromCsvFunction: Codeunit "Lookup Items From Csv Function"; + SalesLineAISuggestionImpl: Codeunit "Sales Lines Suggestions Impl."; + FileHandlerResult: Codeunit "File Handler Result"; + UserInput: Text; + CompletionText: Text; + begin + UserInput := StrSubstNo(Prompt.GetParsingCsvTemplateUserInputPrompt(), CsvData); + FileHandlerResult := SalesLineAISuggestionImpl.AICall(Prompt.GetAttachmentSystemPrompt(), UserInput, LookupItemsFromCsvFunction, CompletionText); + exit(FileHandlerResult); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandler.Interface.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandler.Interface.al new file mode 100644 index 0000000000..4398aa82c4 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandler.Interface.al @@ -0,0 +1,33 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +///

+/// Specifies the interface for File Handler implementations. +/// +interface "File Handler" +{ + Access = Internal; + + /// + /// Processes the file input stream that is passed to the function. + /// + /// InStream pointing to the file content. + /// Result of the file processing. + procedure Process(var FileInputStream: InStream): Variant + + /// + /// Gets the data as a table from the file based on the file handler result. + /// + /// Result of the file processing. + /// List of rows where each row is a list of columns. + procedure GetFileData(FileHandlerResultVariant: Variant): List of [List of [Text]] + + /// + /// Finalizes the file handler. + /// + /// Result of the file processing. + procedure Finalize(FileHandlerResultVariant: Variant) +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerFactory.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerFactory.Codeunit.al new file mode 100644 index 0000000000..0183114b2b --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerFactory.Codeunit.al @@ -0,0 +1,25 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +using System.IO; + +codeunit 7294 "File Handler Factory" +{ + Access = Internal; + + procedure GetFileHandler(var FileParser: interface "File Handler"; FileName: Text) + var + FileManagement: Codeunit "File Management"; + FileParserType: Enum "File Handler Type"; + begin + case FileManagement.GetFileNameMimeType(FileName) of + 'text/csv': + FileParser := FileParserType::"CSV Handler"; + else + Error('Unsupported file type'); + end; + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerResult.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerResult.Codeunit.al new file mode 100644 index 0000000000..969e515282 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerResult.Codeunit.al @@ -0,0 +1,221 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +codeunit 7295 "File Handler Result" +{ + Access = Internal; + + var + ColumnDelimiter: Text; + ColumnDelimiterLbl: Label 'Column_Delimiter', Locked = true; + DecimalSeparator: Text; + ProductColumnIndex: List of [Integer]; + ProductColumnIndexLbl: Label 'Product_Column_Index', Locked = true; + QuantityColumnIndex: Integer; + QuantityColumnIndexLbl: Label 'Quantity_Column_Index', Locked = true; + UoMColumnIndex: Integer; + UoMColumnIndexLbl: Label 'UoM_Column_Index', Locked = true; + ContainsHeaderRow: Boolean; + ContainsHeaderRowLbl: Label 'Contains_Header_Row', Locked = true; + ColumnNames: List of [Text]; + ColumnNamesLbl: Label 'Column_Names', Locked = true; + ColumnTypes: List of [Text]; + ColumnTypesLbl: Label 'Column_Types', Locked = true; + + internal procedure AddProductColumnIndex(ColumnIndex: Integer) + begin + ProductColumnIndex.Add(ColumnIndex); + end; + + internal procedure SetProductColumnIndex(ColumnIndex: Integer) + begin + Clear(ProductColumnIndex); + ProductColumnIndex.Add(ColumnIndex); + end; + + internal procedure SetProductColumnIndex(ColumnIndex: List of [Integer]) + begin + Clear(ProductColumnIndex); + ProductColumnIndex := ColumnIndex; + end; + + internal procedure SetQuantityColumnIndex(ColumnIndex: Integer) + begin + QuantityColumnIndex := ColumnIndex; + end; + + internal procedure SetUoMColumnIndex(ColumnIndex: Integer) + begin + UoMColumnIndex := ColumnIndex; + end; + + internal procedure GetProductColumnIndex(): List of [Integer] + begin + exit(ProductColumnIndex); + end; + + internal procedure GetQuantityColumnIndex(): Integer + begin + exit(QuantityColumnIndex); + end; + + internal procedure GetUoMColumnIndex(): Integer + begin + exit(UoMColumnIndex); + end; + + internal procedure SetColumnDelimiter(Delimiter: Text) + begin + ColumnDelimiter := Delimiter; + end; + + internal procedure GetColumnDelimiter(): Text + begin + exit(ColumnDelimiter); + end; + + internal procedure SetDecimalSeparator(Separator: Text) + begin + DecimalSeparator := Separator; + end; + + internal procedure GetDecimalSeparator(): Text + begin + exit(DecimalSeparator); + end; + + internal procedure SetContainsHeaderRow(ContainsHeader: Boolean) + begin + ContainsHeaderRow := ContainsHeader; + end; + + internal procedure GetContainsHeaderRow(): Boolean + begin + exit(ContainsHeaderRow); + end; + + internal procedure SetColumnNames(Names: List of [Text]) + begin + ColumnNames := Names; + end; + + internal procedure GetColumnNames(): List of [Text] + begin + exit(ColumnNames); + end; + + internal procedure SetColumnTypes(Types: List of [Text]) + begin + ColumnTypes := Types; + end; + + internal procedure GetColumnTypes(): List of [Text] + begin + exit(ColumnTypes); + end; + + internal procedure ToJson(): JsonObject + var + JsonObject: JsonObject; + JsonArray: JsonArray; + ColumnIndex: Integer; + ColumnValue: Text; + + begin + // ColumnDelimiter + JsonObject.Add(ColumnDelimiterLbl, ColumnDelimiter); + + // ProductColumnIndex + foreach ColumnIndex in ProductColumnIndex do + JsonArray.Add(ColumnIndex); + JsonObject.Add(ProductColumnIndexLbl, JsonArray); + + // QuantityColumnIndex + JsonObject.Add(QuantityColumnIndexLbl, QuantityColumnIndex); + + // UoMColumnIndex + JsonObject.Add(UoMColumnIndexLbl, UoMColumnIndex); + + // ContainsHeaderRow + if ContainsHeaderRow then + JsonObject.Add(ContainsHeaderRowLbl, 1) + else + JsonObject.Add(ContainsHeaderRowLbl, 0); + + // ColumnNames + Clear(JsonArray); + foreach ColumnValue in ColumnNames do + JsonArray.Add(ColumnValue); + JsonObject.Add(ColumnNamesLbl, JsonArray); + + // ColumnTypes + Clear(JsonArray); + foreach ColumnValue in ColumnTypes do + JsonArray.Add(ColumnValue); + JsonObject.Add(ColumnTypesLbl, JsonArray); + + exit(JsonObject); + end; + + internal procedure FromJson(JsonObject: JsonObject) + var + JsonArray: JsonArray; + JsonToken: JsonToken; + Index: Integer; + begin + // Clear existing values + Clear(ColumnDelimiter); + Clear(ProductColumnIndex); + Clear(QuantityColumnIndex); + Clear(UoMColumnIndex); + Clear(ContainsHeaderRow); + Clear(ColumnNames); + Clear(ColumnTypes); + + // ColumnDelimiter + JsonObject.Get(ColumnDelimiterLbl, JsonToken); + ColumnDelimiter := JsonToken.AsValue().AsText(); + + // ProductColumnIndex + JsonObject.Get(ProductColumnIndexLbl, JsonToken); + JsonArray := JsonToken.AsArray(); + for Index := 0 to JsonArray.Count - 1 do begin + JsonArray.Get(Index, JsonToken); + ProductColumnIndex.Add(JsonToken.AsValue().AsInteger()); + end; + + // QuantityColumnIndex + JsonObject.Get(QuantityColumnIndexLbl, JsonToken); + QuantityColumnIndex := JsonToken.AsValue().AsInteger(); + + // UoMColumnIndex + JsonObject.Get(UoMColumnIndexLbl, JsonToken); + UoMColumnIndex := JsonToken.AsValue().AsInteger(); + + // ContainsHeaderRow + JsonObject.Get(ContainsHeaderRowLbl, JsonToken); + if JsonToken.AsValue().AsInteger() = 1 then + ContainsHeaderRow := true + else + ContainsHeaderRow := false; + + // ColumnNames + JsonObject.Get(ColumnNamesLbl, JsonToken); + JsonArray := JsonToken.AsArray(); + for Index := 0 to JsonArray.Count - 1 do begin + JsonArray.Get(Index, JsonToken); + ColumnNames.Add(JsonToken.AsValue().AsText()); + end; + + // ColumnTypes + JsonObject.Get(ColumnTypesLbl, JsonToken); + JsonArray := JsonToken.AsArray(); + for Index := 0 to JsonArray.Count - 1 do begin + JsonArray.Get(Index, JsonToken); + ColumnTypes.Add(JsonToken.AsValue().AsText()); + end; + end; +} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMMGT.PermissionSetExt.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerType.Enum.al similarity index 59% rename from Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMMGT.PermissionSetExt.al rename to Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerType.Enum.al index 46dfc933c1..0f3873431f 100644 --- a/Apps/W1/FieldServiceIntegration/app/src/Permissions/FSD365DYNCRMMGT.PermissionSetExt.al +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/FileHandlers/FileHandlerType.Enum.al @@ -2,11 +2,15 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. // ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; +namespace Microsoft.Sales.Document.Attachment; -using System.Security.AccessControl; - -permissionsetextension 6611 "FS D365 DYN CRM MGT" extends "D365 DYN CRM MGT" +enum 7275 "File Handler Type" implements "File Handler" { - IncludedPermissionSets = "FS - Edit"; -} + Extensible = false; + Access = Internal; + + value(0; "CSV Handler") + { + Implementation = "File Handler" = "Csv Handler"; + } +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestionsSub.Page.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineAISuggestionsSub.Page.al similarity index 94% rename from Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestionsSub.Page.al rename to Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineAISuggestionsSub.Page.al index ed9165dfda..36bda6ccf7 100644 --- a/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestionsSub.Page.al +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineAISuggestionsSub.Page.al @@ -31,6 +31,7 @@ page 7276 "Sales Line AI Suggestions Sub" { Editable = false; ToolTip = 'Specifies the item number of the suggested result.'; + StyleExpr = Rec."Line Style"; } field("Variant Code"; Rec."Variant Code") { @@ -38,6 +39,7 @@ page 7276 "Sales Line AI Suggestions Sub" ShowMandatory = IsVariantCodeMandatory; Visible = IsVariantCodeVisible; ToolTip = 'Specifies the variant code of the suggested result.'; + StyleExpr = Rec."Line Style"; trigger OnValidate() var @@ -52,18 +54,22 @@ page 7276 "Sales Line AI Suggestions Sub" Editable = false; Visible = false; ToolTip = 'Specifies the line number of the suggested result.'; + StyleExpr = Rec."Line Style"; } field("Description"; Rec."Description") { ToolTip = 'Specifies the description of the suggested result.'; + StyleExpr = Rec."Line Style"; } field("Quantity"; Rec.Quantity) { ToolTip = 'Specifies the quantity of the suggested result.'; + StyleExpr = Rec."Line Style"; } field("Unit of Measure Code"; Rec."Unit of Measure Code") { ToolTip = 'Specifies the unit of measure code of the suggested result.'; + StyleExpr = Rec."Line Style"; } field(Confidence; Rec.Confidence) { @@ -78,6 +84,7 @@ page 7276 "Sales Line AI Suggestions Sub" Caption = 'Search Terms'; ToolTip = 'Specifies the search terms that were used to find the suggested results.'; Visible = AdditionalInformationVisible; + StyleExpr = Rec."Line Style"; } } } diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Codeunit.al new file mode 100644 index 0000000000..71f2adedc2 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Codeunit.al @@ -0,0 +1,68 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +using Microsoft.Sales.Document; +using System.AI; +using System.IO; +using System.Utilities; + +codeunit 7292 "Sales Line From Attachment" +{ + Access = Internal; + + var + SupportedFileFilterCaptionLbl: Label 'csv files (*.csv)|*.csv', Locked = true; + SupportedFileFilterLbl: Label '*.csv', Locked = true; + FileUploadCaptionLbl: Label 'Select a file to upload'; + + internal procedure AttachAndSuggest(SalesHeader: Record "Sales Header") + begin + AttachAndSuggest(SalesHeader, PromptMode::Generate); + end; + + internal procedure AttachAndSuggest(SalesHeader: Record "Sales Header"; NewMode: PromptMode) + var + AzureOpenAI: Codeunit "Azure OpenAI"; + FileHandlerFactory: Codeunit "File Handler Factory"; + TempBlob: Codeunit "Temp Blob"; + SalesLineFromAttachment: Page "Sales Line From Attachment"; + FileHandler: interface "File Handler"; + FileName: Text; + begin + SalesHeader.TestStatusOpen(); + if not AzureOpenAI.IsEnabled(Enum::"Copilot Capability"::"Sales Lines Suggestions") then + exit; + + if Upload(TempBlob, FileName) then begin + if FileName = '' then + exit; + FileHandlerFactory.GetFileHandler(FileHandler, FileName); + + SalesLineFromAttachment.LoadData(FileHandler, FileName, TempBlob, SalesHeader); + SalesLineFromAttachment.SetPromptMode(NewMode); + SalesLineFromAttachment.Run(); + end; + end; + + internal procedure AttachAndSuggest(SalesLine: Record "Sales Line") + var + SalesHeader: Record "Sales Header"; + begin + if SalesHeader.Get(SalesLine."Document Type", SalesLine."Document No.") then + AttachAndSuggest(SalesHeader); + end; + + [TryFunction] + local procedure Upload(var TempBlob: Codeunit "Temp Blob"; var FileName: Text) + var + FileManagement: Codeunit "File Management"; + begin + Clear(TempBlob); + + FileName := FileManagement.BLOBImportWithFilter(TempBlob, FileUploadCaptionLbl, FileName, SupportedFileFilterCaptionLbl, SupportedFileFilterLbl); + end; + +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Page.al b/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Page.al new file mode 100644 index 0000000000..495c6bed42 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/Attachment/SalesLineFromAttachment.Page.al @@ -0,0 +1,303 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +using Microsoft.Sales.Document; +using System.Utilities; + +page 7290 "Sales Line From Attachment" +{ + Caption = 'Suggest sales lines from file'; + DataCaptionExpression = PageCaptionTxt; + PageType = PromptDialog; + IsPreview = true; + Extensible = false; + ApplicationArea = All; + Editable = true; + InherentEntitlements = X; + InherentPermissions = X; + + layout + { + area(Prompt) + { + label(AttachmentMappingLbl) + { + CaptionClass = GeneratedCaption; + ApplicationArea = All; + } + part(AttachmentMappingPart; "Attachment Mapping Part") + { + Caption = 'Column Mapping'; + ApplicationArea = All; + } + } + area(Content) + { + label(SuggestionStatusLbl) + { + CaptionClass = SuggestionStatusTxt; + Style = Strong; + ApplicationArea = All; + } + + part(SalesLinesSub; "Sales Line AI Suggestions Sub") + { + Caption = 'Suggested sales lines'; + ShowFilter = false; + ApplicationArea = All; + } + } + area(PromptOptions) + { + field(MatchingStyle; SearchStyle) + { + Caption = 'Matching'; + ApplicationArea = All; + ToolTip = 'Specifies the search confidence to use when generating sales line suggestions.'; + trigger OnValidate() + begin + if SearchStyle = SearchStyle::Permissive then + ViewOptions := ViewOptions::"Lines and Confidence"; + end; + } + field(ViewOptions; ViewOptions) + { + Caption = 'View'; + ApplicationArea = All; + ToolTip = 'Specifies whether to show lines or lines and confidence about the sales line suggestions when possible.'; + OptionCaption = 'Lines only, Lines and Confidence'; + } + } + } + + actions + { + area(SystemActions) + { + systemaction(Generate) + { + Caption = 'Generate'; + ToolTip = 'Generate sales line suggestions from Copilot.'; + + trigger OnAction() + var + NotificationManager: Codeunit "Notification Manager"; + begin + NotificationManager.RecallNotification(); + GenerateSalesLineSuggestions(); + end; + } + systemaction(OK) + { + Caption = 'Insert'; + ToolTip = 'Keep sales line suggestions proposed by Copilot.'; + } + systemaction(Cancel) + { + Caption = 'Discard'; + ToolTip = 'Discard sales line suggestions proposed by Copilot.'; + } + } + } + + trigger OnOpenPage() + var + ProgressDialog: Dialog; + begin + SearchStyle := Enum::"Search Style"::Balanced; + GlobalTempBlob.CreateInStream(GlobalFileInstream); + + ProgressDialog.Open(FetchingSearchTermsProgressLbl); + // LLM call or loading from cache to fetch the FileHandlerResult + GlobalFileHandlerResult := GlobalFileHandler.Process(GlobalFileInstream); + GlobalFileData := GlobalFileHandler.GetFileData(GlobalFileHandlerResult); // Read file data based on the FileHandlerResult + CurrPage.AttachmentMappingPart.Page.LoadCSVAndGetProductInfo(GlobalFileData, GlobalFileHandlerResult); + ProgressDialog.Close(); + + SummarizePromptAndPageCaption(); + end; + + trigger OnQueryClosePage(CloseAction: Action): Boolean + var + SalesLineUtility: Codeunit "Sales Line Utility"; + TotalCopiedLines: Integer; + begin + TotalCopiedLines := 0; + if CloseAction = CloseAction::OK then begin + TotalCopiedLines := TempGlobalSalesLineAISuggestion.Count(); + if TotalCopiedLines > 0 then + SalesLineUtility.CopySalesLineToDoc(GlobalSalesHeader, TempGlobalSalesLineAISuggestion); + // Save the mapping used for generating the sales lines + GlobalFileHandler.Finalize(GlobalFileHandlerResult); + end; + end; + + local procedure GenerateSalesLineSuggestions() + var + SalesLinesSuggestionsImpl: Codeunit "Sales Lines Suggestions Impl."; + NewProductInformationColumns: List of [Integer]; + NewQuantityColumn: Integer; + NewUoMColumn: Integer; + ProgressDialog: Dialog; + SearchQuery: Text; + NoOfDataLinesInFile: Integer; + begin + TempGlobalSalesLineAISuggestion.DeleteAll(); + Clear(TempGlobalSalesLineAISuggestion); + if CurrPage.AttachmentMappingPart.Page.ColumnMappingHasChanged(NewProductInformationColumns, NewQuantityColumn, NewUoMColumn) then begin + GlobalFileHandlerResult.SetProductColumnIndex(NewProductInformationColumns); + GlobalFileHandlerResult.SetQuantityColumnIndex(NewQuantityColumn); + GlobalFileHandlerResult.SetUoMColumnIndex(NewUoMColumn); + end; + if GlobalFileHandlerResult.GetContainsHeaderRow() then + NoOfDataLinesInFile := GlobalFileData.Count() - 1 + else + NoOfDataLinesInFile := GlobalFileData.Count(); + ProgressDialog.Open(FetchingSearchTermsProgressLbl); + SearchQuery := BuildSearchQuery(GlobalFileData, GlobalFileHandlerResult); + ProgressDialog.Close(); + ProgressDialog.Open(GeneratingSalesLinesProgressLbl); + SalesLinesSuggestionsImpl.GenerateSalesLineSuggestions(SearchQuery, SearchStyle, GlobalSalesHeader, TempGlobalSalesLineAISuggestion); + SuggestionStatusTxt := StrSubstNo(SuggestionStatusTok, TempGlobalSalesLineAISuggestion.Count(), NoOfDataLinesInFile); + CurrPage.SalesLinesSub.Page.Load(TempGlobalSalesLineAISuggestion, ViewOptions); + ProgressDialog.Close(); + SummarizePromptAndPageCaption(); + end; + + local procedure BuildSearchQuery(FileData: List of [List of [Text]]; FileParserResult: Codeunit "File Handler Result"): Text + var + SLSPrompts: Codeunit "SLS Prompts"; + ProductInfoAsText: Text; + HeaderRow: List of [Text]; + SearchQuery: Text; + Rows: Text; + StartIndex, Index1, Index2 : Integer; + begin + // Add header row + if FileParserResult.GetContainsHeaderRow() then begin + HeaderRow := FileData.Get(1); + StartIndex := 2 + end else begin + HeaderRow := FileParserResult.GetColumnNames(); + StartIndex := 1; + end; + + // Add header row + ProductInfoAsText := ProductInfoTok; + if FileParserResult.GetQuantityColumnIndex() <> 0 then + ProductInfoAsText := StrSubstNo('%1%2%3', ProductInfoAsText, FileParserResult.GetColumnDelimiter(), QuantityTok); + if FileParserResult.GetUoMColumnIndex() <> 0 then + ProductInfoAsText := StrSubstNo('%1%2%3', ProductInfoAsText, FileParserResult.GetColumnDelimiter(), UoMTok); + + // Add new line character + ProductInfoAsText := StrSubstNo('%1%2', ProductInfoAsText, '\n'); + Rows := ProductInfoAsText; + // Add data to the list + Clear(ProductInfoAsText); + for Index1 := StartIndex to FileData.Count() do begin + Clear(ProductInfoAsText); + foreach Index2 in FileParserResult.GetProductColumnIndex() do + if ProductInfoAsText = '' then + ProductInfoAsText := FileData.Get(Index1).Get(Index2) + else + ProductInfoAsText := StrSubstNo('%1 %2', ProductInfoAsText, FileData.Get(Index1).Get(Index2)); + + if FileParserResult.GetQuantityColumnIndex() <> 0 then + ProductInfoAsText := StrSubstNo('%1%2%3', ProductInfoAsText, FileParserResult.GetColumnDelimiter(), FileData.Get(Index1).Get(FileParserResult.GetQuantityColumnIndex())); + + if FileParserResult.GetUoMColumnIndex() <> 0 then + ProductInfoAsText := StrSubstNo('%1%2%3', ProductInfoAsText, FileParserResult.GetColumnDelimiter(), FileData.Get(Index1).Get(FileParserResult.GetUoMColumnIndex())); + ProductInfoAsText := StrSubstNo('%1%2', ProductInfoAsText, '\n'); + Rows += ProductInfoAsText; + end; + + SearchQuery := StrSubstNo(SLSPrompts.GetProductFromCsvTemplateUserInputPrompt(), Rows); + exit(SearchQuery); + end; + + internal procedure LoadData(var FileHandler: interface "File Handler"; FileName: Text; var LoadedTempBlob: Codeunit "Temp Blob"; SalesHeader: Record "Sales Header") + begin + GlobalFileHandler := FileHandler; + GlobalFileName := FileName; + GlobalTempBlob := LoadedTempBlob; + GlobalSalesHeader := SalesHeader; + end; + + internal procedure SetPromptMode(NewMode: PromptMode) + begin + CurrPage.PromptMode := NewMode; + end; + + local procedure SummarizePromptAndPageCaption() + var + ProductInfoColumnCaption: Text; + QuantityColumnCaption: Text; + UoMColumnCaption: Text; + LoopIndex: Integer; + TabLbl: Label '', Comment = 'Tab character.', Locked = true; + TabChar: Char; + begin + // GeneratedCaption will be of the format "Suggest sales lines from Sample.csv. Use ; as a column separator." + TabChar := 9; + GeneratedCaption := StrSubstNo(PromptPart1Lbl, GlobalFileName); + if GlobalFileHandlerResult.GetColumnDelimiter() <> '' then + if GlobalFileHandlerResult.GetColumnDelimiter() = TabChar then + GeneratedCaption := GeneratedCaption + StrSubstNo(PromptPart2Lbl, TabLbl) + else + GeneratedCaption := GeneratedCaption + StrSubstNo(PromptPart2Lbl, GlobalFileHandlerResult.GetColumnDelimiter()); + + PageCaptionTxt := GeneratedCaption; + if GlobalFileHandlerResult.GetProductColumnIndex().Count > 0 then begin + for LoopIndex := 1 to GlobalFileHandlerResult.GetProductColumnIndex().Count do + if ProductInfoColumnCaption = '' then + ProductInfoColumnCaption := GlobalFileHandlerResult.GetColumnNames().Get(GlobalFileHandlerResult.GetProductColumnIndex().Get(LoopIndex)) + else + ProductInfoColumnCaption := StrSubstNo('%1, %2', ProductInfoColumnCaption, GlobalFileHandlerResult.GetColumnNames().Get(GlobalFileHandlerResult.GetProductColumnIndex().Get(LoopIndex))); + // ProductInfoColumnCaption will be of the format "Product Information: Product Name, Product No." + ProductInfoColumnCaption := StrSubstNo(MappedInfoLbl, ProductInfoTok, ProductInfoColumnCaption); + + if GlobalFileHandlerResult.GetQuantityColumnIndex() <> 0 then begin + QuantityColumnCaption := StrSubstNo(MappedInfoLbl, QuantityTok, GlobalFileHandlerResult.GetColumnNames().Get(GlobalFileHandlerResult.GetQuantityColumnIndex())); + // ProductInfoColumnCaption will be of the format "Product Information: Product Name, Product No. Quantity: Quantity" + ProductInfoColumnCaption := StrSubstNo('%1 %2', ProductInfoColumnCaption, QuantityColumnCaption); + end; + + if GlobalFileHandlerResult.GetUoMColumnIndex() <> 0 then begin + UoMColumnCaption := StrSubstNo(MappedInfoLbl, UoMTok, GlobalFileHandlerResult.GetColumnNames().Get(GlobalFileHandlerResult.GetUoMColumnIndex())); + ProductInfoColumnCaption := StrSubstNo('%1 %2', ProductInfoColumnCaption, UoMColumnCaption); + end; + // ProductInfoColumnCaption will be of the format "Mapped columns Product Information: Product Name, Product No. Quantity: Quantity UoM: UoM" + ProductInfoColumnCaption := StrSubstNo(AttachmentMappingLbl, ProductInfoColumnCaption); + // PageCaptionTxt will be of the format "Suggest sales lines from Sample.csv. Use ; as a column separator. Mapped columns Product Information: Product Name, Product No. Quantity: Quantity UoM: UoM" + PageCaptionTxt := StrSubstNo('%1 %2', PageCaptionTxt, ProductInfoColumnCaption); + end; + end; + + var + TempGlobalSalesLineAISuggestion: Record "Sales Line AI Suggestions" temporary; + GlobalSalesHeader: Record "Sales Header"; + GlobalFileHandlerResult: Codeunit "File Handler Result"; + GlobalTempBlob: Codeunit "Temp Blob"; + GlobalFileHandler: interface "File Handler"; + PageCaptionTxt: Text; + GlobalFileName: Text; + GlobalFileInstream: Instream; + GlobalFileData: List of [List of [Text]]; + FetchingSearchTermsProgressLbl: Label 'Fetching search terms from file...'; + GeneratingSalesLinesProgressLbl: Label 'Generating sales line suggestions from the search terms...'; + SuggestionStatusTok: Label '%1 suggestions were generated from %2 lines in the file.', Comment = '%1 = number of suggestions, %2 = number of lines in the file.'; + SuggestionStatusTxt: Text; + SearchStyle: Enum "Search Style"; + ViewOptions: Option "Lines only","Lines and Confidence"; + GeneratedCaption: Text; + PromptPart1Lbl: Label 'Suggest sales lines from data in %1. ', Comment = '%1 = file name.'; + PromptPart2Lbl: Label 'Use %1 as the column separator.', Comment = '%1 = column separator.'; + AttachmentMappingLbl: Label 'Mapped columns %1.', Comment = '%1 = all mapped column captions.'; + MappedInfoLbl: Label '%1: %2', Comment = '%1 = column caption, %2 = column value.'; + ProductInfoTok: Label 'Product Information'; + QuantityTok: Label 'Quantity'; + UoMTok: Label 'Unit of Measure'; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesInvoiceSubFormExt.PageExt.al b/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesInvoiceSubFormExt.PageExt.al index 311df7f0ad..3728e7cd66 100644 --- a/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesInvoiceSubFormExt.PageExt.al +++ b/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesInvoiceSubFormExt.PageExt.al @@ -16,7 +16,6 @@ pageextension 7277 "Sales Invoice Sub Form Ext" extends "Sales Invoice Subform" Caption = 'Suggest sales lines'; Image = SparkleFilled; ToolTip = 'Get sales lines suggestions from Copilot'; - Visible = SLSActionVisibility; trigger OnAction() begin @@ -32,7 +31,6 @@ pageextension 7277 "Sales Invoice Sub Form Ext" extends "Sales Invoice Subform" Caption = 'Suggest sales lines'; Image = SparkleFilled; ToolTip = 'Get sales lines suggestions from Copilot'; - Visible = SLSActionVisibility; trigger OnAction() begin @@ -42,12 +40,6 @@ pageextension 7277 "Sales Invoice Sub Form Ext" extends "Sales Invoice Subform" } } - trigger OnOpenPage() - begin - SLSActionVisibility := SalesLineAISuggestionImp.CheckSupportedLanguages() - end; - var SalesLineAISuggestionImp: Codeunit "Sales Lines Suggestions Impl."; - SLSActionVisibility: Boolean; } \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesOrderSubFormExt.PageExt.al b/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesOrderSubFormExt.PageExt.al index 348135bfd0..4169a2895a 100644 --- a/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesOrderSubFormExt.PageExt.al +++ b/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesOrderSubFormExt.PageExt.al @@ -4,6 +4,8 @@ // ------------------------------------------------------------------------------------------------ namespace Microsoft.Sales.Document; +using Microsoft.Sales.Document.Attachment; + pageextension 7278 "Sales Order Sub Form Ext" extends "Sales Order Subform" { actions @@ -16,39 +18,63 @@ pageextension 7278 "Sales Order Sub Form Ext" extends "Sales Order Subform" Caption = 'Suggest sales lines'; Image = SparkleFilled; ToolTip = 'Get sales lines suggestions from Copilot'; - Visible = SLSActionVisibility; trigger OnAction() begin SalesLineAISuggestionImp.GetLinesSuggestions(Rec); end; } - } - addlast(processing) - { - action("Suggest Sales Lines") + action("Attach Prompting") { ApplicationArea = All; - Caption = 'Suggest sales lines'; + Caption = 'Suggest sales lines from file'; + Ellipsis = true; Image = SparkleFilled; - ToolTip = 'Get sales lines suggestions from Copilot'; - Visible = SLSActionVisibility; + ToolTip = 'Get sales lines from file with Copilot'; trigger OnAction() begin - SalesLineAISuggestionImp.GetLinesSuggestions(Rec); + SalesLineFromAttachment.AttachAndSuggest(Rec); end; } } - } + addlast(processing) + { + group("Copilot") + { + Image = SparkleFilled; + ShowAs = SplitButton; - trigger OnOpenPage() - begin - SLSActionVisibility := SalesLineAISuggestionImp.CheckSupportedLanguages() - end; + action("Suggest Sales Lines") + { + ApplicationArea = All; + Caption = 'Suggest sales lines'; + Image = SparkleFilled; + ToolTip = 'Get sales lines suggestions from Copilot'; + + trigger OnAction() + begin + SalesLineAISuggestionImp.GetLinesSuggestions(Rec); + end; + } + action(Attach) + { + ApplicationArea = All; + Caption = 'Suggest sales lines from file'; + Ellipsis = true; + Image = SparkleFilled; + ToolTip = 'Get sales lines from file with Copilot'; + + trigger OnAction() + begin + SalesLineFromAttachment.AttachAndSuggest(Rec); + end; + } + } + } + } var SalesLineAISuggestionImp: Codeunit "Sales Lines Suggestions Impl."; - - SLSActionVisibility: Boolean; + SalesLineFromAttachment: Codeunit "Sales Line From Attachment"; } \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesQuoteSubFormExt.PageExt.al b/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesQuoteSubFormExt.PageExt.al index 6f50984169..e96e0ebfe2 100644 --- a/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesQuoteSubFormExt.PageExt.al +++ b/Apps/W1/SalesLinesSuggestions/app/BaseAppExtensions/SalesQuoteSubFormExt.PageExt.al @@ -16,7 +16,6 @@ pageextension 7279 "Sales Quote Sub Form Ext" extends "Sales Quote Subform" Caption = 'Suggest sales lines'; Image = SparkleFilled; ToolTip = 'Get sales lines suggestions from Copilot'; - Visible = SLSActionVisibility; trigger OnAction() begin @@ -32,7 +31,6 @@ pageextension 7279 "Sales Quote Sub Form Ext" extends "Sales Quote Subform" Caption = 'Suggest sales lines'; Image = SparkleFilled; ToolTip = 'Get sales lines suggestions from Copilot'; - Visible = SLSActionVisibility; trigger OnAction() begin @@ -41,13 +39,7 @@ pageextension 7279 "Sales Quote Sub Form Ext" extends "Sales Quote Subform" } } } - trigger OnOpenPage() - begin - SLSActionVisibility := SalesLineAISuggestionImp.CheckSupportedLanguages() - end; var SalesLineAISuggestionImp: Codeunit "Sales Lines Suggestions Impl."; - - SLSActionVisibility: Boolean; } \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/SLSPrompts.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/SLSPrompts.Codeunit.al index 12c9dd81a4..bb86914d2f 100644 --- a/Apps/W1/SalesLinesSuggestions/app/SLSPrompts.Codeunit.al +++ b/Apps/W1/SalesLinesSuggestions/app/SLSPrompts.Codeunit.al @@ -31,7 +31,7 @@ codeunit 7276 "SLS Prompts" BCSLSTaskPrompt: Text; begin GetAzureKeyVaultSecret(BCSLSMetaPrompt, 'BCSLSMetaPrompt'); - GetAzureKeyVaultSecret(BCSLSTaskPrompt, 'BCSLSTaskPrompt'); + GetAzureKeyVaultSecret(BCSLSTaskPrompt, 'BCSLSTaskPrompt-V250'); exit(BCSLSMetaPrompt + StrSubstNo(BCSLSTaskPrompt, Format(Today, 0, 4))); end; @@ -76,6 +76,48 @@ codeunit 7276 "SLS Prompts" exit(BCSLSMagicFunctionPrompt); end; + [NonDebuggable] + internal procedure GetAttachmentSystemPrompt(): Text + var + BCSLSMetaPrompt: Text; + BCSLSAttachmentTaskPrompt: Text; + begin + GetAzureKeyVaultSecret(BCSLSMetaPrompt, 'BCSLSMetaPrompt'); + GetAzureKeyVaultSecret(BCSLSAttachmentTaskPrompt, 'BCSLSAttachmentTaskPrompt'); + + exit(BCSLSMetaPrompt + BCSLSAttachmentTaskPrompt); + end; + + [NonDebuggable] + internal procedure GetParsingCsvPrompt(): Text + var + BCSLSParseCsvPrompt: Text; + begin + GetAzureKeyVaultSecret(BCSLSParseCsvPrompt, 'BCSLSParseCsvPrompt'); + + exit(BCSLSParseCsvPrompt); + end; + + [NonDebuggable] + internal procedure GetParsingCsvTemplateUserInputPrompt(): Text + var + BCSLSParseCsvTemplateUserInputPrompt: Text; + begin + GetAzureKeyVaultSecret(BCSLSParseCsvTemplateUserInputPrompt, 'BCSLSParseCsvTemplateUserInputPrompt'); + + exit(BCSLSParseCsvTemplateUserInputPrompt); + end; + + [NonDebuggable] + internal procedure GetProductFromCsvTemplateUserInputPrompt(): Text + var + BCSLSGetProductFromCsvTemplateUserInputPrompt: Text; + begin + GetAzureKeyVaultSecret(BCSLSGetProductFromCsvTemplateUserInputPrompt, 'BCSLSGetProductFromCsvTemplateUserInputPrompt'); + + exit(BCSLSGetProductFromCsvTemplateUserInputPrompt); + end; + var ConstructingPromptFailedErr: label 'There was an error with sending the call to Copilot. Log a Business Central support request about this.', Comment = 'Copilot is a Microsoft service name and must not be translated'; TelemetryConstructingPromptFailedErr: label 'There was an error with constructing the chat completion prompt from the Key Vault.', Locked = true; diff --git a/Apps/W1/SalesLinesSuggestions/app/SalesAzureOpenAITools/FunctionsImpl/LookupItemsFromCsvFunction.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/SalesAzureOpenAITools/FunctionsImpl/LookupItemsFromCsvFunction.Codeunit.al new file mode 100644 index 0000000000..926f7ff691 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/app/SalesAzureOpenAITools/FunctionsImpl/LookupItemsFromCsvFunction.Codeunit.al @@ -0,0 +1,113 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.Sales.Document.Attachment; + +using System.AI; +using Microsoft.Sales.Document; + +codeunit 7296 "Lookup Items From Csv Function" implements "AOAI Function" +{ + Access = Internal; + + var + FunctionNameLbl: Label 'extract_information_from_csv', Locked = true; + + [NonDebuggable] + procedure GetPrompt(): JsonObject + var + Prompt: Codeunit "SLS Prompts"; + PromptJson: JsonObject; + begin + PromptJson.ReadFrom(Prompt.GetParsingCsvPrompt()); + exit(PromptJson); + end; + + [NonDebuggable] + procedure Execute(Arguments: JsonObject): Variant + var + FileHandlerResult: Codeunit "File Handler Result"; + ColumnDelimiter: Text; + DecimalSeparator: Text; + ContainsHeaderRow: Boolean; + ProductInfoColumnIndex: List of [Integer]; + QuantityColumnIndex: Integer; + UoMColumnIndex: Integer; + ColumnNames: List of [Text]; + ColumnTypes: List of [Text]; + begin + if GetDetailsFromUserQuery(ColumnDelimiter, DecimalSeparator, ContainsHeaderRow, ProductInfoColumnIndex, QuantityColumnIndex, UoMColumnIndex, ColumnNames, ColumnTypes, Arguments) then begin + FileHandlerResult.SetColumnDelimiter(ColumnDelimiter); + FileHandlerResult.SetDecimalSeparator(DecimalSeparator); + FileHandlerResult.SetContainsHeaderRow(ContainsHeaderRow); + FileHandlerResult.SetProductColumnIndex(ProductInfoColumnIndex); + FileHandlerResult.SetQuantityColumnIndex(QuantityColumnIndex); + FileHandlerResult.SetUoMColumnIndex(UoMColumnIndex); + FileHandlerResult.SetColumnNames(ColumnNames); + FileHandlerResult.SetColumnTypes(ColumnTypes); + end; + exit(FileHandlerResult); + end; + + procedure GetName(): Text + begin + exit(FunctionNameLbl); + end; + + [TryFunction] + local procedure GetDetailsFromUserQuery(var ColumnDelimiter: Text; var DecimalSeparator: Text; var ContainsHeaderRow: Boolean; var ProductInfoColumnIndex: List of [Integer]; var QuantityColumnIndex: Integer; var UoMColumnIndex: Integer; var ColumnNames: List of [Text]; var ColumnTypes: List of [Text]; Arguments: JsonObject) + var + JsonItem: JsonToken; + DecimalSeparatorToken: JsonToken; + ColumnDelimiterToken: JsonToken; + ContainsHeaderRowToken: JsonToken; + ProductInfoColumnIndexArrayToken: JsonArray; + ProductInfoColumnIndexToken: JsonToken; + ProductInfoColumnIndexChildToken: JsonToken; + QuantityColumnIndexToken: JsonToken; + UoMColumnIndexToken: JsonToken; + ColumnsToken: JsonToken; + ColumnArrayToken: JsonArray; + ColumnToken: JsonToken; + ColumnNameToken: JsonToken; + ColumnTypeToken: JsonToken; + LoopIndex: Integer; + begin + JsonItem := Arguments.AsToken(); + if JsonItem.AsObject().Get('column_delimiter', ColumnDelimiterToken) then + ColumnDelimiter := ColumnDelimiterToken.AsValue().AsText(); + + if JsonItem.AsObject().Get('decimal_separator', DecimalSeparatorToken) then + DecimalSeparator := DecimalSeparatorToken.AsValue().AsText(); + + if JsonItem.AsObject().Get('csv_has_header_row', ContainsHeaderRowToken) then + ContainsHeaderRow := ContainsHeaderRowToken.AsValue().AsBoolean(); + + if JsonItem.AsObject().Get('product_info_column_index', ProductInfoColumnIndexToken) then begin + ProductInfoColumnIndexArrayToken := ProductInfoColumnIndexToken.AsArray(); + for LoopIndex := 0 to ProductInfoColumnIndexArrayToken.Count() - 1 do begin + ProductInfoColumnIndexArrayToken.Get(LoopIndex, ProductInfoColumnIndexChildToken); + ProductInfoColumnIndex.Add(ProductInfoColumnIndexChildToken.AsValue().AsInteger()); + end; + end; + + if JsonItem.AsObject().Get('quantity_column_index', QuantityColumnIndexToken) then + QuantityColumnIndex := QuantityColumnIndexToken.AsValue().AsInteger(); + + if JsonItem.AsObject().Get('unit_of_measure_column_index', UoMColumnIndexToken) then + if not UoMColumnIndexToken.AsValue().IsNull then + UoMColumnIndex := UoMColumnIndexToken.AsValue().AsInteger(); + + if JsonItem.AsObject().Get('csv_columns', ColumnsToken) then begin + ColumnArrayToken := ColumnsToken.AsArray(); + for LoopIndex := 0 to ColumnArrayToken.Count() - 1 do begin + ColumnArrayToken.Get(LoopIndex, ColumnToken); + if ColumnToken.AsObject().Get('column_name', ColumnNameToken) then + ColumnNames.Add(ColumnNameToken.AsValue().AsText()); + if ColumnToken.AsObject().Get('column_type', ColumnTypeToken) then + ColumnTypes.Add(ColumnTypeToken.AsValue().AsText()); + end; + end; + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Page.al b/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Page.al index 15c209d193..fd3ab15c2d 100644 --- a/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Page.al +++ b/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Page.al @@ -5,6 +5,7 @@ namespace Microsoft.Sales.Document; using System.Telemetry; +using Microsoft.Sales.Document.Attachment; page 7275 "Sales Line AI Suggestions" { @@ -115,7 +116,6 @@ page 7275 "Sales Line AI Suggestions" GenerateSalesLineSuggestions(SearchQueryTxt, SearchStyle); end; - } systemaction(OK) { @@ -128,6 +128,19 @@ page 7275 "Sales Line AI Suggestions" Caption = 'Discard'; ToolTip = 'Discard sales line suggestions proposed by Copilot.'; } + systemaction(Attach) + { + Caption = 'Attach'; + ToolTip = 'Attach a file to get sales line suggestions from Copilot.'; + + trigger OnAction() + var + SalesLineFromAttachment: Codeunit "Sales Line From Attachment"; + begin + CurrPage.Close(); + SalesLineFromAttachment.AttachAndSuggest(GlobalSalesHeader, PromptMode::Prompt); + end; + } } area(PromptGuide) { @@ -275,6 +288,10 @@ page 7275 "Sales Line AI Suggestions" TotalCopiedLines := TempSalesLineAISuggestion.Count(); if TotalCopiedLines > 0 then begin SalesLineUtility.CopySalesLineToDoc(GlobalSalesHeader, TempSalesLineAISuggestion); + if CheckIfSuggestedLinesContainErrors() then begin + CurrPage.Update(false); + exit(false); + end; FeatureTelemetry.LogUptake('0000ME4', SalesLineAISuggestionImpl.GetFeatureName(), Enum::"Feature Uptake Status"::Used); end; end; @@ -380,6 +397,17 @@ page 7275 "Sales Line AI Suggestions" Result := Result.TrimEnd(', '); end; + local procedure CheckIfSuggestedLinesContainErrors(): Boolean + var + TempSalesLineSuggestion: Record "Sales Line AI Suggestions" temporary; + begin + TempSalesLineSuggestion.Copy(TempSalesLineAISuggestion, true); + TempSalesLineSuggestion.Reset(); + TempSalesLineSuggestion.SetRange("Line Style", 'Unfavorable'); + if not TempSalesLineSuggestion.IsEmpty() then + exit(true); + end; + var TempSalesLineAISuggestion: Record "Sales Line AI Suggestions" temporary; GlobalSalesHeader: Record "Sales Header"; diff --git a/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Table.al b/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Table.al index cad8a6533f..12f331f1f4 100644 --- a/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Table.al +++ b/Apps/W1/SalesLinesSuggestions/app/SalesLineAISuggestions.Table.al @@ -64,6 +64,10 @@ table 7275 "Sales Line AI Suggestions" { Caption = 'Source Line Record ID'; } + field(35; "Line Style"; Text[30]) + { + Caption = 'Line Style'; + } field(5407; "Unit of Measure Code"; Code[10]) { Caption = 'Unit of Measure Code'; diff --git a/Apps/W1/SalesLinesSuggestions/app/SalesLinesSuggestionsImpl.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/SalesLinesSuggestionsImpl.Codeunit.al index 2da6b0d708..2fe4759064 100644 --- a/Apps/W1/SalesLinesSuggestions/app/SalesLinesSuggestionsImpl.Codeunit.al +++ b/Apps/W1/SalesLinesSuggestions/app/SalesLinesSuggestionsImpl.Codeunit.al @@ -8,7 +8,7 @@ using System; using System.AI; using System.Telemetry; using System.Environment; -using System.Globalization; +using Microsoft.Sales.Document.Attachment; codeunit 7275 "Sales Lines Suggestions Impl." { @@ -112,7 +112,7 @@ codeunit 7275 "Sales Lines Suggestions Impl." exit; // Generate OpenAI Completion - AzureOpenAI.SetAuthorization(Enum::"AOAI Model Type"::"Chat Completions", AOAIDeployments.GetGPT4Latest()); + AzureOpenAI.SetAuthorization(Enum::"AOAI Model Type"::"Chat Completions", AOAIDeployments.GetGPT4Preview()); AzureOpenAI.SetCopilotCapability(Enum::"Copilot Capability"::"Sales Lines Suggestions"); AOAIChatCompletionParams.SetMaxTokens(MaxTokens()); @@ -161,18 +161,79 @@ codeunit 7275 "Sales Lines Suggestions Impl." exit(CompletionAnswer); end; - procedure CheckSupportedLanguages(): Boolean + [NonDebuggable] + internal procedure AICall(SystemPromptTxt: SecretText; SearchQuery: Text; AOAIFunction: interface "AOAI Function"; var CompletionAnswer: Text): Variant var - LanguageSelection: Record "Language Selection"; - UserSessionSettings: SessionSettings; + AzureOpenAI: Codeunit "Azure OpenAi"; + AOAIDeployments: Codeunit "AOAI Deployments"; + AOAIOperationResponse: Codeunit "AOAI Operation Response"; + AOAIFunctionResponse: Codeunit "AOAI Function Response"; + AOAIChatCompletionParams: Codeunit "AOAI Chat Completion Params"; + AOAIChatMessages: Codeunit "AOAI Chat Messages"; + MagicFunction: Codeunit "Magic Function"; + FeatureTelemetry: Codeunit "Feature Telemetry"; + NotificationManager: Codeunit "Notification Manager"; + FileHandlerResult: Codeunit "File Handler Result"; + FunctionResponseVariant: Variant; + TelemetryCD: Dictionary of [Text, Text]; + StartDateTime: DateTime; + DurationAsBigInt: BigInteger; + EmptyArguments: JsonObject; + ResponseTelemetryErr: Label 'Response error code: %1', Comment = '%1 = Error code', Locked = true; begin - UserSessionSettings.Init(); - LanguageSelection.SetLoadFields("Language Tag"); - LanguageSelection.SetRange("Language ID", UserSessionSettings.LanguageId()); - if LanguageSelection.FindFirst() then - if LanguageSelection."Language Tag".StartsWith('pt-') then - exit(false); - exit(true); + if not AzureOpenAI.IsEnabled(Enum::"Copilot Capability"::"Sales Lines Suggestions") then + exit; + + // Generate OpenAI Completion + AzureOpenAI.SetAuthorization(Enum::"AOAI Model Type"::"Chat Completions", AOAIDeployments.GetGPT4Latest()); + AzureOpenAI.SetCopilotCapability(Enum::"Copilot Capability"::"Sales Lines Suggestions"); + + AOAIChatCompletionParams.SetMaxTokens(MaxTokens()); + AOAIChatCompletionParams.SetTemperature(0); + + AOAIChatMessages.AddTool(MagicFunction); + AOAIChatMessages.AddTool(AOAIFunction); + AOAIChatMessages.SetToolChoice('auto'); + + AOAIChatMessages.SetPrimarySystemMessage(SystemPromptTxt); + AOAIChatMessages.AddUserMessage(SearchQuery); + + StartDateTime := CurrentDateTime(); + AzureOpenAI.GenerateChatCompletion(AOAIChatMessages, AOAIChatCompletionParams, AOAIOperationResponse); + DurationAsBigInt := CurrentDateTime() - StartDateTime; + TelemetryCD.Add('Response time', Format(DurationAsBigInt)); + + if AOAIOperationResponse.IsSuccess() then begin + CompletionAnswer := AOAIOperationResponse.GetResult(); + if AOAIOperationResponse.IsFunctionCall() then begin + AOAIFunctionResponse := AOAIOperationResponse.GetFunctionResponse(); + FeatureTelemetry.LogUsage('0000MZC', GetFeatureName(), 'Call Chat Completion API', TelemetryCD); + + if AOAIFunctionResponse.IsSuccess() then begin + FunctionResponseVariant := AOAIFunctionResponse.GetResult(); + if FunctionResponseVariant.IsCodeunit() then + FileHandlerResult := AOAIFunctionResponse.GetResult() + else begin + MagicFunction.Execute(EmptyArguments); + FeatureTelemetry.LogError('0000N6J', GetFeatureName(), 'Process function_call', 'Function not supported, defaulting to magic_function'); + end; + end else begin + MagicFunction.Execute(EmptyArguments); + FeatureTelemetry.LogError('0000MZ8', GetFeatureName(), 'Process function_call', 'Function not supported, defaulting to magic_function'); + end + end else begin + if AOAIOperationResponse.GetResult() = '' then + FeatureTelemetry.LogError('0000MZ9', GetFeatureName(), 'Call Chat Completion API', 'Completion answer is empty', '', TelemetryCD) + else + FeatureTelemetry.LogError('0000MZA', GetFeatureName(), 'Process function_call', 'function_call not found in the completion answer'); + NotificationManager.SendNotification(ChatCompletionResponseErr); + end; + end else begin + FeatureTelemetry.LogError('0000MZB', GetFeatureName(), 'Call Chat Completion API', StrSubstNo(ResponseTelemetryErr, AOAIOperationResponse.GetStatusCode()), '', TelemetryCD); + NotificationManager.SendNotification(ChatCompletionResponseErr); + end; + + exit(FileHandlerResult); end; procedure RegisterCapability() diff --git a/Apps/W1/SalesLinesSuggestions/app/Search/Search.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/Search/Search.Codeunit.al index 40632f761a..db209c5b0f 100644 --- a/Apps/W1/SalesLinesSuggestions/app/Search/Search.Codeunit.al +++ b/Apps/W1/SalesLinesSuggestions/app/Search/Search.Codeunit.al @@ -62,7 +62,7 @@ codeunit 7282 "Search" //Add ALSearch Options ALSearchOptions := ALSearchOptions.SearchOptions(); ALSearchOptions.IncludeSynonyms := IncludeSynonyms; - ALSearchOptions.UseContextAwareRanking := UseContextAwareRanking; + ALSearchOptions.UseContextAwareRanking := UseContextAwareRanking and (ItemResultsArray.Count() < 10); //Add Search Filters SearchFilter := SearchFilter.SearchFilter(); @@ -82,7 +82,7 @@ codeunit 7282 "Search" ALSearchOptions.AddSearchFilter(SearchFilter); //Add Search Ranking Context - if UseContextAwareRanking then begin + if UseContextAwareRanking and (ItemResultsArray.Count() < 10) then begin ALSearchRankingContext := ALSearchRankingContext.SearchRankingContext(); ALSearchRankingContext.Intent := Intent; ALSearchRankingContext.UserMessage := SearchQuery; @@ -155,15 +155,15 @@ codeunit 7282 "Search" ALSearchQuery := ALSearchQuery.SearchQuery(ItemNameHASH); foreach Keyword in SearchPrimaryKeyWords do - ALSearchQuery.AddRequiredTerm(Keyword); + ALSearchQuery.AddRequiredTerm(Keyword.ToLower()); case SearchStyle of "Search Style"::Precise: foreach Keyword in SearchAdditionalKeyWords do - ALSearchQuery.AddRequiredTerm(Keyword); + ALSearchQuery.AddRequiredTerm(Keyword.ToLower()); else foreach Keyword in SearchAdditionalKeyWords do - ALSearchQuery.AddOptionalTerm(Keyword); + ALSearchQuery.AddOptionalTerm(Keyword.ToLower()); end; case SearchStyle of diff --git a/Apps/W1/SalesLinesSuggestions/app/Utilities/SalesLineUtility.Codeunit.al b/Apps/W1/SalesLinesSuggestions/app/Utilities/SalesLineUtility.Codeunit.al index d96d8420f9..2426f24ab0 100644 --- a/Apps/W1/SalesLinesSuggestions/app/Utilities/SalesLineUtility.Codeunit.al +++ b/Apps/W1/SalesLinesSuggestions/app/Utilities/SalesLineUtility.Codeunit.al @@ -17,7 +17,6 @@ codeunit 7280 "Sales Line Utility" PreparingSalesLineLbl: Label 'Preparing %1 of %2', Comment = '%1 = Counter, %2 = Total Lines'; InsertingSalesLineLbl: Label 'Inserting %1 of %2', Comment = '%1 = Counter, %2 = Total Lines'; CopyingFromBlanketOrderLbl: Label 'Copying from Blanket Order...'; - SalesLineValidationErr: Label 'There was an error while validating the line with No. %1, Description %2.\Error: %3', Comment = '%1 = No., %2 = Description, %3 = Error Message'; SalesLineCopyErr: Label 'There was an error while copying the line with No. %1, Description %2, Quantity %3.', Comment = '%1 = No., %2 = Description, %3 = Quantity'; procedure CopySalesLineToDoc(SalesHeader: Record "Sales Header"; var TempSalesLineAiSuggestion: Record "Sales Line AI Suggestions" temporary) @@ -39,7 +38,8 @@ codeunit 7280 "Sales Line Utility" if IsBlanketOrder(TempSalesLineAiSuggestion) then CreateFromBlanketOrder(SalesHeader, TempSalesLineAiSuggestion, NextLineNo) else begin - PrepareSalesLine(SalesHeader, TempFromSalesLine, TempSalesLineAiSuggestion, NextLineNo); + if PrepareSalesLine(SalesHeader, TempFromSalesLine, TempSalesLineAiSuggestion, NextLineNo) then + exit; CopySalesLineToDoc(SalesHeader, TempFromSalesLine, LinesNotCopied, NextLineNo); end; end; @@ -124,12 +124,13 @@ codeunit 7280 "Sales Line Utility" end; end; - local procedure PrepareSalesLine(SalesHeader: Record "Sales Header"; var TempSalesLine: Record "Sales Line" temporary; var TempSalesLineAiSuggestion: Record "Sales Line AI Suggestions" temporary; LineNo: Integer) + local procedure PrepareSalesLine(SalesHeader: Record "Sales Header"; var TempSalesLine: Record "Sales Line" temporary; var TempSalesLineAiSuggestion: Record "Sales Line AI Suggestions" temporary; LineNo: Integer) HasErrors: Boolean var TempPreparedSalesLine: Record "Sales Line" temporary; PrepareSalesLineForCopying: Codeunit "Prepare Sales Line For Copying"; SalesLineAISuggestionImpl: Codeunit "Sales Lines Suggestions Impl."; FeatureTelemetry: Codeunit "Feature Telemetry"; + NotificationManager: Codeunit "Notification Manager"; ProgressDialog: Dialog; TotalLines: Integer; Counter: Integer; @@ -151,7 +152,10 @@ codeunit 7280 "Sales Line Utility" end else begin FeatureTelemetry.LogError('0000MMM', SalesLineAISuggestionImpl.GetFeatureName(), 'Prepare Sales Lines before inserting', '', GetLastErrorCallStack()); - Error(SalesLineValidationErr, TempSalesLineAiSuggestion."No.", TempSalesLineAiSuggestion.Description, GetLastErrorText()); + NotificationManager.SendNotification(GetLastErrorText()); + TempSalesLineAiSuggestion."Line Style" := 'Unfavorable'; + TempSalesLineAiSuggestion.Modify(); + HasErrors := true; end; until TempSalesLineAiSuggestion.Next() = 0; ProgressDialog.Close(); @@ -163,5 +167,4 @@ codeunit 7280 "Sales Line Utility" ProgressDialog.Open(ProcessingLinesLbl); ProgressDialog.Update(1, ''); end; - } \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/app/app.json b/Apps/W1/SalesLinesSuggestions/app/app.json index 2e447d6c4f..32a681d151 100644 --- a/Apps/W1/SalesLinesSuggestions/app/app.json +++ b/Apps/W1/SalesLinesSuggestions/app/app.json @@ -19,7 +19,7 @@ "idRanges": [ { "from": 7275, - "to": 7291 + "to": 7297 } ], "resourceExposurePolicy": { diff --git a/Apps/W1/SalesLinesSuggestions/test/SaveFileMappingTest.Codeunit.al b/Apps/W1/SalesLinesSuggestions/test/SaveFileMappingTest.Codeunit.al new file mode 100644 index 0000000000..4b97674874 --- /dev/null +++ b/Apps/W1/SalesLinesSuggestions/test/SaveFileMappingTest.Codeunit.al @@ -0,0 +1,146 @@ +namespace Microsoft.Sales.Document.Test; + +using Microsoft.Sales.Document.Attachment; + +codeunit 139788 "Save File Mapping Test" +{ + Subtype = Test; + TestPermissions = Disabled; + + trigger OnRun() + begin + // [FEATURE] [Sales with AI]:[Attachment] + end; + + var + Assert: Codeunit Assert; + + [Test] + procedure SaveToJsonTest() + var + FileHandlerResult: Codeunit "File Handler Result"; + ColumnNames: List of [Text]; + ColumnTypes: List of [Text]; + MappingAsJsonObject: JsonObject; + MappingAsJsonString: Text; + ExpectedJsonStringLbl: Label '{"Column_Delimiter":"$","Product_Column_Index":[20,30,40],"Quantity_Column_Index":60,"UoM_Column_Index":70,"Contains_Header_Row":1,"Column_Names":["Column1","Column2","Column3"],"Column_Types":["Text","Boolean","Random text"]}', Locked = true; + begin + // [FEATURE] [Sales Line From Attachment with AI] + // [SCENARIO] FileHandlerResult can be converted to a jsonobject and saved as a jsonstring. + + // [GIVEN] Create a new file handler result with column delimiter '$', product column indexes 20, 30, 40, quantity column index 60, UoM column index 70, contains header row true, column names and column types + Clear(FileHandlerResult); + FileHandlerResult.SetColumnDelimiter('$'); + FileHandlerResult.AddProductColumnIndex(20); + FileHandlerResult.AddProductColumnIndex(30); + FileHandlerResult.AddProductColumnIndex(40); + FileHandlerResult.SetQuantityColumnIndex(60); + FileHandlerResult.SetUoMColumnIndex(70); + FileHandlerResult.SetContainsHeaderRow(true); + ColumnNames.Add('Column1'); + ColumnNames.Add('Column2'); + ColumnNames.Add('Column3'); + FileHandlerResult.SetColumnNames(ColumnNames); + ColumnTypes.Add('Text'); + ColumnTypes.Add('Boolean'); + ColumnTypes.Add('Random text'); + FileHandlerResult.SetColumnTypes(ColumnTypes); + + // [WHEN] Save the file handler result as a json object + MappingAsJsonObject := FileHandlerResult.ToJson(); + + // [THEN] Check the json object is valid + Assert.IsTrue(MappingAsJsonObject.WriteTo(MappingAsJsonString), 'Mapping Json object is not valid'); + // [THEN] Check the json string is as expected + Assert.AreEqual(ExpectedJsonStringLbl, MappingAsJsonString, 'Mapping Json string is not expected'); + end; + + [Test] + procedure LoadFileHandlerResultFromJsonTest() + var + FileHandlerResult: Codeunit "File Handler Result"; + ExpectedColumnNames: List of [Text]; + ExpectedColumnTypes: List of [Text]; + ExpectedProductColumnIndex: List of [Integer]; + MappingAsJsonObject: JsonObject; + ExpectedJsonStringLbl: Label '{"Column_Delimiter":"$","Product_Column_Index":[20,30,40],"Quantity_Column_Index":60,"UoM_Column_Index":70,"Contains_Header_Row":1,"Column_Names":["Column1","Column2","Column3"],"Column_Types":["Text","Boolean","Random text"]}', Locked = true; + ArrayElementText: Text; + ArrayElementInt: Integer; + begin + // [FEATURE] [Sales Line From Attachment with AI] + // [SCENARIO] FileHandlerResult can be initialized from a jsonobject. + + // [GIVEN] Create a json object from json string + MappingAsJsonObject.ReadFrom(ExpectedJsonStringLbl); + + // [WHEN] Initialize the file handler result from the json object + FileHandlerResult.FromJson(MappingAsJsonObject); + + // [THEN] Properties on the File handler result is as expected + Assert.AreEqual('$', FileHandlerResult.GetColumnDelimiter(), 'Column delimiter is not expected'); + Assert.AreEqual(3, FileHandlerResult.GetProductColumnIndex().Count(), 'Product column indexes are not expected'); + ExpectedProductColumnIndex.Add(20); + ExpectedProductColumnIndex.Add(40); + ExpectedProductColumnIndex.Add(30); + foreach ArrayElementInt in ExpectedProductColumnIndex do + Assert.IsTrue(FileHandlerResult.GetProductColumnIndex().Contains(ArrayElementInt), 'Product column index is not expected'); + Assert.AreEqual(60, FileHandlerResult.GetQuantityColumnIndex(), 'Quantity column index is not expected'); + Assert.AreEqual(70, FileHandlerResult.GetUoMColumnIndex(), 'UoM column index is not expected'); + Assert.AreEqual(true, FileHandlerResult.GetContainsHeaderRow(), 'Contains header row is not expected'); + Assert.AreEqual(3, FileHandlerResult.GetColumnNames().Count(), 'Column names are not expected'); + ExpectedColumnNames.Add('Column1'); + ExpectedColumnNames.Add('Column2'); + ExpectedColumnNames.Add('Column3'); + foreach ArrayElementText in ExpectedColumnNames do + Assert.IsTrue(FileHandlerResult.GetColumnNames().Contains(ArrayElementText), 'Column names are not expected'); + Assert.AreEqual(3, FileHandlerResult.GetColumnTypes().Count(), 'Column types are not expected'); + ExpectedColumnTypes.Add('Text'); + ExpectedColumnTypes.Add('Boolean'); + ExpectedColumnTypes.Add('Random text'); + foreach ArrayElementText in ExpectedColumnTypes do + Assert.IsTrue(FileHandlerResult.GetColumnTypes().Contains(ArrayElementText), 'Column types are not expected'); + end; + + [Test] + procedure MappingCacheManagementTest() + var + MappingCache: Record "Mapping Cache"; + FileHandlerResult: Codeunit "File Handler Result"; + MappingCacheManagement: Codeunit "Mapping Cache Management"; + MappingAsJsonObject: JsonObject; + FileHandlerResultJsonStringLbl: Label '{"Column_Delimiter":"$","Product_Column_Index":[20,30,40],"Quantity_Column_Index":60,"UoM_Column_Index":70,"Contains_Header_Row":1,"Column_Names":["Column1","Column2","Column3"],"Column_Types":["Text","Boolean","Random text"]}', Locked = true; + PartOfFileToSaveLbl: Label 'Column1,Column2,Column3,Column4,Column5', Locked = true; + FileInfoAsHash: Text; + ExpectedMappingAsJsonText: Text; + begin + // [FEATURE] [Sales Line From Attachment with AI] + // [SCENARIO] MappingCacheManagement functions help in saving and restoring the mappings. + + // [GIVEN] Create a hash of the passed text. In the product, it would typically be the text in the first line when header is present + FileInfoAsHash := MappingCacheManagement.GenerateFileHashInHex(PartOfFileToSaveLbl); + if MappingCache.Get(FileInfoAsHash) then // Ensure cache is empty + MappingCache.Delete(); + + // [WHEN] MappingExists method is run in the MappingCacheMapping codeunit. + // [THEN] Mapping should not exist + Assert.IsFalse(MappingCacheManagement.MappingExists(FileInfoAsHash), 'Mapping should not exist'); + + // [WHEN] GetMapping method is run in the MappingCacheMapping codeunit. + // [THEN] Mapping should not exist + Assert.IsFalse(MappingCacheManagement.GetMapping(FileInfoAsHash, ExpectedMappingAsJsonText), 'Mapping should exist'); + + // [GIVEN] Save the file handler result json string to the mapping cache + MappingCacheManagement.SaveMapping(FileInfoAsHash, FileHandlerResultJsonStringLbl); + // [WHEN] MappingExists method is run in the MappingCacheMapping codeunit. + // [THEN] Mapping should exist + Assert.IsTrue(MappingCacheManagement.MappingExists(FileInfoAsHash), 'Mapping should not exist'); + // [WHEN] GetMapping method is run in the MappingCacheMapping codeunit. + // [THEN] Mapping should exist + Assert.IsTrue(MappingCacheManagement.GetMapping(FileInfoAsHash, ExpectedMappingAsJsonText), 'Mapping should exist'); + + // [WHEN] The cache value is loaded to a JsonObject + // [THEN] The JsonObject should be valid + MappingAsJsonObject.ReadFrom(ExpectedMappingAsJsonText); + FileHandlerResult.FromJson(MappingAsJsonObject); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesLinesSuggestions/test/SearchItemTest.Codeunit.al b/Apps/W1/SalesLinesSuggestions/test/SearchItemTest.Codeunit.al index 994658c913..6658e7c55c 100644 --- a/Apps/W1/SalesLinesSuggestions/test/SearchItemTest.Codeunit.al +++ b/Apps/W1/SalesLinesSuggestions/test/SearchItemTest.Codeunit.al @@ -29,6 +29,7 @@ codeunit 139780 "Search Item Test" QuantityIsIncorrectErr: Label 'Quantity is incorrect!'; NeedThreeItemButOneNotExistingLbl: Label 'I need one bike, one table and one Model Took Kit'; NeedItemInNonEnglishLbl: Label 'I need one bicikl.'; + InvalidPrecisionErr: Label 'The value %1 in field %2 is of lesser precision than expected. \\Note: Default rounding precision of %3 is used if a rounding precision is not defined.', Comment = '%1 - decimal value, %2 - field name, %3 - default rounding precision.'; [Test] @@ -703,6 +704,42 @@ codeunit 139780 "Search Item Test" CheckSalesLineContent(SalesHeader."No."); end; + [Test] + [HandlerFunctions('InvokeGenerateAndCheckItemsFound,SendNotificationHandler')] + procedure SalesLineIsNotInsertedIfErrorOccursOnInsertSuggestedLine() + var + SalesHeader: Record "Sales Header"; + Item: Record Item; + SalesLineAISuggestions: Page "Sales Line AI Suggestions"; + UserInput: Text; + Quantity: Text; + begin + // [SCENARIO 507779] If error occurs on insert suggested lines, notification is thrown and lines are not inserted + Initialize(); + + // [GIVEN] Find first Item + Item.FindFirst(); + UpdateRoundingPrecisonForItem(Item); + + // [GIVEN] Create user input + Quantity := '2.5'; + UserInput := GlobalUserInput; + UserInput += Quantity + ' quantity of ' + Item."No." + '; '; + + LibraryVariableStorage.Enqueue(UserInput); + LibraryVariableStorage.Enqueue(1); + EnqueueOneItemAndQty(Item.Description, 2.5); + + LibraryVariableStorage.Enqueue(StrSubstNo(InvalidPrecisionErr, Quantity, 'Quantity', '0.00001')); + + // [WHEN] AI suggestions should generate sales line + // [HANDLER] Show a notification, it is handled in the handler function 'SendNotificationHandler' + CreateNewSalesOrderAndRunSalesLineAISuggestionsPage(SalesHeader, SalesLineAISuggestions); + + // [THEN] No line is inserted in the sales line + CheckSalesLineContent(SalesHeader."No."); + end; + local procedure CreateSalesOrderWithSalesLine(var SalesHeader: Record "Sales Header"; var SalesLine: Record "Sales Line") var Customer: Record Customer; @@ -796,7 +833,7 @@ codeunit 139780 "Search Item Test" LibraryVariableStorage.AssertEmpty(); end; - local procedure EnqueueOneItemAndQty(ItemDesc: Text; Qty: Integer) + local procedure EnqueueOneItemAndQty(ItemDesc: Text; Qty: Decimal) begin LibraryVariableStorage.Enqueue(ItemDesc); LibraryVariableStorage.Enqueue(Qty); @@ -814,6 +851,19 @@ codeunit 139780 "Search Item Test" ExtText := ExtendedTextLine.Text; end; + local procedure UpdateRoundingPrecisonForItem(var Item: Record Item) + var + ItemUnitOfMeasure: Record "Item Unit of Measure"; + begin + ItemUnitOfMeasure.SetRange("Item No.", Item."No."); + ItemUnitOfMeasure.SetRange(Code, Item."Base Unit of Measure"); + if ItemUnitOfMeasure.FindSet() then + repeat + ItemUnitOfMeasure."Qty. Rounding Precision" := 1; + ItemUnitOfMeasure.Modify(); + until ItemUnitOfMeasure.Next() = 0; + end; + [ModalPageHandler] procedure InvokeGenerateAndNoItemFound(var SalesLineAISuggestions: TestPage "Sales Line AI Suggestions") begin @@ -827,7 +877,7 @@ codeunit 139780 "Search Item Test" procedure InvokeGenerateAndCheckItemsFound(var SalesLineAISuggestions: TestPage "Sales Line AI Suggestions") var ItemCount: Integer; - quantityInSalesLineSub: Integer; + quantityInSalesLineSub: Decimal; i: Integer; begin // Description for this queue: @@ -842,7 +892,7 @@ codeunit 139780 "Search Item Test" for i := 1 to ItemCount do begin Assert.AreEqual(LibraryVariableStorage.DequeueText(), SalesLineAISuggestions.SalesLinesSub.Description.Value(), DescriptionIsIncorrectErr); Evaluate(quantityInSalesLineSub, SalesLineAISuggestions.SalesLinesSub.Quantity.Value()); - Assert.AreEqual(LibraryVariableStorage.DequeueInteger(), quantityInSalesLineSub, QuantityIsIncorrectErr); + Assert.AreEqual(LibraryVariableStorage.DequeueDecimal(), quantityInSalesLineSub, QuantityIsIncorrectErr); SalesLineAISuggestions.SalesLinesSub.Next(); end; SalesLineAISuggestions.OK.Invoke(); diff --git a/Apps/W1/SalesLinesSuggestions/test/app.json b/Apps/W1/SalesLinesSuggestions/test/app.json index 63af9ec0fb..1097f3a873 100644 --- a/Apps/W1/SalesLinesSuggestions/test/app.json +++ b/Apps/W1/SalesLinesSuggestions/test/app.json @@ -36,7 +36,7 @@ "idRanges": [ { "from": 139780, - "to": 139787 + "to": 139788 } ], "runtime": "13.0", diff --git a/Apps/W1/SalesOrderTakingAgent/app/ExtensionLogo.png b/Apps/W1/SalesOrderTakingAgent/app/ExtensionLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..f53be3156b9b6164dfc7e90c0043ef0bdd1ddc9f GIT binary patch literal 2408 zcmaJ@c~lc=67K|p5CM&Hh(I_L0nu<|89=~9xraqA<(MS{ivlY?b-2+CB*75y3?3sQ z4q+7pQ4R$~%#sfAfZ-e!L0mcv0RYem@b?Y_02D%^08I^KiAk+aL>8?d{G-zVVD&oHi+VAdD?@l21H5y%O3qs%KE8bD!`EEZw++`UO;#&;JgV~>&KV$zfB~>T2tY>zdO$e< zU;rC{jQWyAA8s)N4n#Ru;Zn?SNf&v#i)!?ImM9Wfn~MPi^#EC_4`_mDdO|@giaZK| z5kNyfyg2HMqQiD78HeV!7td;zCdit!vk<#b+QYs2P1Gyg^CL<*yYS&j9yK+N30{WX z)ogHzUB8jX1Rq78@CG*wG=`V<cZQ@3S7pbl9 zfz=OCITl1;X(u1_!zz2H9;okhe~5hluts_O2@IxlfA;m3>XV;Bef`gBj-{uBARCHW z0>xZrU%y&5J5i1}J}wX$C~CRW=vo&f2>iV#4qS!7ZH)V-`G}#L#+#jgL@V`g|JIv< zf+B%-NB^DIwcN4!v8akQ7aFS<3H6zJ2!g18Nn^h^Y`CFv5GI|R_oN4sUv_xP+;bMK z=FL8(Z^UJt7KPd%LFj{<14!~|P@s%KmlnFR3updu!amFI-!Lfr1-+`{aJ*E6H-DV9 zknuLyIhS47_0;3^c+_JsS>g6xImca}1Ss+5vlVI;bF4UBR1c5PaK)WNZERjgo>xW4P%XdaA9Q9!7$MAmqA7IMx*0F|Zuo2{%^7{2Tko5XGX=6q{; zl~DJCHDsuGL!h@X!S3mtDXMpjk7z*v&cJ4Kk@S(uR#9`6{LS}IjC041U21W475&eH zrgDd)toR_O>~UY~nZg3}Am+E`8$TR@IBg&0=@k(B2|Srg!zXGIHqlt-@q65{lSYdB zXd4%@Q?X>H_mq$GW9_yehG?(y+-@W_R3>RU{m}Xxm!4CPc%Ka(69Q^3SZcW6|a6AB3t{jt{imO~$i#$oi~8l3C?tE0DIBn79lul`ZPavnAxn@#Y{d zlF`#{CI6I0;!+F)%T^H<8!pVdW7*qfM`xa;X~4V_p4;N1mo1B+nTjVy-wvt5sn0it z`eKHu&c~(16U6_#y4?Y~MkOLivZF`pX0BhFUgk1kku^svJv5PJuF9Sr-9=YI=}rg_ zRt$C00>`P|GNUD;I?kwX1^n~2UM$VHlH=$QQ(@=qQDB2oXA)FNI|+N0MFUt z9h_z?9-eZdYCanZb?r_>?y_`>FTJ)w@v-VbvXS|_L`_{`=oR;$Y-Nqx=_8Eu`U?Af zIz_2n1)Fx>Lk@X6B`g$fwAXkyqB~vN=J9TK5u_(4SVmxSgw}SoFE1-p&W0!?S zLPjZcvvM#gIEq+iBNs{JOpj%f(s&+kK97F}Yx*Uo4KqHqqaQg(r4%)Px9T2C zLG0uZe@kc2+9p-0N{6g}9qks-GW8%Dfl+W+>vy7jHIsH36OwpvE+wBdE%r!A(qz&; zVv4v;S%!)NCWn$qQL^X7z2RbuN&)yD-9Z^HZM-!Zt<&7q+nSM8Qg8{Yv|MeTg{=~qda4zeCzW;oFZU06H1_%Y+ERLai;WG(RV6I5KGgyYB)LKsV;s?C(SyQ)cq54P z$pG&O)z<+Md&Zge^jfCbO#*!|aNO3i?gIYhf{n~4xXtts2CiH8x^{YQoyJ5zd+NLE zRO(heKF_M?{w+Ug6|uYNAy|gaZd6|uFIEJ3vIV4;jA0#L*F1EGNp`>GqD7?*P?Lo# zS!3&i3TYiFxO5$;9-ET8HL1Uv8NR0T|C7a^OZ_p8d^xzN=q;Z}OV)&j TThioJs%?PJ9`Cx{ae4m*g9kO? literal 0 HcmV?d00001 diff --git a/Apps/W1/SalesOrderTakingAgent/app/app.json b/Apps/W1/SalesOrderTakingAgent/app/app.json new file mode 100644 index 0000000000..844251aea2 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/app.json @@ -0,0 +1,24 @@ +{ + "id": "23b1772f-b8b8-4e87-9339-9ff7cbb2364b", + "name": "Sales Order Taker Agent", + "publisher": "Microsoft", + "brief": "The Sales Order Taker agent is handling the end-to-end sales order capturing process.", + "description": "Sales Order Taker agent handles the end-to-end sales order capturing process, from taking the customer’s order by e-mail, preparing the quote with requested items, checking the availability of the items, sending the quote to the customer for approval, and finally converting the quote to a sales order upon receiving customer confirmation.", + "version": "25.0.0.0", + "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724009", + "EULA": "https://go.microsoft.com/fwlink/?LinkId=847985", + "help": "https://go.microsoft.com/fwlink/?LinkId=849257", + "url": "https://go.microsoft.com/fwlink/?LinkId=724011", + "contextSensitiveHelpUrl": "https://go.microsoft.com/fwlink/?LinkId=849257", + "logo": "ExtensionLogo.png", + "application": "25.0.0.0", + "screenshots": [], + "platform": "25.0.0.0", + "target": "OnPrem", + "idRanges": [{"from": 3000, "to": 5000}], + "propagateDependencies": true, + "features": [ + "TranslationFile", + "NoImplicitWith" + ] +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentAccessControl.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentAccessControl.Page.al new file mode 100644 index 0000000000..493f1990c1 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentAccessControl.Page.al @@ -0,0 +1,132 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +using System.Security.AccessControl; + +page 4320 "Agent Access Control" +{ + PageType = ListPart; + ApplicationArea = All; + SourceTable = "Agent Access Control"; + Caption = 'Agent Access Control'; + MultipleNewLines = false; + Extensible = false; + + layout + { + area(Content) + { + repeater(Main) + { + field(UserName; UserName) + { + Caption = 'User Name'; + ToolTip = 'Specifies the name of the User that can access the agent.'; + TableRelation = User; + + trigger OnValidate() + begin + ValidateUserName(UserName); + end; + } + field(UserFullName; UserFullName) + { + Caption = 'User Full Name'; + ToolTip = 'Specifies the Full Name of the User that can access the agent.'; + Editable = false; + } + field(Access; Rec.Access) + { + Caption = 'Access'; + Tooltip = 'Specifies the access level for the user for this agent.'; + + trigger OnValidate() + var + AgentImpl: Codeunit "Agent Impl."; + begin + if Rec.Access = Rec.Access::User then + AgentImpl.EnsureOwnerExists(Rec); + end; + } + } + } + } + + trigger OnAfterGetRecord() + begin + UpdateGlobalVariables(); + end; + + trigger OnAfterGetCurrRecord() + begin + UpdateGlobalVariables(); + end; + + trigger OnDeleteRecord(): Boolean + var + AgentImpl: Codeunit "Agent Impl."; + begin + AgentImpl.EnsureOwnerExists(Rec); + end; + + local procedure ValidateUserName(NewUserName: Text) + var + User: Record "User"; + UserGuid: Guid; + begin + if Evaluate(UserGuid, NewUserName) then begin + User.Get(UserGuid); + UpdateUser(User."User Security ID"); + UpdateGlobalVariables(); + exit; + end; + + User.SetRange("User Name", NewUserName); + if not User.FindFirst() then begin + User.SetFilter("User Name", '@*''''' + NewUserName + '''''*'); + User.FindFirst(); + end; + + UpdateUser(User."User Security ID"); + UpdateGlobalVariables(); + end; + + local procedure UpdateUser(NewUserID: Guid) + var + RecordExists: Boolean; + begin + RecordExists := Rec.Find(); + + if RecordExists then + Error(CannotUpdateUserErr); + + Rec."User Security ID" := NewUserID; + Rec.Insert(true); + end; + + local procedure UpdateGlobalVariables() + var + User: Record "User"; + begin + Clear(UserFullName); + Clear(UserName); + + if IsNullGuid(Rec."User Security ID") then + exit; + + if not User.Get(Rec."User Security ID") then + exit; + + UserName := User."User Name"; + UserFullName := User."Full Name"; + end; + + var + UserFullName: Text[80]; + UserName: Code[50]; + CannotUpdateUserErr: Label 'You cannot change the User. Delete and create the entry again.'; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentCard.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentCard.Page.al new file mode 100644 index 0000000000..154b55f42a --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentCard.Page.al @@ -0,0 +1,223 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +using System.Security.User; +using System.Environment.Configuration; + +page 4315 "Agent Card" +{ + PageType = Card; + ApplicationArea = All; + SourceTable = Agent; + Caption = 'Agent Card'; + RefreshOnActivate = true; + DataCaptionExpression = Rec."User Name"; + Extensible = false; + + layout + { + area(Content) + { + group(General) + { + Caption = 'General'; + + field(UserName; Rec."User Name") + { + ShowMandatory = true; + ApplicationArea = Basic, Suite; + Caption = 'User Name'; + Tooltip = 'Specifies the name of the user that is associated with the agent.'; + Editable = ControlsEditable; + + trigger OnValidate() + begin + CurrPage.Update(false); + end; + } + + field(DisplayName; Rec."Display Name") + { + ShowMandatory = true; + ApplicationArea = Basic, Suite; + Caption = 'Display Name'; + Tooltip = 'Specifies the display name of the user that is associated with the agent.'; + Editable = ControlsEditable; + } + group(UserSettingsGroup) + { + ShowCaption = false; + field(AgentProfile; ProfileDisplayName) + { + ApplicationArea = Basic, Suite; + Caption = 'Profile'; + ToolTip = 'Specifies the profile that is associated with the agent.'; + Editable = false; + + trigger OnAssistEdit() + var + AgentImpl: Codeunit "Agent Impl."; + begin + if AgentImpl.ProfileLookup(UserSettingsRecord) then + AgentImpl.UpdateAgentUserSettings(UserSettingsRecord); + end; + } + } + field(State; Rec.State) + { + ApplicationArea = Basic, Suite; + Importance = Standard; + Caption = 'State'; + ToolTip = 'Specifies if the agent is enabled or disabled.'; + trigger OnValidate() + begin + UpdateControls(); + end; + } + } + group(InstructionsGroup) + { + Caption = 'Instructions'; + Visible = Rec."Setup Page ID" = 0; + Enabled = AgentRecordExists; + field(Instructions; InstructionsTxt) + { + ApplicationArea = All; + Caption = 'Instructions'; + ShowCaption = false; + ExtendedDatatype = RichContent; + MultiLine = true; + Editable = ControlsEditable; + ToolTip = 'Specifies the instructions for the agent.'; + + trigger OnValidate() + var + AgentImpl: Codeunit "Agent Impl."; + begin + AgentImpl.SetInstructions(Rec, InstructionsTxt); + end; + } + } + part(Permissions; "User Subform") + { + ApplicationArea = Basic, Suite; + Caption = 'Agent Permission Sets'; + Enabled = AgentRecordExists; + Editable = ControlsEditable; + SubPageLink = "User Security ID" = field("User Security ID"); + } + part(UserAccess; "Agent Access Control") + { + Enabled = AgentRecordExists; + ApplicationArea = Basic, Suite; + Caption = 'User Access'; + SubPageLink = "Agent User Security ID" = field("User Security ID"); + } + } + } + actions + { + area(Navigation) + { + action(UserSettingsAction) + { + ApplicationArea = Basic, Suite; + Caption = 'User Settings'; + ToolTip = 'Set up the profile and regional settings for the agent.'; + Image = SetupLines; + + trigger OnAction() + var + UserSettings: Codeunit "User Settings"; + begin + Rec.TestField("User Security ID"); + UserSettings.GetUserSettings(Rec."User Security ID", UserSettingsRecord); + Commit(); + Page.RunModal(Page::"User Settings", UserSettingsRecord); + end; + } + action(AgentTasks) + { + ApplicationArea = All; + Caption = 'Agent Tasks'; + ToolTip = 'View agent tasks'; + Image = Log; + + trigger OnAction() + var + AgentTask: Record "Agent Task"; + begin + AgentTask.SetRange("Agent User Security ID", Rec."User Security ID"); + Page.Run(Page::"Agent Task List", AgentTask); + end; + } + } + area(Promoted) + { + group(Category_Process) + { + actionref(UserSettings_Promoted; UserSettingsAction) + { + } + actionref(AgentTasks_Promoted; AgentTasks) + { + } + } + } + } + + local procedure UpdateControls() + var + AgentImpl: Codeunit "Agent Impl."; + UserSettings: Codeunit "User Settings"; + begin + AgentRecordExists := true; + if IsNullGuid(Rec."User Security ID") then + AgentRecordExists := false; + ControlsEditable := Rec.State = Rec.State::Disabled; + ShowEnableWarning := ''; + if CurrPage.Editable and (Rec.State = Rec.State::Enabled) then + ShowEnableWarning := EnabledWarningTok; + + InstructionsTxt := AgentImpl.GetInstructions(Rec); + + if not IsNullGuid(Rec."User Security ID") then begin + UserSettings.GetUserSettings(Rec."User Security ID", UserSettingsRecord); + ProfileDisplayName := AgentImpl.GetProfileName(UserSettingsRecord.Scope, UserSettingsRecord."App ID", UserSettingsRecord."Profile ID"); + end; + end; + + trigger OnAfterGetCurrRecord() + begin + UpdateControls(); + end; + + trigger OnNewRecord(BelowxRec: Boolean) + begin + Rec.State := Rec.State::Disabled; + InstructionsTxt := ''; + end; + + trigger OnInsertRecord(BelowxRec: Boolean): Boolean + var + AgentImpl: Codeunit "Agent Impl."; + begin + Rec.Insert(true); + AgentImpl.InsertCurrentOwnerIfNoOwnersDefined(Rec); + CurrPage.Update(false); + exit(false); + end; + + var + UserSettingsRecord: Record "User Settings"; + EnabledWarningTok: Label 'You must set the State field to Disabled before you can make changes to this app.'; + ControlsEditable: Boolean; + ShowEnableWarning: Text; + AgentRecordExists: Boolean; + InstructionsTxt: Text; + ProfileDisplayName: Text; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentImpl.Codeunit.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentImpl.Codeunit.al new file mode 100644 index 0000000000..eaec867303 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentImpl.Codeunit.al @@ -0,0 +1,158 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +using System.Environment.Configuration; +using System.Reflection; +using System.Environment; +using System.Security.AccessControl; + +codeunit 4301 "Agent Impl." +{ + Access = Internal; + Permissions = tabledata "All Profile" = r, + tabledata Company = r, + tabledata "Application User Settings" = rim, + tabledata User = r, + tabledata "User Personalization" = rim; + + internal procedure SetInstructions(var Agent: Record Agent; Instructions: Text) + var + InstructionsOutStream: OutStream; + begin + Clear(Agent.Instructions); + Agent.Instructions.CreateOutStream(InstructionsOutStream, GetDefaultEncoding()); + InstructionsOutStream.Write(Instructions); + Agent.Modify(true); + end; + + internal procedure GetInstructions(var Agent: Record Agent): Text + var + InstructionsInStream: InStream; + InstructionsText: Text; + begin + if IsNullGuid(Agent."User Security ID") then + exit; + + Agent.CalcFields(Instructions); + if not Agent.Instructions.HasValue() then + exit(''); + + Agent.Instructions.CreateInStream(InstructionsInStream, GetDefaultEncoding()); + InstructionsInStream.Read(InstructionsText); + exit(InstructionsText); + end; + + internal procedure InsertCurrentOwnerIfNoOwnersDefined(var Agent: Record Agent) + var + AgentAccessControl: Record "Agent Access Control"; + begin + SetOwnerFilters(AgentAccessControl); + AgentAccessControl.SetRange("Agent User Security ID", Agent."User Security ID"); + if not AgentAccessControl.IsEmpty() then + exit; + + AgentAccessControl.Access := AgentAccessControl.Access::UserAndOwner; + AgentAccessControl."Agent User Security ID" := Agent."User Security ID"; + AgentAccessControl."User Security ID" := UserSecurityId(); + AgentAccessControl.Insert(); + end; + + internal procedure EnsureOwnerExists(AgentAccessControlModified: Record "Agent Access Control") + var + ExistingAgentAccessControl: Record "Agent Access Control"; + begin + if (AgentAccessControlModified.Access = ExistingAgentAccessControl.Access::Owner) or (AgentAccessControlModified.Access = ExistingAgentAccessControl.Access::UserAndOwner) then + exit; + + SetOwnerFilters(ExistingAgentAccessControl); + ExistingAgentAccessControl.SetFilter("User Security ID", '<>%1', AgentAccessControlModified."User Security ID"); + ExistingAgentAccessControl.SetRange("Agent User Security ID", AgentAccessControlModified."Agent User Security ID"); + + if ExistingAgentAccessControl.IsEmpty() then + Error(OneOwnerMustBeDefinedForAgentErr); + end; + + # Region TODO: Update System App signatures to use the codeunit 9175 "User Settings Impl." + internal procedure UpdateAgentUserSettings(NewUserSettings: Record "User Settings") + var + UserPersonalization: Record "User Personalization"; + begin + UserPersonalization.Get(NewUserSettings."User Security ID"); + + UserPersonalization."Language ID" := NewUserSettings."Language ID"; + UserPersonalization."Locale ID" := NewUserSettings."Locale ID"; + UserPersonalization.Company := NewUserSettings.Company; + UserPersonalization."Time Zone" := NewUserSettings."Time Zone"; + UserPersonalization."Profile ID" := NewUserSettings."Profile ID"; +#pragma warning disable AL0432 // All profiles are now in the tenant scope + UserPersonalization.Scope := NewUserSettings.Scope; +#pragma warning restore AL0432 + UserPersonalization."App ID" := NewUserSettings."App ID"; + UserPersonalization.Modify(); + end; + + procedure ProfileLookup(var UserSettingsRec: Record "User Settings"): Boolean + var + TempAllProfile: Record "All Profile" temporary; + begin + PopulateProfiles(TempAllProfile); + + if TempAllProfile.Get(UserSettingsRec.Scope, UserSettingsRec."App ID", UserSettingsRec."Profile ID") then; + if Page.RunModal(Page::Roles, TempAllProfile) = Action::LookupOK then begin + UserSettingsRec."Profile ID" := TempAllProfile."Profile ID"; + UserSettingsRec."App ID" := TempAllProfile."App ID"; + UserSettingsRec.Scope := TempAllProfile.Scope; + exit(true); + end; + exit(false); + end; + + procedure PopulateProfiles(var TempAllProfile: Record "All Profile" temporary) + var + AllProfile: Record "All Profile"; + DescriptionFilterTxt: Label 'Navigation menu only.'; + UserCreatedAppNameTxt: Label '(User-created)'; + begin + TempAllProfile.Reset(); + TempAllProfile.DeleteAll(); + AllProfile.SetRange(Enabled, true); + AllProfile.SetFilter(Description, '<> %1', DescriptionFilterTxt); + if AllProfile.FindSet() then + repeat + TempAllProfile := AllProfile; + if IsNullGuid(TempAllProfile."App ID") then + TempAllProfile."App Name" := UserCreatedAppNameTxt; + TempAllProfile.Insert(); + until AllProfile.Next() = 0; + end; + + procedure GetProfileName(Scope: Option System,Tenant; AppID: Guid; ProfileID: Code[30]) ProfileName: Text + var + AllProfile: Record "All Profile"; + begin + // If current profile has been changed, then find it and update the description; else, get the default + if not AllProfile.Get(Scope, AppID, ProfileID) then + exit; + + ProfileName := AllProfile.Caption; + end; + #endregion + + local procedure SetOwnerFilters(var AgentAccessControl: Record "Agent Access Control") + begin + AgentAccessControl.SetFilter(Access, '%1|%2', AgentAccessControl.Access::Owner, AgentAccessControl.Access::UserAndOwner); + end; + + local procedure GetDefaultEncoding(): TextEncoding + begin + exit(TextEncoding::UTF8); + end; + + var + OneOwnerMustBeDefinedForAgentErr: Label 'One owner must be defined for the agent.'; + +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentList.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentList.Page.al new file mode 100644 index 0000000000..6c1ddf682a --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/AgentSetup/AgentList.Page.al @@ -0,0 +1,72 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +page 4316 "Agent List" +{ + PageType = List; + ApplicationArea = All; + UsageCategory = Administration; + SourceTable = "Agent"; + Caption = 'Agents'; + CardPageId = "Agent Card"; + AdditionalSearchTerms = 'Agent, Agents, Copilot, Automation, AI'; + Extensible = false; + + layout + { + area(Content) + { + repeater(Main) + { + Editable = false; + + field(UserName; Rec."User Name") + { + Caption = 'User Name'; + } + field(DisplayName; Rec."Display Name") + { + Caption = 'Display Name'; + } + field(State; Rec.State) + { + Caption = 'State'; + } + } + } + } + actions + { + area(Processing) + { + action(AgentTasks) + { + ApplicationArea = All; + Caption = 'Agent Tasks'; + ToolTip = 'View agent tasks'; + Image = Log; + + trigger OnAction() + var + AgentTask: Record "Agent Task"; + begin + AgentTask.SetRange("Agent User Security ID", Rec."User Security ID"); + Page.Run(Page::"Agent Task List", AgentTask); + end; + } + } + area(Promoted) + { + group(Category_Process) + { + actionref(AgentTasks_Promoted; AgentTasks) + { + } + } + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentMonitoringImpl.Codeunit.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentMonitoringImpl.Codeunit.al new file mode 100644 index 0000000000..99088bd66f --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentMonitoringImpl.Codeunit.al @@ -0,0 +1,163 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +codeunit 4300 "Agent Monitoring Impl." +{ + Access = Internal; + + internal procedure GetMessageText(var AgentTaskMessage: Record "Agent Task Message"): Text + var + ContentInStream: InStream; + ContentText: Text; + begin + AgentTaskMessage.CalcFields(Content); + AgentTaskMessage.Content.CreateInStream(ContentInStream, GetDefaultEncoding()); + ContentInStream.Read(ContentText); + exit(ContentText); + end; + + internal procedure IsMessageEditable(var AgentTaskMessage: Record "Agent Task Message"): Boolean + begin + if AgentTaskMessage.Type <> AgentTaskMessage.Type::Output then + exit(false); + + exit(AgentTaskMessage.Status = AgentTaskMessage.Status::Draft); + end; + + internal procedure SetMessageText(var AgentTaskMessage: Record "Agent Task Message"; MessageText: Text) + var + ContentOutStream: OutStream; + begin + Clear(AgentTaskMessage.Content); + AgentTaskMessage.Content.CreateOutStream(ContentOutStream, GetDefaultEncoding()); + ContentOutStream.Write(MessageText); + AgentTaskMessage.Modify(true); + end; + + internal procedure GetStepsDoneCount(var AgentTask: Record "Agent Task"): Integer + var + AgentTaskStep: Record "Agent Task Step"; + begin + AgentTaskStep.SetRange("Task ID", AgentTask."ID"); + AgentTaskStep.ReadIsolation := IsolationLevel::ReadCommitted; + exit(AgentTaskStep.Count()); + end; + + internal procedure GetDetailsForAgentTaskStep(var AgentTaskStep: Record "Agent Task Step"): Text + var + ContentInStream: InStream; + ContentText: Text; + begin + AgentTaskStep.CalcFields(Details); + AgentTaskStep.Details.CreateInStream(ContentInStream, GetDefaultEncoding()); + ContentInStream.Read(ContentText); + exit(ContentText); + end; + + internal procedure ShowTaskSteps(var AgentTask: Record "Agent Task") + var + AgentTaskStep: Record "Agent Task Step"; + begin + AgentTaskStep.SetRange("Task ID", AgentTask.ID); + Page.Run(Page::"Agent Task Step List", AgentTaskStep); + end; + + internal procedure CreateTaskMessage(MessageText: Text; var CurrentAgentTask: Record "Agent Task") + var + AgentTask: Record "Agent Task"; + AgentTaskMessage: Record "Agent Task Message"; + begin + if MessageText = '' then + Error(MessageTextMustBeProvidedErr); + + if not AgentTask.Get(CurrentAgentTask.RecordId) then begin + AgentTask."Agent User Security ID" := CurrentAgentTask."Agent User Security ID"; + AgentTask."Created By" := UserSecurityId(); + AgentTask.Status := AgentTask.Status::Stopped; + AgentTask.Insert(); + end; + + AgentTaskMessage."Task ID" := AgentTask.ID; + AgentTaskMessage."Type" := AgentTaskMessage."Type"::Input; + AgentTaskMessage.Insert(); + + SetMessageText(AgentTaskMessage, MessageText); + + AgentTask.Status := AgentTask.Status::Ready; + AgentTask.Modify(true); + end; + + internal procedure CreateUserInterventionTaskStep(TaskID: BigInteger; UserInput: Text) + var + AgentTask: Record "Agent Task"; + AgentTaskStep: Record "Agent Task Step"; + DetailsOutStream: OutStream; + DetailsJson: JsonObject; + begin + + AgentTask.Get(TaskID); + + AgentTaskStep."Task ID" := AgentTask.ID; + AgentTaskStep."Type" := AgentTaskStep."Type"::"User Intervention"; + AgentTaskStep.Description := 'User intervention'; + if (UserInput <> '') then begin + DetailsJson.Add('userInput', UserInput); + AgentTaskStep.CalcFields(Details); + Clear(AgentTaskStep.Details); + AgentTaskStep.Details.CreateOutStream(DetailsOutStream, GetDefaultEncoding()); + DetailsJson.WriteTo(DetailsOutStream); + end; + AgentTaskStep.Insert(); + + AgentTask.Status := AgentTask.Status::Ready; + AgentTask.Modify(true); + end; + + internal procedure StopTask(var AgentTask: Record "Agent Task") + begin + if not Confirm(AreYouSureThatYouWantToStopTheTaskQst) then + exit; + + AgentTask.Status := AgentTask.Status::Stopped; + AgentTask.Modify(true); + end; + + internal procedure RestartTask(var AgentTask: Record "Agent Task") + begin + if not Confirm(AreYouSureThatYouWantToRestartTheTaskQst) then + exit; + + AgentTask.Status := AgentTask.Status::Ready; + AgentTask.Modify(true); + end; + + internal procedure SelectAgent(var Agent: Record "Agent") + begin + Agent.SetRange(State, Agent.State::Enabled); + if Agent.Count() = 0 then + Error(NoActiveAgentsErr); + + if Agent.Count() = 1 then begin + Agent.FindFirst(); + exit; + end; + + if not (Page.RunModal(Page::"Agent List", Agent) in [Action::LookupOK, Action::OK]) then + Error(''); + end; + + local procedure GetDefaultEncoding(): TextEncoding + begin + exit(TextEncoding::UTF8); + end; + + var + MessageTextMustBeProvidedErr: Label 'You must provide a message text.'; + AreYouSureThatYouWantToRestartTheTaskQst: Label 'Are you sure that you want to restart the task?'; + AreYouSureThatYouWantToStopTheTaskQst: Label 'Are you sure that you want to stop the task?'; + NoActiveAgentsErr: Label 'There are no active agents setup on the system.'; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentNewTaskMessage.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentNewTaskMessage.Page.al new file mode 100644 index 0000000000..71dedb7d46 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentNewTaskMessage.Page.al @@ -0,0 +1,53 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +page 4302 "Agent New Task Message" +{ + PageType = StandardDialog; + ApplicationArea = All; + UsageCategory = Administration; + Caption = 'Create message'; + DataCaptionExpression = ''; + + layout + { + area(Content) + { + group(Message) + { + ShowCaption = false; + field(MessageText; MessageText) + { + Caption = 'Message Text'; + ToolTip = 'Specifies the text of the message.'; + MultiLine = true; + ExtendedDatatype = RichContent; + } + } + } + } + + trigger OnQueryClosePage(CloseAction: Action): Boolean + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + if not (CloseAction in [Action::Ok, Action::LookupOK, Action::Yes]) then + exit(true); + + AgentMonitoringImpl.CreateTaskMessage(MessageText, AgentTask); + exit(true); + end; + + procedure SetAgentTask(var NewAgentTask: Record "Agent Task") + begin + AgentTask.Copy(NewAgentTask); + end; + + var + AgentTask: Record "Agent Task"; + MessageText: Text; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskList.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskList.Page.al new file mode 100644 index 0000000000..08b73192d2 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskList.Page.al @@ -0,0 +1,238 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +page 4300 "Agent Task List" +{ + PageType = List; + ApplicationArea = All; + UsageCategory = Administration; + SourceTable = "Agent Task"; + Caption = 'Agent Tasks'; + InsertAllowed = false; + ModifyAllowed = false; + DeleteAllowed = false; + AdditionalSearchTerms = 'Agent Tasks, Agent Task, Agent, Agent Log, Agent Logs'; + Extensible = false; + + layout + { + area(Content) + { + repeater(AgentConversations) + { + field(LastStepTimestamp; Rec."Last Step Timestamp") + { + Caption = 'Last Updated'; + } + field(LastStepNumber; Rec."Last Step Number") + { + } + field(Status; Rec.Status) + { + Caption = 'Status'; + ToolTip = 'Specifies the status of the agent task.'; + } + field(CreatedAt; Rec.SystemCreatedAt) + { + Caption = 'Created at'; + ToolTip = 'Specifies the date and time when the agent task was created.'; + } + field(ID; Rec.ID) + { + Caption = 'ID'; + trigger OnDrillDown() + begin + ShowTaskMessages(); + end; + } + field(NumberOfStepsDone; NumberOfStepsDone) + { + Caption = 'Steps Done'; + ToolTip = 'Specifies the number of steps that have been done for the specific task.'; + + trigger OnDrillDown() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + AgentMonitoringImpl.ShowTaskSteps(Rec); + end; + } + field("Created By"; Rec."Created By Full Name") + { + Caption = 'Created by'; + Tooltip = 'Specifies the full name of the user that created the agent task.'; + } + field("Agent Display Name"; Rec."Agent Display Name") + { + Caption = 'Agent'; + ToolTip = 'Specifies the agent that is associated with the task.'; + } + field(CreatedByID; Rec."Created By") + { + Visible = false; + } + field(AgentUserSecurityID; Rec."Agent User Security ID") + { + Visible = false; + } + } + } + } + actions + { + area(Processing) + { + action(CreateTask) + { + ApplicationArea = All; + Caption = 'Create task'; + ToolTip = 'Create a new task.'; + Image = New; + + trigger OnAction() + var + Agent: Record Agent; + NewAgentTask: Record "Agent Task"; + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + AgentNewTask: Page "Agent New Task Message"; + begin + if Rec.GetFilter("Agent User Security ID") <> '' then begin + Agent.SetRange("User Security ID", Rec.GetFilter("Agent User Security ID")); + Agent.FindFirst(); + end else + AgentMonitoringImpl.SelectAgent(Agent); + + NewAgentTask."Agent User Security ID" := Agent."User Security ID"; + AgentNewTask.SetAgentTask(NewAgentTask); + AgentNewTask.RunModal(); + CurrPage.Update(false); + end; + } + action(ViewTaskMessage) + { + ApplicationArea = All; + Caption = 'View messages'; + ToolTip = 'Show messages for the selected task.'; + Image = ShowList; + + trigger OnAction() + begin + ShowTaskMessages(); + end; + } + action(ViewTaskSteps) + { + ApplicationArea = All; + Caption = 'View steps'; + ToolTip = 'Show steps for the selected task.'; + Image = TaskList; + + trigger OnAction() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + AgentMonitoringImpl.ShowTaskSteps(Rec); + end; + } + action(Stop) + { + ApplicationArea = All; + Caption = 'Stop'; + ToolTip = 'Stop the selected task.'; + Image = Stop; + + trigger OnAction() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + AgentMonitoringImpl.StopTask(Rec); + CurrPage.Update(false); + end; + } + action(Restart) + { + ApplicationArea = All; + Caption = 'Restart'; + ToolTip = 'Restart the selected task.'; + Image = Restore; + + trigger OnAction() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + AgentMonitoringImpl.RestartTask(Rec); + CurrPage.Update(false); + end; + } + action(UserIntervention) + { + ApplicationArea = All; + Caption = 'User Intervention'; + ToolTip = 'Provide the required user intervention.'; + Image = Restore; + Enabled = UserInterventionEnabled; + + trigger OnAction() + var + UserInterventionRequestStep: Record "Agent Task Step"; + AgentUserIntervention: Page "Agent User Intervention"; + begin + Rec.CalcFields("Last Step Number"); + UserInterventionRequestStep.Get(Rec.ID, Rec."Last Step Number"); + AgentUserIntervention.SetUserInterventionRequestStep(UserInterventionRequestStep); + AgentUserIntervention.RunModal(); + CurrPage.Update(false); + end; + } + } + area(Promoted) + { + group(Category_Process) + { + actionref(ViewTaskMessage_Promoted; ViewTaskMessage) + { + } + actionref(ViewTaskSteps_Promoted; ViewTaskSteps) + { + } + actionref(CreateTask_Promoted; CreateTask) + { + } + } + } + } + + trigger OnAfterGetRecord() + begin + UpdateControls(); + end; + + trigger OnAfterGetCurrRecord() + begin + UpdateControls(); + end; + + local procedure UpdateControls() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + NumberOfStepsDone := AgentMonitoringImpl.GetStepsDoneCount(Rec); + UserInterventionEnabled := Rec.Status = Rec.Status::"Pending User Intervention"; + end; + + local procedure ShowTaskMessages() + var + AgentTaskMessage: Record "Agent Task Message"; + begin + AgentTaskMessage.SetRange("Task ID", Rec.ID); + Page.Run(Page::"Agent Task Message List", AgentTaskMessage); + end; + + var + NumberOfStepsDone: Integer; + UserInterventionEnabled: Boolean; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageCard.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageCard.Page.al new file mode 100644 index 0000000000..8171152e65 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageCard.Page.al @@ -0,0 +1,95 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +page 4308 "Agent Task Message Card" +{ + PageType = Card; + ApplicationArea = All; + SourceTable = "Agent Task Message"; + InsertAllowed = false; + ModifyAllowed = false; + DeleteAllowed = false; + Caption = 'Agent Task Message'; + DataCaptionExpression = ''; + Extensible = false; + SourceTableView = sorting(SystemModifiedAt) order(descending); + + layout + { + area(Content) + { + group(General) + { + field(LastModifiedAt; Rec.SystemModifiedAt) + { + Caption = 'Last modified at'; + ToolTip = 'Specifies the date and time when the message was last modified.'; + } + field(CreatedAt; Rec.SystemCreatedAt) + { + Caption = 'Created at'; + ToolTip = 'Specifies the date and time when the message was created.'; + } + field(TaskID; Rec."Task Id") + { + Caption = 'Task ID'; + Visible = false; + } + field(MessageID; Rec."ID") + { + Caption = 'ID'; + Visible = false; + } + field(MessageType; Rec.Type) + { + Caption = 'Type'; + } + field(Status; Rec.Status) + { + Caption = 'Status'; + } + } + + group(Message) + { + Caption = 'Message'; + Editable = IsMessageEditable; + field(MessageText; GlobalMessageText) + { + ShowCaption = false; + Caption = 'Message'; + ToolTip = 'Specifies the message text.'; + MultiLine = true; + ExtendedDatatype = RichContent; + Editable = true; + } + } + } + } + + trigger OnAfterGetRecord() + begin + UpdateControls(); + end; + + trigger OnAfterGetCurrRecord() + begin + UpdateControls(); + end; + + local procedure UpdateControls() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + GlobalMessageText := AgentMonitoringImpl.GetMessageText(Rec); + IsMessageEditable := AgentMonitoringImpl.IsMessageEditable(Rec); + end; + + var + GlobalMessageText: Text; + IsMessageEditable: Boolean; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageList.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageList.Page.al new file mode 100644 index 0000000000..cd802cb22f --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskMessageList.Page.al @@ -0,0 +1,127 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +page 4301 "Agent Task Message List" +{ + PageType = List; + ApplicationArea = All; + Caption = 'Agent Task Messages'; + UsageCategory = Administration; + SourceTable = "Agent Task Message"; + CardPageId = "Agent Task Message Card"; + InsertAllowed = false; + ModifyAllowed = false; + DeleteAllowed = false; + Editable = false; + Extensible = false; + + layout + { + area(Content) + { + repeater(GroupName) + { + field(LastModifiedAt; Rec.SystemModifiedAt) + { + Caption = 'Last modified at'; + ToolTip = 'Specifies the date and time when the message was last modified.'; + } + field(CreatedAt; Rec.SystemCreatedAt) + { + Caption = 'Created at'; + ToolTip = 'Specifies the date and time when the message was created.'; + } + field(Status; Rec.Status) + { + Caption = 'Status'; + BlankZero = true; + BlankNumbers = BlankZero; + } + field("Created By Full Name"; Rec."Created By Full Name") + { + Caption = 'Created by'; + } + field(MessageType; Rec.Type) + { + Caption = 'Type'; + } + field(MessageText; GlobalMessageText) + { + Caption = 'Message'; + ToolTip = 'Specifies the message text.'; + + trigger OnDrillDown() + begin + Message(GlobalMessageText); + end; + } + field(TaskID; Rec."Task Id") + { + Visible = false; + Caption = 'Task ID'; + } + field(MessageId; Rec."ID") + { + Caption = 'ID'; + } + } + } + } + actions + { + area(Processing) + { + action(AddMessage) + { + ApplicationArea = All; + Caption = 'Create new message'; + ToolTip = 'Create a new message.'; + Image = Task; + + trigger OnAction() + var + CurrentAgentTask: Record "Agent Task"; + AgentNewTaskMessage: Page "Agent New Task Message"; + begin + CurrentAgentTask.Get(Rec."Task ID"); + AgentNewTaskMessage.SetAgentTask(CurrentAgentTask); + AgentNewTaskMessage.RunModal(); + CurrPage.Update(false); + end; + } + } + area(Promoted) + { + group(Category_Process) + { + actionref(AddMessage_Promoted; AddMessage) + { + } + } + } + } + + trigger OnAfterGetRecord() + begin + UpdateControls(); + end; + + trigger OnAfterGetCurrRecord() + begin + UpdateControls(); + end; + + local procedure UpdateControls() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + GlobalMessageText := AgentMonitoringImpl.GetMessageText(Rec); + end; + + var + GlobalMessageText: Text; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskStepList.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskStepList.Page.al new file mode 100644 index 0000000000..6de3a250ba --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentTaskStepList.Page.al @@ -0,0 +1,80 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +page 4303 "Agent Task Step List" +{ + PageType = List; + ApplicationArea = All; + UsageCategory = Administration; + SourceTable = "Agent Task Step"; + Caption = 'Agent Task Steps'; + InsertAllowed = false; + ModifyAllowed = false; + DeleteAllowed = false; + Editable = false; + SourceTableView = sorting("Step Number") order(descending); + Extensible = false; + + layout + { + area(Content) + { + repeater(AgentConversationActionLog) + { + field(StepNumber; Rec."Step Number") + { + Caption = 'Step Number'; + } + field(TaskID; Rec."Task ID") + { + Visible = false; + Caption = 'Task ID'; + } + field(Description; Rec.Description) + { + Caption = 'Description'; + } + field(Details; DetailsTxt) + { + Caption = 'Details'; + ToolTip = 'Specifies the step details.'; + + trigger OnDrillDown() + begin + Message(DetailsTxt); + end; + } + field("User Full Name"; Rec."User Full Name") + { + Caption = 'User Full Name'; + Tooltip = 'Specifies the full name of the user that was involved in performing the step..'; + } + + } + } + } + + trigger OnAfterGetRecord() + begin + UpdateControls(); + end; + + trigger OnAfterGetCurrRecord() + begin + UpdateControls(); + end; + + local procedure UpdateControls() + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + DetailsTxt := AgentMonitoringImpl.GetDetailsForAgentTaskStep(Rec); + end; + + var + DetailsTxt: Text; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentUserIntervention.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentUserIntervention.Page.al new file mode 100644 index 0000000000..8fc473d6fb --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Monitoring/AgentUserIntervention.Page.al @@ -0,0 +1,91 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +page 4305 "Agent User Intervention" +{ + PageType = StandardDialog; + ApplicationArea = All; + UsageCategory = Administration; + Caption = 'User Intervention'; + DataCaptionExpression = ''; + + layout + { + area(Content) + { + group(Details) + { + Caption = 'User Intervention Request Details'; + field(Type; RequestType) + { + Caption = 'Type'; + ToolTip = 'Specifies the type of user intervention request.'; + Editable = false; + } + field(Title; RequestTitle) + { + Caption = 'Title'; + ToolTip = 'Specifies the title of the user intervention request.'; + Editable = false; + MultiLine = true; + } + field(Message; RequestMessage) + { + Caption = 'Message'; + ToolTip = 'Specifies the message of the user intervention request.'; + Editable = false; + MultiLine = true; + } + } + group(Input) + { + ShowCaption = false; + field(UserInput; UserInput) + { + Caption = 'Input'; + ToolTip = 'Specifies the input to provide to the agent.'; + MultiLine = true; + } + } + } + } + + trigger OnQueryClosePage(CloseAction: Action): Boolean + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + begin + if not (CloseAction in [Action::Ok, Action::LookupOK, Action::Yes]) then + exit(true); + + AgentMonitoringImpl.CreateUserInterventionTaskStep(TaskID, UserInput); + exit(true); + end; + + procedure SetUserInterventionRequestStep(var UserInterventionRequestStep: Record "Agent Task Step") + var + AgentMonitoringImpl: Codeunit "Agent Monitoring Impl."; + DetailsJson: JsonObject; + JsonToken: JsonToken; + begin + TaskID := UserInterventionRequestStep."Task ID"; + DetailsJson.ReadFrom(AgentMonitoringImpl.GetDetailsForAgentTaskStep(UserInterventionRequestStep)); + DetailsJson.Get('type', JsonToken); + RequestType := JsonToken.AsValue().AsText(); + DetailsJson.Get('title', JsonToken); + RequestTitle := JsonToken.AsValue().AsText(); + DetailsJson.Get('message', JsonToken); + RequestMessage := JsonToken.AsValue().AsText(); + end; + + var + TaskID: BigInteger; + UserInput: Text; + RequestType: Text; + RequestTitle: Text; + RequestMessage: Text; + +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Permissions/AgentObjects.PermissionSet.al b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Permissions/AgentObjects.PermissionSet.al new file mode 100644 index 0000000000..af98bc4dab --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/AgentsSystemApp/Permissions/AgentObjects.PermissionSet.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Agents; + +permissionset 4300 "Agent - Objects" +{ + Assignable = true; + + Permissions = codeunit "Agent Monitoring Impl." = X, + page "Agent Access Control" = X, + page "Agent Card" = X, + page "Agent List" = X, + page "Agent Task List" = X, + page "Agent Task Message Card" = X, + page "Agent Task Message List" = X, + page "Agent Task Step List" = X, + page "Agent New Task Message" = X, + codeunit "Agent Impl." = X; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOADemoPrompt.Codeunit.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOADemoPrompt.Codeunit.al new file mode 100644 index 0000000000..dfa96c7c1f --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOADemoPrompt.Codeunit.al @@ -0,0 +1,206 @@ +namespace Agent.SalesOrderTaker.Instructions; + +codeunit 4306 "SOA Demo Prompt" +{ + trigger OnRun() + begin + CreateFullSalesOrderTakerSetup(); + end; + + var + SOAInstructionTemplate: Record "SOA Instruction Template"; + SOAInstructionPhase: Record "SOA Instruction Phase"; + SOAInstructionTaskPolicy: Record "SOA Instruction Task/Policy"; + SOAInstructionPhaseStep: Record "SOA Instruction Phase Step"; + SOAInstructionPrompt: Record "SOA Instruction Prompt"; + SOAInstructionsMgt: Codeunit "SOA Instructions Mgt."; + TemplateLbl: Label 'SALES ORDER TAKER'; + TemplateDescLbl: Label 'Sales order taking agent'; + TaskPromptLbl: Label 'TASK'; + TaskPromptTextLbl: Label '**Task**%1You are acting as a sales order taker in the sales department running on Business Central. You are responsible for handling incoming sales quote requests via email. Follow these detailed steps to process a sales quote request and convert it to a sales order upon approval:%1<>%1<>%1<>%1<>%1<>%1Make sure to follow the steps meticulously to ensure accuracy and efficiency in creating and processing sales quotes in Business Central.%1', Comment = '%1: NewLine'; + Prompt11Lbl: Label '1-1 RECEIVE EMAIL'; + Prompt11TextLbl: Label '**Email Reception:**%1- Monitor the shared inbox for incoming emails.%1- Identify emails requesting a sales quote by analyzing the content. Look for specific mentions of products, desired quantities, dates, and any additional information.%1', Comment = '%1: NewLine'; + Prompt12Lbl: Label '1-2 ANALYZE EXTRACT'; + Prompt12TextLbl: Label '**Analyze and Extract Information:**%1- Extract the product names, quantities, units of measure, requested delivery dates, and any other pertinent information from the email.%1- Ensure that both the product name and quantity are present, as they are essential for creating the sales quote. If either is missing, then request assistance.%1', Comment = '%1: NewLine'; + Prompt13Lbl: Label '1-3 FIND CONTACT'; + Prompt13TextLbl: Label '**Find Contact or Customer in Business Central:**%1- First, search for the Contact in Business Central. Use details from the email message, such as the sender''s name, email address, company name, phone number.%1', Comment = '%1: NewLine'; + Prompt14Lbl: Label '1-4 FIND CUSTOMER'; + Prompt14TextLbl: Label '- If the contact is not found, search for the Customer instead.%1- If neither Contact nor Customer is found, then request assistance.%1', Comment = '%1: NewLine'; + Prompt15Lbl: Label '1-5 VERIFY PARTNER'; + Prompt15TextLbl: Label '- Verify the credit limit for the contact or customer and ensure that all posting fields are correctly filled.%1', Comment = '%1: NewLine'; + Prompt21Lbl: Label '2-1 CREATE QUOTE'; + Prompt21TextLbl: Label '**Create Sales Quote:**%1- Based on the Contact or Customer found, navigate to their card and select "Sales Quote" action in "New Document" group to initiate a new sales quote.%1- A new sales quote form will open, pre-filled with the contact or customer''s information.%1', Comment = '%1: NewLine'; + Prompt31Lbl: Label '3-1 ADD DETAILS'; + Prompt31TextLbl: Label '**Populate Sales Quote Details:**%1', Comment = '%1: NewLine'; + Prompt32Lbl: Label '3-2 ADD DATE'; + Prompt32TextLbl: Label '- If the email specifies a "Requested Delivery Date," populate this field accordingly.%1', Comment = '%1: NewLine'; + Prompt33Lbl: Label '3-3 VERIFY CUST NO'; + Prompt33TextLbl: Label '- Verify that Customer No. and Customer Name are filled in on the sales quote form.%1', Comment = '%1: NewLine'; + Prompt34Lbl: Label '3-4 VERIFY ADDRESS'; + Prompt34TextLbl: Label '- Ensure that address fields are filled in.%1', Comment = '%1: NewLine'; + Prompt35Lbl: Label '3-5 ADD LINES'; + Prompt35TextLbl: Label '- Add sales quote lines:%1 - Set the line type to "Item."%1 - Populate the "No.", "Variant Code", "Quantity", and "Unit of Measure Code" fields with the information extracted from the email.%1- Business Central will automatically calculate prices and taxes.%1', Comment = '%1: NewLine'; + Prompt41Lbl: Label '4-1 SEND REPLY'; + Prompt41TextLbl: Label '**Send Sales Quote to Customer:**%1- Convert the newly created sales quote to a PDF document.%1- Reply to the original email with the following text: "We sent you a quote, check your email titled "Quote XXXX" and confirm if you want to proceed."%1- Attach the PDF document to this email.%1%1**Example Email Template**%1Subject: Sales Quote XXXX%1Body:%1Dear [Customer Name],%1Thank you for your request. We have generated a sales quote based on the details provided. Please find the attached PDF document titled "Quote XXXX".%1Kindly review the quote and confirm if you wish to proceed with the order.%1Best regards,%1[Your Company Name]%1', Comment = '%1: NewLine'; + Prompt51Lbl: Label '5-1 QUOTE TO ORDER'; + Prompt51TextLbl: Label '**Convert Quote to Sales Order:**%1- Once the customer approves the quote, select "Make Order" to convert the sales quote into a sales order in Business Central.%1', Comment = '%1: NewLine'; + Task11Lbl: Label 'Monitor and read emails'; + Task12Lbl: Label 'Extract data from email'; + Task13Lbl: Label 'Find contact'; + Policy14Lbl: Label 'Contact not found, find customer'; + Policy15Lbl: Label 'Verify found contact or customer'; + Task21Lbl: Label 'Create sales quote'; + Task31Lbl: Label 'Populate sales quote details'; + Policy32Lbl: Label 'Add requested delivery date'; + Policy33Lbl: Label 'Verify customer number and name'; + Policy34Lbl: Label 'Verify address'; + Task35Lbl: Label 'Add sales quote lines'; + Task41Lbl: Label 'Send sales quote to customer'; + Task51Lbl: Label 'Convert quote to sales order'; + + procedure CreateFullSalesOrderTakerSetup() + begin + DeleteExistingSetup(); + + CreatePrompts(); + CreateTasksAndPolicies(); + CreateTemplates(); + CreatePhases(); + CreatePhaseSteps(); + end; + + local procedure DeleteExistingSetup() + begin + SOAInstructionPrompt.Reset(); + SOAInstructionPrompt.DeleteAll(); + SOAInstructionTaskPolicy.Reset(); + SOAInstructionTaskPolicy.DeleteAll(); + SOAInstructionTemplate.Reset(); + SOAInstructionTemplate.DeleteAll(); + SOAInstructionPhase.Reset(); + SOAInstructionPhase.DeleteAll(); + SOAInstructionPhaseStep.Reset(); + SOAInstructionPhaseStep.DeleteAll(); + end; + + local procedure CreatePrompts() + begin + CreatePrompt(TaskPromptLbl, TaskPromptTextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt11Lbl, Prompt11TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt12Lbl, Prompt12TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt13Lbl, Prompt13TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt14Lbl, Prompt14TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt15Lbl, Prompt15TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt21Lbl, Prompt21TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt31Lbl, Prompt31TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt32Lbl, Prompt32TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt33Lbl, Prompt33TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt34Lbl, Prompt34TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt35Lbl, Prompt35TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt41Lbl, Prompt41TextLbl, "SOA Yes/No Toggle State"::Yes); + CreatePrompt(Prompt51Lbl, Prompt51TextLbl, "SOA Yes/No Toggle State"::Yes); + end; + + local procedure CreatePrompt(Name: Code[20]; PromptText: Text; Enabled: Enum "SOA Yes/No Toggle State") + var + NewLine: Text[2]; + begin + SOAInstructionPrompt.Init(); + SOAInstructionPrompt.Code := Name; + SOAInstructionPrompt.Enabled := Enabled; + SOAInstructionPrompt.Insert(); + + NewLine := ' '; + NewLine[1] := 13; + NewLine[2] := 10; + + SOAInstructionsMgt.SetPrompt(SOAInstructionPrompt, StrSubstNo(PromptText, NewLine)); + SOAInstructionPrompt.Modify(); + end; + + local procedure CreateTasksAndPolicies() + begin + CreateTaskAndPolicy(1, "SOA Phase Step Type"::Task, Task11Lbl, Prompt11Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(2, "SOA Phase Step Type"::Task, Task12Lbl, Prompt12Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(3, "SOA Phase Step Type"::Task, Task13Lbl, Prompt13Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(4, "SOA Phase Step Type"::Policy, Policy14Lbl, Prompt14Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(5, "SOA Phase Step Type"::Policy, Policy15Lbl, Prompt15Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(6, "SOA Phase Step Type"::Task, Task21Lbl, Prompt21Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(7, "SOA Phase Step Type"::Task, Task31Lbl, Prompt31Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(8, "SOA Phase Step Type"::Policy, Policy32Lbl, Prompt32Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(9, "SOA Phase Step Type"::Policy, Policy33Lbl, Prompt33Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(10, "SOA Phase Step Type"::Policy, Policy34Lbl, Prompt34Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(11, "SOA Phase Step Type"::Task, Task35Lbl, Prompt35Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(12, "SOA Phase Step Type"::Task, Task41Lbl, Prompt41Lbl, "SOA Yes/No Toggle State"::Yes); + CreateTaskAndPolicy(13, "SOA Phase Step Type"::Task, Task51Lbl, Prompt51Lbl, "SOA Yes/No Toggle State"::Yes); + end; + + local procedure CreateTaskAndPolicy(SortingOrderNo: Integer; Type: Enum "SOA Phase Step Type"; Name: Text; PromptCode: Code[20]; Enabled: Enum "SOA Yes/No Toggle State") + begin + SOAInstructionTaskPolicy.Init(); + SOAInstructionTaskPolicy."Sorting Order No." := SortingOrderNo; + SOAInstructionTaskPolicy.Type := Type; + SOAInstructionTaskPolicy.Name := CopyStr(Name, 1, MaxStrLen(SOAInstructionTaskPolicy.Name)); + SOAInstructionTaskPolicy."Prompt Code" := PromptCode; + SOAInstructionTaskPolicy.Enabled := Enabled; + SOAInstructionTaskPolicy.Insert(); + end; + + local procedure CreatePhases() + begin + CreatePhase(1, "SOA Phases"::"Identify Business Partner", "SOA Yes/No Toggle State"::Yes); + CreatePhase(2, "SOA Phases"::"Create Sales Document", "SOA Yes/No Toggle State"::Yes); + CreatePhase(3, "SOA Phases"::"Add Details to Sales Document", "SOA Yes/No Toggle State"::Yes); + CreatePhase(4, "SOA Phases"::"Send Sales Document", "SOA Yes/No Toggle State"::Yes); + CreatePhase(5, "SOA Phases"::"Process Response", "SOA Yes/No Toggle State"::Yes); + end; + + local procedure CreatePhase(PhaseOrderNo: Integer; Phase: Enum "SOA Phases"; Enabled: Enum "SOA Yes/No Toggle State") + begin + SOAInstructionPhase.Init(); + SOAInstructionPhase."Template Name" := SOAInstructionTemplate.Name; + SOAInstructionPhase.Phase := Phase; + SOAInstructionPhase."Phase Order No." := PhaseOrderNo; + SOAInstructionPhase.Enabled := Enabled; + SOAInstructionPhase.Insert(); + end; + + local procedure CreatePhaseSteps() + begin + CreatePhaseStep("SOA Phases"::"Identify Business Partner", 1, "SOA Phase Step Type"::Task, Task11Lbl, 0, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Identify Business Partner", 2, "SOA Phase Step Type"::Task, Task12Lbl, 0, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Identify Business Partner", 3, "SOA Phase Step Type"::Task, Task13Lbl, 0, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Identify Business Partner", 4, "SOA Phase Step Type"::Policy, Policy14Lbl, 1, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Identify Business Partner", 5, "SOA Phase Step Type"::Policy, Policy15Lbl, 1, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Create Sales Document", 1, "SOA Phase Step Type"::Task, Task21Lbl, 0, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Add Details to Sales Document", 1, "SOA Phase Step Type"::Task, Task31Lbl, 0, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Add Details to Sales Document", 2, "SOA Phase Step Type"::Policy, Policy32Lbl, 1, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Add Details to Sales Document", 3, "SOA Phase Step Type"::Policy, Policy33Lbl, 1, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Add Details to Sales Document", 4, "SOA Phase Step Type"::Policy, Policy34Lbl, 1, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Add Details to Sales Document", 5, "SOA Phase Step Type"::Task, Task35Lbl, 0, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Send Sales Document", 1, "SOA Phase Step Type"::Task, Task41Lbl, 0, "SOA Yes/No Toggle State"::Yes); + CreatePhaseStep("SOA Phases"::"Process Response", 1, "SOA Phase Step Type"::Task, Task51Lbl, 0, "SOA Yes/No Toggle State"::Yes); + end; + + local procedure CreatePhaseStep(Phase: Enum "SOA Phases"; StepNo: Integer; StepType: Enum "SOA Phase Step Type"; StepName: Text; Indentation: Integer; Enabled: Enum "SOA Yes/No Toggle State") + begin + SOAInstructionPhaseStep.Init(); + SOAInstructionPhaseStep.Phase := Phase; + SOAInstructionPhaseStep."Step No." := StepNo; + SOAInstructionPhaseStep."Step Type" := StepType; + SOAInstructionPhaseStep."Step Name" := CopyStr(StepName, 1, MaxStrLen(SOAInstructionPhaseStep."Step Name")); + SOAInstructionPhaseStep.Indentation := Indentation; + SOAInstructionPhaseStep.Enabled := Enabled; + SOAInstructionPhaseStep.Insert(); + end; + + local procedure CreateTemplates() + begin + SOAInstructionTemplate.Init(); + SOAInstructionTemplate.Name := TemplateLbl; + SOAInstructionTemplate.Description := TemplateDescLbl; + SOAInstructionTemplate.Enabled := "SOA Yes/No Toggle State"::Yes; + SOAInstructionTemplate."Prompt Code" := TaskPromptLbl; + SOAInstructionTemplate.Insert(); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructTasksPolicies.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructTasksPolicies.Page.al new file mode 100644 index 0000000000..d345f96af8 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructTasksPolicies.Page.al @@ -0,0 +1,76 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +page 4310 "SOA Instruct. Tasks/Policies" +{ + PageType = List; + ApplicationArea = All; + SourceTable = "SOA Instruction Task/Policy"; + SourceTableView = sorting("Sorting Order No."); + Caption = 'Instruction Tasks and Policies'; + PopulateAllFields = true; + DelayedInsert = true; + + layout + { + area(Content) + { + repeater(TasksPolicies) + { + field(Type; Rec.Type) + { + Caption = 'Type'; + ToolTip = 'Specifies if the step is a task or a policy.'; + } + field(Name; Rec.Name) + { + Caption = 'Name'; + ToolTip = 'Specifies the name of the task or policy.'; + } + field("Sorting Order No."; Rec."Sorting Order No.") + { + Caption = 'Sorting Order No.'; + ToolTip = 'Specifies the order number of the task or policy.'; + Visible = false; + } + field(Enabled; Rec.Enabled) + { + Caption = 'Enabled'; + ToolTip = 'Specifies if the task or policy is enabled.'; + ValuesAllowed = No, Yes; + } + field("Prompt Code"; Rec."Prompt Code") + { + Caption = 'Prompt Code'; + ToolTip = 'Specifies the code of the prompt.'; + } + } + } + } + + actions + { + area(Processing) + { + action("Show Prompt") + { + Caption = 'Show Prompt'; + ToolTip = 'Show the prompt for the selected task or policy'; + Image = ViewDescription; + + trigger OnAction() + begin + Rec.ShowPrompt(); + end; + } + } + area(Promoted) + { + actionref("Show Prompt_Promoted"; "Show Prompt") { } + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhase.Table.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhase.Table.al new file mode 100644 index 0000000000..ad956bd5a8 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhase.Table.al @@ -0,0 +1,102 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +table 4306 "SOA Instruction Phase" +{ + DataClassification = CustomerContent; + Caption = 'Sales Order Taking Agent Instruction Phase'; + ReplicateData = false; + + fields + { + field(1; "Template Name"; Code[20]) + { + DataClassification = CustomerContent; + Caption = 'Template Name'; + NotBlank = true; + ToolTip = 'Specifies the name of the instruction template.'; + TableRelation = "SOA Instruction Template".Name; + } + field(2; "Phase Order No."; Integer) + { + DataClassification = CustomerContent; + Caption = 'Phase Order No.'; + NotBlank = true; + ToolTip = 'Specifies the order number of the instruction phase.'; + } + field(3; Phase; Enum "SOA Phases") + { + DataClassification = CustomerContent; + Caption = 'Phase'; + ToolTip = 'Specifies the phase of the instruction.'; + } + field(4; Description; Text[250]) + { + DataClassification = CustomerContent; + Caption = 'Description'; + ToolTip = 'Specifies the description of the instruction phase.'; + } + field(10; Enabled; Enum "SOA Yes/No Toggle State") + { + DataClassification = CustomerContent; + Caption = 'Enabled'; + ToolTip = 'Specifies if the instruction phase is enabled.'; + InitValue = Yes; + } + field(20; "Prompt Code"; Code[20]) + { + DataClassification = CustomerContent; + Caption = 'Prompt Code'; + ToolTip = 'Specifies the code of the prompt.'; + TableRelation = "SOA Instruction Prompt".Code; + } + } + + keys + { + key(PK; "Template Name", "Phase Order No.") + { + Clustered = true; + } + } + + var + EditingNotAllowedErr: Label 'You cannot edit this instruction phase.'; + + trigger OnInsert() + begin + + end; + + trigger OnModify() + begin + if not CanEdit() then + Error(EditingNotAllowedErr); + end; + + trigger OnDelete() + var + InstructionPhaseStep: Record "SOA Instruction Phase Step"; + begin + InstructionPhaseStep.SetRange(Phase, Rec.Phase); + InstructionPhaseStep.DeleteAll(true); + end; + + local procedure CanEdit(): Boolean + begin + exit(Rec.Enabled <> Rec.Enabled::"Yes (Read-only)"); + end; + + procedure ShowPrompt() + var + InstructionMgt: Codeunit "SOA Instructions Mgt."; + InstructionPromptCard: Page "SOA Instruction Prompt Card"; + begin + InstructionPromptCard.SetRec(Rec."Prompt Code", InstructionMgt.GetPromptText(Rec), true); + InstructionPromptCard.RunModal(); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseStep.Table.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseStep.Table.al new file mode 100644 index 0000000000..9399ca2559 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseStep.Table.al @@ -0,0 +1,96 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +table 4307 "SOA Instruction Phase Step" +{ + DataClassification = CustomerContent; + Caption = 'Sales Order Taking Agent Instruction Task/Policy'; + LookupPageId = "SOA Instruction Phase Steps"; + ReplicateData = false; + + fields + { + field(1; Phase; Enum "SOA Phases") + { + DataClassification = CustomerContent; + Caption = 'Phase'; + ToolTip = 'Specifies the phase of the instruction.'; + } + field(2; "Step No."; Integer) + { + DataClassification = CustomerContent; + Caption = 'Step No.'; + ToolTip = 'Specifies the step number of the task or policy in the phase.'; + } + field(3; "Step Type"; Enum "SOA Phase Step Type") + { + DataClassification = CustomerContent; + Caption = 'Step Type'; + ToolTip = 'Specifies if the step is a task or a policy.'; + } + field(4; "Step Name"; Text[250]) + { + DataClassification = CustomerContent; + Caption = 'Step Name'; + ToolTip = 'Specifies the name of the task or policy.'; + TableRelation = "SOA Instruction Task/Policy".Name where(Type = field("Step Type")); + } + field(9; Indentation; Integer) + { + DataClassification = CustomerContent; + Caption = 'Indentation'; + ToolTip = 'Specifies the indentation level of the task or policy.'; + } + field(10; Enabled; Enum "SOA Yes/No Toggle State") + { + DataClassification = CustomerContent; + Caption = 'Enabled'; + ToolTip = 'Specifies if the instruction phase is enabled.'; + InitValue = Yes; + } + } + + keys + { + key(PK; Phase, "Step No.") + { + Clustered = true; + } + } + + var + EditingNotAllowedErr: Label 'You cannot edit this phase step.'; + + trigger OnInsert() + begin + + end; + + trigger OnModify() + begin + if not CanEdit() then + Error(EditingNotAllowedErr); + end; + + trigger OnDelete() + begin + + end; + + local procedure CanEdit(): Boolean + begin + exit(Rec.Enabled <> Rec.Enabled::"Yes (Read-only)"); + end; + + procedure ShowPrompt() + var + InstructionTaskPolicy: Record "SOA Instruction Task/Policy"; + begin + InstructionTaskPolicy.Get(Rec."Step Type", Rec."Step Name"); + InstructionTaskPolicy.ShowPrompt(); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseSteps.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseSteps.Page.al new file mode 100644 index 0000000000..bc1d0d6771 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhaseSteps.Page.al @@ -0,0 +1,128 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +page 4309 "SOA Instruction Phase Steps" +{ + PageType = List; + ApplicationArea = All; + SourceTable = "SOA Instruction Phase Step"; + Caption = 'Instruction Phase Steps'; + PopulateAllFields = true; + DelayedInsert = true; + + layout + { + area(Content) + { + repeater(PhaseSteps) + { + IndentationColumn = Indent; + IndentationControls = "Step Name"; + + field(Phase; Rec.Phase) + { + Caption = 'Phase'; + ToolTip = 'Specifies the phase of the instruction.'; + } + field("Step No."; Rec."Step No.") + { + Caption = 'Step No.'; + ToolTip = 'Specifies the step number of the task or policy in the phase.'; + } + field(Step; Step) + { + Caption = 'Step'; + ToolTip = 'Specifies the task or policy in the phase.'; + Editable = false; + AssistEdit = true; + + trigger OnAssistEdit() + begin + LookUpPhaseStep(); + CurrPage.Update(); + end; + } + field("Step Type"; Rec."Step Type") + { + Caption = 'Step Type'; + ToolTip = 'Specifies if the step is a task or a policy.'; + Visible = false; + } + field("Step Name"; Rec."Step Name") + { + Caption = 'Step Name'; + ToolTip = 'Specifies the name of the task or policy.'; + Visible = false; + } + field(Indentation; Rec.Indentation) + { + Caption = 'Indentation'; + ToolTip = 'Specifies the indentation level of the task or policy.'; + Visible = false; + } + field(Enabled; Rec.Enabled) + { + Caption = 'Enabled'; + ToolTip = 'Specifies if the instruction phase is enabled.'; + ValuesAllowed = No, Yes; + } + } + } + } + + actions + { + area(Processing) + { + action("Show Prompt") + { + Caption = 'Show Prompt'; + Image = Action; + ToolTip = 'Show the prompt for the selected task or policy.'; + + trigger OnAction() + begin + Rec.ShowPrompt(); + end; + } + } + area(Promoted) + { + actionref("Show Prompt_Promoted"; "Show Prompt") { } + } + } + + var + Indent: Integer; + Step: Text; + + trigger OnAfterGetRecord() + var + InstructionTaskPolicy: Record "SOA Instruction Task/Policy"; + begin + if InstructionTaskPolicy.Get(Rec."Step Type", Rec."Step Name") then + Step := StrSubstNo('%1: %2', InstructionTaskPolicy.Type, InstructionTaskPolicy.Name); + + Indent := Rec.Indentation; + end; + + trigger OnNewRecord(BelowxRec: Boolean) + begin + Indent := 0; + Step := ''; + end; + + local procedure LookUpPhaseStep() + var + InstructionTaskPolicy: Record "SOA Instruction Task/Policy"; + begin + if Page.RunModal(0, InstructionTaskPolicy) = Action::LookupOK then begin + Rec.Validate("Step Type", InstructionTaskPolicy.Type); + Rec.Validate("Step Name", InstructionTaskPolicy.Name); + end; + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhases.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhases.Page.al new file mode 100644 index 0000000000..bbc91aefa0 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPhases.Page.al @@ -0,0 +1,73 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +page 4312 "SOA Instruction Phases" +{ + PageType = ListPart; + ApplicationArea = All; + SourceTable = "SOA Instruction Phase"; + Caption = 'Instruction Phases'; + + layout + { + area(Content) + { + repeater(PhaseSteps) + { + ShowCaption = false; + + field("Phase Order No."; Rec."Phase Order No.") + { + Caption = 'Phase Order No.'; + ToolTip = 'Specifies the order number of the phase.'; + } + field(Phase; Rec.Phase) + { + Caption = 'Phase'; + ToolTip = 'Specifies the phase of the instruction.'; + } + field(Enabled; Rec.Enabled) + { + Caption = 'Enabled'; + ToolTip = 'Specifies if the instruction phase is enabled.'; + ValuesAllowed = No, Yes; + } + field("Prompt Code"; Rec."Prompt Code") + { + Caption = 'Prompt Code'; + ToolTip = 'Specifies the code of the prompt.'; + } + } + } + } + + actions + { + area(Processing) + { + action("Tasks and policies") + { + Caption = 'Tasks and policies'; + Image = Task; + ToolTip = 'Show the tasks and policies for the selected phase.'; + RunObject = page "SOA Instruction Phase Steps"; + RunPageLink = Phase = field(Phase); + } + action("Show Prompt") + { + Caption = 'Show Prompt'; + Image = Action; + ToolTip = 'Show the prompt for the selected phase.'; + + trigger OnAction() + begin + Rec.ShowPrompt(); + end; + } + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPrompt.Table.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPrompt.Table.al new file mode 100644 index 0000000000..1a18a6202e --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPrompt.Table.al @@ -0,0 +1,79 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +table 4309 "SOA Instruction Prompt" +{ + DataClassification = CustomerContent; + Caption = 'Sales Order Taking Agent Instruction Prompt'; + LookupPageId = "SOA Instruction Prompt List"; + ReplicateData = false; + + fields + { + field(1; Code; Code[20]) + { + DataClassification = CustomerContent; + Caption = 'Code'; + NotBlank = true; + ToolTip = 'Specifies the code of the prompt.'; + } + field(2; Prompt; Blob) + { + DataClassification = CustomerContent; + Caption = 'Prompt'; + ToolTip = 'Specifies the prompt.'; + } + field(10; Enabled; Enum "SOA Yes/No Toggle State") + { + DataClassification = CustomerContent; + Caption = 'Enabled'; + ToolTip = 'Specifies if the prompt is enabled.'; + InitValue = Yes; + } + } + + keys + { + key(PK; Code) + { + Clustered = true; + } + } + + var + EditingNotAllowedErr: Label 'You cannot edit this prompt.'; + + trigger OnInsert() + begin + + end; + + trigger OnModify() + begin + if not CanEdit() then + Error(EditingNotAllowedErr); + end; + + trigger OnDelete() + begin + + end; + + local procedure CanEdit(): Boolean + begin + exit(Rec.Enabled <> Rec.Enabled::"Yes (Read-only)"); + end; + + procedure ShowPrompt() + var + InstructionMgt: Codeunit "SOA Instructions Mgt."; + InstructionPromptCard: Page "SOA Instruction Prompt Card"; + begin + InstructionPromptCard.SetRec(Rec.Code, InstructionMgt.GetPromptText(Rec), false); + InstructionPromptCard.RunModal(); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptCard.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptCard.Page.al new file mode 100644 index 0000000000..fde2d290ed --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptCard.Page.al @@ -0,0 +1,131 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +page 4318 "SOA Instruction Prompt Card" +{ + PageType = Card; + SourceTable = "SOA Instruction Prompt"; + Caption = 'Instruction Prompt'; + SourceTableTemporary = true; + ApplicationArea = All; + + layout + { + area(Content) + { + field(Code; Rec.Code) + { + Caption = 'Code'; + ToolTip = 'Specifies the code of the prompt.'; + Visible = not ReadOnly; + } + field(Enabled; Rec.Enabled) + { + Caption = 'Enabled'; + ToolTip = 'Specifies if the prompt is enabled.'; + ValuesAllowed = No, Yes; + Visible = not ReadOnly; + } + group(PromptText) + { + Caption = 'Prompt Text'; + Visible = not ReadOnly; + + field("Prompt Text"; PromptText) + { + ShowCaption = false; + ToolTip = 'Specifies the full prompt.'; + MultiLine = true; + + trigger OnValidate() + begin + if not ReadOnly then + SaveRec(); + end; + } + } + group(PromptRichText) + { + Caption = 'Prompt Text'; + Visible = ReadOnly; + Editable = false; + + field("Prompt Rich Text"; PromptText) + { + ExtendedDatatype = RichContent; + ShowCaption = false; + ToolTip = 'Specifies the full prompt.'; + MultiLine = true; + } + } + } + } + + var + PromptText: Text; + ReadOnly: Boolean; + + trigger OnInsertRecord(BelowxRec: Boolean): Boolean + begin + if not ReadOnly then + SaveRec(); + end; + + trigger OnModifyRecord(): Boolean + begin + if not ReadOnly then + SaveRec(); + end; + + trigger OnDeleteRecord(): Boolean + begin + if not ReadOnly then + DeleteRec(); + end; + + procedure SetRec(PromptCode: Code[20]; NewPromptText: Text; NewReadOnly: Boolean) + var + InstructionPrompt: Record "SOA Instruction Prompt"; + begin + if InstructionPrompt.Get(PromptCode) then + Rec.Copy(InstructionPrompt) + else + Rec.Init(); + Rec.Insert(); + PromptText := NewPromptText; + + ReadOnly := NewReadOnly; + end; + + local procedure SaveRec() + var + InstructionPrompt: Record "SOA Instruction Prompt"; + InstructionsMgt: Codeunit "SOA Instructions Mgt."; + begin + if not InstructionPrompt.Get(Rec.Code) then begin + InstructionPrompt := Rec; + InstructionPrompt.Insert(); + end else begin + InstructionPrompt := Rec; + InstructionPrompt.Modify(); + end; + InstructionsMgt.SetPrompt(InstructionPrompt, PromptText); + InstructionPrompt.Modify(); + Commit(); + + Rec.Copy(InstructionPrompt); + end; + + local procedure DeleteRec() + var + InstructionPrompt: Record "SOA Instruction Prompt"; + begin + if InstructionPrompt.Get(Rec.Code) then + InstructionPrompt.Delete(); + end; + +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptList.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptList.Page.al new file mode 100644 index 0000000000..7ea72fc3e6 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionPromptList.Page.al @@ -0,0 +1,74 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +page 4311 "SOA Instruction Prompt List" +{ + PageType = List; + ApplicationArea = All; + SourceTable = "SOA Instruction Prompt"; + Caption = 'Instruction Prompts'; + DelayedInsert = true; + + layout + { + area(Content) + { + repeater(Prompts) + { + field(Code; Rec.Code) + { + Caption = 'Code'; + ToolTip = 'Specifies the code of the prompt.'; + } + field("Prompt Text"; PromptText) + { + Caption = 'Prompt'; + ToolTip = 'Specifies the prompt.'; + Editable = false; + } + field(Enabled; Rec.Enabled) + { + Caption = 'Enabled'; + ToolTip = 'Specifies if the prompt is enabled.'; + ValuesAllowed = No, Yes; + } + } + } + } + + actions + { + area(Processing) + { + action("Show Prompt") + { + Caption = 'Edit Prompt'; + Image = Action; + ToolTip = 'Edit the current prompt'; + + trigger OnAction() + begin + Rec.ShowPrompt(); + end; + } + } + } + + var + InstructionsMgt: Codeunit "SOA Instructions Mgt."; + PromptText: Text; + + trigger OnAfterGetRecord() + begin + PromptText := InstructionsMgt.GetPromptText(Rec); + end; + + trigger OnNewRecord(BelowxRec: Boolean) + begin + PromptText := ''; + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTaskPolicy.Table.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTaskPolicy.Table.al new file mode 100644 index 0000000000..713357a13d --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTaskPolicy.Table.al @@ -0,0 +1,102 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +table 4308 "SOA Instruction Task/Policy" +{ + DataClassification = CustomerContent; + Caption = 'Sales Order Taking Agent Instruction Task/Policy'; + LookupPageId = "SOA Instruct. Tasks/Policies"; + ReplicateData = false; + + fields + { + field(1; Type; Enum "SOA Phase Step Type") + { + DataClassification = CustomerContent; + Caption = 'Type'; + ToolTip = 'Specifies if this is a task or a policy.'; + } + field(2; Name; Text[250]) + { + DataClassification = CustomerContent; + Caption = 'Name'; + ToolTip = 'Specifies the name of the task or policy.'; + } + field(5; "Sorting Order No."; Integer) + { + DataClassification = CustomerContent; + Caption = 'Sorting Order No.'; + ToolTip = 'Specifies the sorting order number of the task or policy.'; + } + field(10; Enabled; Enum "SOA Yes/No Toggle State") + { + DataClassification = CustomerContent; + Caption = 'Enabled'; + ToolTip = 'Specifies if the task or policy is enabled.'; + InitValue = Yes; + } + field(20; "Prompt Code"; Code[20]) + { + DataClassification = CustomerContent; + Caption = 'Prompt Code'; + ToolTip = 'Specifies the code of the prompt.'; + TableRelation = "SOA Instruction Prompt".Code; + } + } + + keys + { + key(PK; Type, Name) + { + Clustered = true; + } + key(Key2; "Sorting Order No.") + { + + } + } + + var + EditingNotAllowedErr: Label 'You cannot edit this task or policy.'; + + trigger OnInsert() + begin + + end; + + trigger OnModify() + begin + if not CanEdit() then + Error(EditingNotAllowedErr); + end; + + trigger OnDelete() + var + InstructionPhaseStep: Record "SOA Instruction Phase Step"; + begin + InstructionPhaseStep.SetRange("Step Type", Rec.Type); + InstructionPhaseStep.SetRange("Step Name", Rec.Name); + InstructionPhaseStep.DeleteAll(true); + end; + + local procedure CanEdit(): Boolean + begin + exit(Rec.Enabled <> Rec.Enabled::"Yes (Read-only)"); + end; + + procedure ShowPrompt() + var + InstructionMgt: Codeunit "SOA Instructions Mgt."; + InstructionPromptCard: Page "SOA Instruction Prompt Card"; + begin + if Rec."Prompt Code" = '' then + exit; + + InstructionPromptCard.SetRec(Rec."Prompt Code", InstructionMgt.GetPromptText(Rec), false); + InstructionPromptCard.RunModal(); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplate.Table.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplate.Table.al new file mode 100644 index 0000000000..a30b38b0ff --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplate.Table.al @@ -0,0 +1,115 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +table 4305 "SOA Instruction Template" +{ + DataClassification = CustomerContent; + Caption = 'Sales Order Taking Agent Instruction Template'; + LookupPageId = "SOA Instruction Templates"; + ReplicateData = false; + + fields + { + field(1; Name; Code[20]) + { + DataClassification = CustomerContent; + Caption = 'Name'; + NotBlank = true; + ToolTip = 'Specifies the name of the instruction template.'; + } + field(2; Description; Text[250]) + { + DataClassification = CustomerContent; + Caption = 'Description'; + ToolTip = 'Specifies the description of the instruction template.'; + } + field(10; Enabled; Enum "SOA Yes/No Toggle State") + { + DataClassification = CustomerContent; + Caption = 'Enabled'; + ToolTip = 'Specifies if the instruction template is enabled.'; + InitValue = Yes; + + trigger OnValidate() + var + InstructionTemplate: Record "SOA Instruction Template"; + begin + InstructionTemplate.SetFilter(Name, '<>%1', Name); + InstructionTemplate.SetFilter(Enabled, '%1|%2', InstructionTemplate.Enabled::Yes, InstructionTemplate.Enabled::"Yes (Read-only)"); + if not InstructionTemplate.IsEmpty() then + Error(OnlyOneEnabledErr); + end; + } + field(20; "Prompt Code"; Code[20]) + { + DataClassification = CustomerContent; + Caption = 'Prompt Code'; + ToolTip = 'Specifies the code of the prompt.'; + TableRelation = "SOA Instruction Prompt".Code; + } + field(21; "Meta Prompt Code"; Code[20]) + { + DataClassification = CustomerContent; + Caption = 'Meta Prompt Code'; + ToolTip = 'Specifies the code of the meta prompt.'; + TableRelation = "SOA Instruction Prompt".Code; + } + } + + keys + { + key(PK; Name) + { + Clustered = true; + } + } + + var + EditingNotAllowedErr: Label 'You cannot edit this instruction template.'; + OnlyOneEnabledErr: Label 'Only one instruction template can be enabled.'; + + trigger OnInsert() + begin + end; + + trigger OnModify() + begin + if not CanEdit() then + Error(EditingNotAllowedErr); + end; + + trigger OnDelete() + var + InstructionPhase: Record "SOA Instruction Phase"; + begin + InstructionPhase.SetRange("Template Name", Rec.Name); + InstructionPhase.DeleteAll(true); + end; + + local procedure CanEdit(): Boolean + begin + exit(Rec.Enabled <> Rec.Enabled::"Yes (Read-only)"); + end; + + procedure ShowPrompt() + var + InstructionMgt: Codeunit "SOA Instructions Mgt."; + InstructionPromptCard: Page "SOA Instruction Prompt Card"; + begin + InstructionPromptCard.SetRec(Rec."Prompt Code", InstructionMgt.GetPromptText(Rec), true); + InstructionPromptCard.RunModal(); + end; + + procedure ShowMetaPrompt() + var + InstructionMgt: Codeunit "SOA Instructions Mgt."; + InstructionPromptCard: Page "SOA Instruction Prompt Card"; + begin + InstructionPromptCard.SetRec(Rec."Meta Prompt Code", InstructionMgt.GetMetaPromptText(Rec), true); + InstructionPromptCard.RunModal(); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplates.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplates.Page.al new file mode 100644 index 0000000000..90987d4f9b --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionTemplates.Page.al @@ -0,0 +1,92 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +page 4304 "SOA Instruction Templates" +{ + PageType = List; + ApplicationArea = All; + UsageCategory = Lists; + SourceTable = "SOA Instruction Template"; + Caption = 'Sales Order Taking Agent Instruction Templates'; + + layout + { + area(Content) + { + repeater(Templates) + { + field(Name; Rec.Name) + { + Caption = 'Name'; + ToolTip = 'Specifies the name of the instruction template.'; + } + field(Description; Rec.Description) + { + Caption = 'Description'; + ToolTip = 'Specifies the description of the instruction template.'; + } + field(Enabled; Rec.Enabled) + { + Caption = 'Enabled'; + ToolTip = 'Specifies if the instruction template is enabled.'; + ValuesAllowed = No, Yes; + } + field("Prompt Code"; Rec."Prompt Code") + { + Caption = 'Prompt Code'; + ToolTip = 'Specifies the code of the prompt.'; + } + } + } + } + + actions + { + area(Processing) + { + action("Edit Template") + { + Caption = 'Edit Template'; + ToolTip = 'Edit the selected template.'; + Image = Edit; + RunObject = page "SOA Instructions"; + RunPageOnRec = true; + } + action("Show Prompt") + { + Caption = 'Show Prompt'; + ToolTip = 'Show the prompt for the selected template'; + Image = ViewDescription; + + trigger OnAction() + begin + Rec.ShowPrompt(); + end; + } + action("Initial Setup") + { + Caption = 'Initial Setup'; + Image = Setup; + ToolTip = 'Setup the sales order taking agent instructions.'; + Visible = false; + + trigger OnAction() + var + SOADemoPrompt: Codeunit "SOA Demo Prompt"; + begin + SOADemoPrompt.Run(); + CurrPage.Update(); + end; + } + } + area(Promoted) + { + actionref("Edit Template_Promoted"; "Edit Template") { } + actionref("Show Prompt_Promoted"; "Show Prompt") { } + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructions.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructions.Page.al new file mode 100644 index 0000000000..1c0ae94d42 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructions.Page.al @@ -0,0 +1,115 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +page 4317 "SOA Instructions" +{ + PageType = Document; + ApplicationArea = All; + SourceTable = "SOA Instruction Template"; + Caption = 'Sales Order Taking Agent Instructions'; + + layout + { + area(Content) + { + group(Template) + { + field(Name; Rec.Name) + { + Caption = 'Name'; + ToolTip = 'Specifies the name of the instruction template.'; + } + field(Description; Rec.Description) + { + Caption = 'Description'; + ToolTip = 'Specifies the description of the instruction template.'; + } + field(Enabled; Rec.Enabled) + { + Caption = 'Enabled'; + ToolTip = 'Specifies if the instruction template is enabled.'; + ValuesAllowed = No, Yes; + } + field("Meta Prompt Code"; Rec."Meta Prompt Code") + { + Caption = 'Metaprompt Code'; + ToolTip = 'Specifies the code of the metaprompt.'; + } + field("Prompt Code"; Rec."Prompt Code") + { + Caption = 'Prompt Code'; + ToolTip = 'Specifies the code of the prompt.'; + } + } + part("Phases"; "SOA Instruction Phases") + { + SubPageLink = "Template Name" = field(Name); + Editable = Rec.Name <> ''; + UpdatePropagation = Both; + } + } + } + + actions + { + area(Processing) + { + action("Show Metaprompt") + { + Caption = 'Show Metaprompt'; + Image = Action; + ToolTip = 'Show the metaprompt for the selected template'; + + trigger OnAction() + begin + Rec.ShowMetaPrompt(); + end; + } + action("Show Prompt") + { + Caption = 'Show Prompt'; + Image = Action; + ToolTip = 'Show the prompt for the selected template'; + + trigger OnAction() + begin + Rec.ShowPrompt(); + end; + } + } + area(Navigation) + { + action("All tasks and policies") + { + Caption = 'All tasks and policies'; + Image = TaskList; + ToolTip = 'Show all tasks and policies.'; + RunObject = page "SOA Instruct. Tasks/Policies"; + } + action("All prompts") + { + Caption = 'All prompts'; + Image = Action; + ToolTip = 'Show all prompts.'; + RunObject = page "SOA Instruction Prompt List"; + } + } + area(Promoted) + { + group(Prompts) + { + actionref("Show Metaprompt_Promoted"; "Show Metaprompt") { } + actionref("Show Prompt_Promoted"; "Show Prompt") { } + } + group(Navigate) + { + actionref("All tasks and policies_Promoted"; "All tasks and policies") { } + actionref("All prompts_Promoted"; "All prompts") { } + } + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionsMgt.Codeunit.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionsMgt.Codeunit.al new file mode 100644 index 0000000000..372bc2b471 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAInstructionsMgt.Codeunit.al @@ -0,0 +1,162 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; +using System.Reflection; +using System.Utilities; + +codeunit 4305 "SOA Instructions Mgt." +{ + trigger OnRun() + begin + + end; + + var + PromptTok: Label 'Prompt'; + + procedure SetPrompt(var InstructionPrompt: Record "SOA Instruction Prompt"; PromptTextToBlob: Text) + var + TempBlob: Codeunit "Temp Blob"; + RecRef: RecordRef; + PromptStream: OutStream; + begin + RecRef.GetTable(InstructionPrompt); + TempBlob.CreateOutStream(PromptStream, TextEncoding::UTF8); + PromptStream.Write(PromptTextToBlob); + TempBlob.ToRecordRef(RecRef, InstructionPrompt.FieldNo(Prompt)); + RecRef.SetTable(InstructionPrompt); + end; + + procedure GetPromptText(InstructionPrompt: Record "SOA Instruction Prompt") Result: Text + var + TempBlob: Codeunit "Temp Blob"; + begin + TempBlob.FromRecord(InstructionPrompt, InstructionPrompt.FieldNo(Prompt)); + if not TempBlob.HasValue() then + exit; + + Result := GetPromptTextFromBlob(TempBlob); + end; + + procedure GetPromptText(InstructionTaskPolicy: Record "SOA Instruction Task/Policy") Result: Text + var + InstructionPrompt: Record "SOA Instruction Prompt"; + TempBlob: Codeunit "Temp Blob"; + begin + Result := ''; + + if not InstructionPrompt.Get(InstructionTaskPolicy."Prompt Code") then + exit; + + TempBlob.FromRecord(InstructionPrompt, InstructionPrompt.FieldNo(Prompt)); + if not TempBlob.HasValue() then + exit; + + Result := GetPromptTextFromBlob(TempBlob); + end; + + procedure GetPromptText(InstructionPhase: Record "SOA Instruction Phase") Result: Text + var + InstructionPhaseStep: Record "SOA Instruction Phase Step"; + InstructionTaskPolicy: Record "SOA Instruction Task/Policy"; + InstructionPrompt: Record "SOA Instruction Prompt"; + TempBlob: Codeunit "Temp Blob"; + TextBuilder: TextBuilder; + PromptText: Text; + begin + Result := ''; + + if InstructionPrompt.Get(InstructionPhase."Prompt Code") then begin + TempBlob.FromRecord(InstructionPrompt, InstructionPrompt.FieldNo(Prompt)); + if TempBlob.HasValue() then begin + PromptText := GetPromptTextFromBlob(TempBlob); + TextBuilder.AppendLine(PromptText); + end; + end; + + InstructionPhaseStep.SetRange(Phase, InstructionPhase.Phase); + InstructionPhaseStep.SetFilter(Enabled, '<>%1', InstructionPhaseStep.Enabled::No); + if InstructionPhaseStep.FindSet() then + repeat + InstructionTaskPolicy.Get(InstructionPhaseStep."Step Type", InstructionPhaseStep."Step Name"); + PromptText := GetPromptText(InstructionTaskPolicy); + TextBuilder.AppendLine(PromptText); + until InstructionPhaseStep.Next() = 0; + + Result := TextBuilder.ToText(); + end; + + procedure GetPromptText(InstructionTemplate: Record "SOA Instruction Template") Result: Text + var + InstructionPhase: Record "SOA Instruction Phase"; + InstructionPrompt: Record "SOA Instruction Prompt"; + TempBlob: Codeunit "Temp Blob"; + TemplatePromptText: Text; + PhasePromptText: Text; + PhasePlaceholderTok: Label '<>', Locked = true; + begin + Result := ''; + + if not InstructionPrompt.Get(InstructionTemplate."Prompt Code") then + exit; + + TempBlob.FromRecord(InstructionPrompt, InstructionPrompt.FieldNo(Prompt)); + if not TempBlob.HasValue() then + exit; + + TemplatePromptText := GetPromptTextFromBlob(TempBlob); + + InstructionPhase.SetRange("Template Name", InstructionTemplate.Name); + if InstructionPhase.FindSet() then + repeat + if InstructionPhase.Enabled = InstructionPhase.Enabled::No then + PhasePromptText := '' + else + PhasePromptText := GetPromptText(InstructionPhase); + TemplatePromptText := TemplatePromptText.Replace(StrSubstNo(PhasePlaceholderTok, InstructionPhase."Phase Order No."), PhasePromptText); + until InstructionPhase.Next() = 0; + + Result := TemplatePromptText; + end; + + procedure GetMetaPromptText(InstructionTemplate: Record "SOA Instruction Template") Result: Text + var + InstructionPrompt: Record "SOA Instruction Prompt"; + TempBlob: Codeunit "Temp Blob"; + begin + Result := ''; + + if not InstructionPrompt.Get(InstructionTemplate."Meta Prompt Code") then + exit; + + TempBlob.FromRecord(InstructionPrompt, InstructionPrompt.FieldNo(Prompt)); + if not TempBlob.HasValue() then + exit; + + Result := GetPromptTextFromBlob(TempBlob); + end; + + local procedure GetPromptTextFromBlob(var TempBlob: Codeunit "Temp Blob"): Text + var + TypeHelper: Codeunit "Type Helper"; + PromptStream: InStream; + begin + TempBlob.CreateInStream(PromptStream, TextEncoding::UTF8); + exit(TypeHelper.TryReadAsTextWithSepAndFieldErrMsg(PromptStream, TypeHelper.LFSeparator(), PromptTok)); + end; + + [EventSubscriber(ObjectType::Table, Database::"SOA Instruction Prompt", OnAfterDeleteEvent, '', false, false)] + local procedure ClearPromptLinks(var Rec: Record "SOA Instruction Prompt") + var + InstructionTemplate: Record "SOA Instruction Template"; + InstructionPhase: Record "SOA Instruction Phase"; + begin + InstructionTemplate.SetRange("Prompt Code", Rec.Code); + InstructionTemplate.ModifyAll("Prompt Code", '', false); + InstructionPhase.SetRange("Prompt Code", Rec.Code); + InstructionPhase.ModifyAll("Prompt Code", '', false); + end; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhaseStepType.Enum.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhaseStepType.Enum.al new file mode 100644 index 0000000000..3825f91da8 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhaseStepType.Enum.al @@ -0,0 +1,21 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +enum 4308 "SOA Phase Step Type" +{ + Extensible = false; + Caption = 'Sales Order Taking Agent Phase Step Type'; + + value(0; "Task") + { + Caption = 'Task'; + } + value(1; "Policy") + { + Caption = 'Policy'; + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhases.Enum.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhases.Enum.al new file mode 100644 index 0000000000..3283dd8820 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAPhases.Enum.al @@ -0,0 +1,33 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker.Instructions; + +enum 4307 "SOA Phases" +{ + Extensible = false; + Caption = 'Sales Order Taking Agent Phases'; + + value(1; "Identify Business Partner") + { + Caption = 'Identify business partner'; + } + value(2; "Create Sales Document") + { + Caption = 'Create sales document'; + } + value(3; "Add Details to Sales Document") + { + Caption = 'Add details to sales document'; + } + value(4; "Send Sales Document") + { + Caption = 'Send sales document'; + } + value(5; "Process Response") + { + Caption = 'Process response'; + } +} \ No newline at end of file diff --git a/Apps/W1/FieldServiceIntegration/app/src/Enums/FSWorkOrderLineSynchRule.Enum.al b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAYesNoToggleState.Enum.al similarity index 53% rename from Apps/W1/FieldServiceIntegration/app/src/Enums/FSWorkOrderLineSynchRule.Enum.al rename to Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAYesNoToggleState.Enum.al index 130c53ff08..98b54a6242 100644 --- a/Apps/W1/FieldServiceIntegration/app/src/Enums/FSWorkOrderLineSynchRule.Enum.al +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Instructions/SOAYesNoToggleState.Enum.al @@ -2,19 +2,24 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. // ------------------------------------------------------------------------------------------------ -namespace Microsoft.Integration.DynamicsFieldService; -enum 6611 "FS Work Order Line Synch. Rule" +namespace Agent.SalesOrderTaker.Instructions; + +enum 4305 "SOA Yes/No Toggle State" { - AssignmentCompatibility = true; - Extensible = true; + Extensible = false; + Caption = 'Sales Order Taking Agent Yes/No Toggle State'; - value(0; LineUsed) + value(0; No) + { + Caption = 'No'; + } + value(1; Yes) { - Caption = 'when work order product/service is used'; + Caption = 'Yes'; } - value(1; WorkOrderCompleted) + value(2; "Yes (Read-only)") { - Caption = 'when work order is completed'; + Caption = 'Yes (Read-only)'; } } \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAEdit.permissionset.al b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAEdit.permissionset.al new file mode 100644 index 0000000000..122f639581 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAEdit.permissionset.al @@ -0,0 +1,19 @@ + +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using System.Security.AccessControl; + +permissionset 4330 "SOA - Edit" +{ + Caption = 'Sales Order Taker Agent - Edit'; + Assignable = true; + IncludedPermissionSets = LOGIN, + "Webhook - Edit", + "D365 SALES", + "SOA - Read"; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsEdit.permissionset.al b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsEdit.permissionset.al new file mode 100644 index 0000000000..0ce1619b68 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsEdit.permissionset.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Agent.SalesOrderTaker.Instructions; + +permissionset 4335 "SOA Instructions - Edit" +{ + Caption = 'Sales Order Taker Agent Instructions - Edit'; + Assignable = false; + IncludedPermissionSets = "SOA Instructions - Read"; + + Permissions = + tabledata "SOA Instruction Phase" = IMD, + tabledata "SOA Instruction Phase Step" = IMD, + tabledata "SOA Instruction Prompt" = IMD, + tabledata "SOA Instruction Task/Policy" = IMD, + tabledata "SOA Instruction Template" = IMD; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsRead.permissionset.al b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsRead.permissionset.al new file mode 100644 index 0000000000..e2031d27ed --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsRead.permissionset.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Agent.SalesOrderTaker.Instructions; + +permissionset 4333 "SOA Instructions - Read" +{ + Caption = 'Sales Order Taker Agent Instructions - Read'; + Assignable = false; + IncludedPermissionSets = "SOA - Objects"; + + Permissions = + tabledata "SOA Instruction Phase" = R, + tabledata "SOA Instruction Phase Step" = R, + tabledata "SOA Instruction Prompt" = R, + tabledata "SOA Instruction Task/Policy" = R, + tabledata "SOA Instruction Template" = R; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsView.permissionset.al b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsView.permissionset.al new file mode 100644 index 0000000000..f3652944d3 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAInstructionsView.permissionset.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Agent.SalesOrderTaker.Instructions; + +permissionset 4334 "SOA Instructions - View" +{ + Caption = 'Sales Order Taker Agent Instructions - View'; + Assignable = false; + IncludedPermissionSets = "SOA Instructions - Read"; + + Permissions = + tabledata "SOA Instruction Phase" = imd, + tabledata "SOA Instruction Phase Step" = imd, + tabledata "SOA Instruction Prompt" = imd, + tabledata "SOA Instruction Task/Policy" = imd, + tabledata "SOA Instruction Template" = imd; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAObjects.PermissionSet.al b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAObjects.PermissionSet.al new file mode 100644 index 0000000000..8677dd12d8 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOAObjects.PermissionSet.al @@ -0,0 +1,38 @@ + +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Agent.SalesOrderTaker.Instructions; +using Microsoft.CRM.Contact; +using Microsoft.Sales.Document; +using Microsoft.Inventory.Item; +using Microsoft.Sales.Customer; + +permissionset 4331 "SOA - Objects" +{ + Caption = 'Sales Order Taker Agent - Objects'; + Assignable = false; + + Permissions = + codeunit "SOA Instructions Mgt." = X, + page "Contact Card" = X, + page "Contact List" = X, + page "Customer Card" = X, + page "Customer List" = X, + page "Item List" = X, + page "Item Lookup" = X, + page "Sales Quote" = X, + page "Sales Quotes" = X, + page "Sales Quote Subform" = X, + page "SOA Instruction Phases" = X, + page "SOA Instruction Phase Steps" = X, + page "SOA Instruction Prompt Card" = X, + page "SOA Instruction Prompt List" = X, + page "SOA Instructions" = X, + page "SOA Instruction Templates" = X, + page "SOA Instruct. Tasks/Policies" = X; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOARead.permissionset.al b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOARead.permissionset.al new file mode 100644 index 0000000000..67bd9d924a --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Permissions/SOARead.permissionset.al @@ -0,0 +1,19 @@ + +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Warehouse.Activity; + +permissionset 4332 "SOA - Read" +{ + Caption = 'Sales Order Taker Agent - Read'; + Assignable = true; + IncludedPermissionSets = "SOA - Objects"; + + Permissions = + tabledata "Warehouse Activity Line" = R; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactCard.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactCard.PageCust.al new file mode 100644 index 0000000000..104d9acd1f --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactCard.PageCust.al @@ -0,0 +1,123 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.CRM.Contact; + +pagecustomization "SOA Contact Card" customizes "Contact Card" +{ + ClearActions = true; + ClearLayout = true; + + layout + { + modify("No.") + { + Visible = true; + Editable = false; + } + modify("Name") + { + Visible = true; + } + modify("Name 2") + { + Visible = true; + } + modify(Type) + { + Visible = true; + } + modify("Company No.") + { + Visible = true; + } + modify("Company Name") + { + Visible = true; + } + modify("Job Title") + { + Visible = true; + } + modify("Salutation Code") + { + Visible = true; + } + modify(Address) + { + Visible = true; + } + modify("Address 2") + { + Visible = true; + } + modify("Country/Region Code") + { + Visible = true; + } + modify("Post Code") + { + Visible = true; + } + modify(City) + { + Visible = true; + } + modify("Phone No.") + { + Visible = true; + } + modify("Mobile Phone No.") + { + Visible = true; + } + modify("E-Mail") + { + Visible = true; + } + modify("Fax No.") + { + Visible = true; + } + modify("Home Page") + { + Visible = true; + } + modify("Correspondence Type") + { + Visible = true; + } + } + + actions + { + modify("Co&mments") + { + Visible = true; + } + modify("Co&mments_Promoted") + { + Visible = true; + } + modify(SalesQuotes) + { + Visible = true; + } + modify(SalesQuotes_Promoted) + { + Visible = true; + } + modify(NewSalesQuote) + { + Visible = true; + } + modify(NewSalesQuote_Promoted) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactList.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactList.PageCust.al new file mode 100644 index 0000000000..d4feac255b --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAContactList.PageCust.al @@ -0,0 +1,83 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.CRM.Contact; + +pagecustomization "SOA Contact List" customizes "Contact List" +{ + ClearActions = true; + ClearLayout = true; + + layout + { + modify("No.") + { + Visible = true; + Editable = false; + } + modify("Name") + { + Visible = true; + } + modify("Name 2") + { + Visible = true; + } + modify("Company Name") + { + Visible = true; + } + modify("Job Title") + { + Visible = true; + } + modify("Country/Region Code") + { + Visible = true; + } + modify("Post Code") + { + Visible = true; + } + modify("Phone No.") + { + Visible = true; + } + modify("Mobile Phone No.") + { + Visible = true; + } + modify("E-Mail") + { + Visible = true; + } + modify("Fax No.") + { + Visible = true; + } + } + + actions + { + modify("Co&mments") + { + Visible = true; + } + modify("Co&mments_Promoted") + { + Visible = true; + } + modify(NewSalesQuote) + { + Visible = true; + } + modify(NewSalesQuote_Promoted) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerCard.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerCard.PageCust.al new file mode 100644 index 0000000000..05dab4be06 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerCard.PageCust.al @@ -0,0 +1,140 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Sales.Customer; + +pagecustomization "SOA Customer Card" customizes "Customer Card" +{ + ClearActions = true; + ClearLayout = true; + + layout + { + modify("No.") + { + Visible = true; + Editable = false; + } + modify(Name) + { + Visible = true; + } + modify("Name 2") + { + Visible = true; + } + modify(Blocked) + { + Visible = true; + Editable = false; + } + modify(Address) + { + Visible = true; + } + modify("Address 2") + { + Visible = true; + } + modify("Country/Region Code") + { + Visible = true; + } + modify(City) + { + Visible = true; + } + modify(County) + { + Visible = true; + } + modify("Post Code") + { + Visible = true; + } + modify("Phone No.") + { + Visible = true; + } + modify(MobilePhoneNo) + { + Visible = true; + } + modify("E-Mail") + { + Visible = true; + } + modify("Fax No.") + { + Visible = true; + } + modify("Home Page") + { + Visible = true; + } + modify("Primary Contact No.") + { + Visible = true; + } + modify(ContactName) + { + Visible = true; + } + modify("Bill-to Customer No.") + { + Visible = true; + } + modify("Gen. Bus. Posting Group") + { + Visible = true; + } + modify("VAT Bus. Posting Group") + { + Visible = true; + } + modify("Customer Posting Group") + { + Visible = true; + } + modify("Payment Terms Code") + { + Visible = true; + } + } + + actions + { + modify(Contact) + { + Visible = true; + } + modify(Contact_Promoted) + { + Visible = true; + } + modify(ApplyTemplate) + { + Visible = true; + } + modify(ApplyTemplate_Promoted) + { + Visible = true; + } + modify(NewSalesQuote) + { + Visible = true; + } + modify(NewSalesQuote_Promoted) + { + Visible = true; + } + modify(Quotes) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerList.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerList.PageCust.al new file mode 100644 index 0000000000..fefa0e38a7 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOACustomerList.PageCust.al @@ -0,0 +1,97 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Sales.Customer; + +pagecustomization "SOA Customer List" customizes "Customer List" +{ + ClearActions = true; + ClearLayout = true; + ClearViews = true; + + layout + { + modify("No.") + { + Visible = true; + Editable = false; + } + modify(Name) + { + Visible = true; + } + modify("Name 2") + { + Visible = true; + } + modify(Blocked) + { + Visible = true; + Editable = false; + } + modify("Country/Region Code") + { + Visible = true; + } + modify("Post Code") + { + Visible = true; + } + modify("Phone No.") + { + Visible = true; + } + modify("Gen. Bus. Posting Group") + { + Visible = true; + } + modify("VAT Bus. Posting Group") + { + Visible = true; + } + modify("Customer Posting Group") + { + Visible = true; + } + modify("Payment Terms Code") + { + Visible = true; + } + addafter(Name) + { + field("E-Mail"; Rec."E-Mail") + { + ApplicationArea = All; + Caption = 'E-Mail'; + } + } + } + + actions + { + modify(ApplyTemplate) + { + Visible = true; + } + modify(ApplyTemplate_Promoted) + { + Visible = true; + } + modify(NewSalesQuote) + { + Visible = true; + } + modify(NewSalesQuote_Promoted) + { + Visible = true; + } + modify(Quotes) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemList.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemList.PageCust.al new file mode 100644 index 0000000000..de87c3c68a --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemList.PageCust.al @@ -0,0 +1,97 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Inventory.Item; + +pagecustomization "SOA Item List" customizes "Item List" +{ + ClearActions = true; + ClearLayout = true; + ClearViews = true; + + layout + { + modify("No.") + { + Visible = true; + } + modify(Description) + { + Visible = true; + } + modify("Description 2") + { + Visible = true; + } + modify(Type) + { + Visible = true; + } + modify("Substitutes Exist") + { + Visible = true; + } + modify("Stockkeeping Unit Exists") + { + Visible = true; + } + modify("Base Unit of Measure") + { + Visible = true; + } + modify("Unit Cost") + { + Visible = true; + } + modify("Unit Price") + { + Visible = true; + } + modify(InventoryField) + { + Visible = true; + } + modify("Inventory Posting Group") + { + Visible = true; + } + modify("Gen. Prod. Posting Group") + { + Visible = true; + } + modify("VAT Prod. Posting Group") + { + Visible = true; + } + modify("Item Disc. Group") + { + Visible = true; + } + modify("Item Category Code") + { + Visible = true; + } + modify(Blocked) + { + Visible = true; + Editable = false; + } + modify("Sales Unit of Measure") + { + Visible = true; + } + modify("Item Tracking Code") + { + Visible = true; + } + } + + actions + { + + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemLookup.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemLookup.PageCust.al new file mode 100644 index 0000000000..3401d94591 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOAItemLookup.PageCust.al @@ -0,0 +1,68 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Inventory.Item; + +pagecustomization "SOA Item Lookup" customizes "Item Lookup" +{ + ClearActions = true; + ClearLayout = true; + ClearViews = true; + + layout + { + modify("No.") + { + Visible = true; + } + modify(Description) + { + Visible = true; + } + modify("Base Unit of Measure") + { + Visible = true; + } + modify("Unit Cost") + { + Visible = true; + } + modify("Unit Price") + { + Visible = true; + } + modify(InventoryCtrl) + { + Visible = true; + } + modify("Item Category Code") + { + Visible = true; + } + modify(Blocked) + { + Visible = true; + Editable = false; + } + modify("Sales Unit of Measure") + { + Visible = true; + } + } + + actions + { + modify(ItemList) + { + Visible = true; + } + modify(ItemList_Promoted) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuote.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuote.PageCust.al new file mode 100644 index 0000000000..5aa0e77679 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuote.PageCust.al @@ -0,0 +1,185 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Sales.Document; + +pagecustomization "SOA Sales Quote" customizes "Sales Quote" +{ + ClearActions = true; + ClearLayout = true; + + layout + { + modify("No.") + { + Visible = true; + Editable = false; + } + modify("Sell-to Customer No.") + { + Visible = true; + } + modify("Sell-to Customer Name") + { + Visible = true; + } + modify("External Document No.") + { + Visible = true; + } + modify("Your Reference") + { + Visible = true; + } + modify("Salesperson Code") + { + Visible = true; + } + modify("Sell-to Address") + { + Visible = true; + } + modify("Sell-to Address 2") + { + Visible = true; + } + modify("Sell-to City") + { + Visible = true; + } + modify("Sell-to County") + { + Visible = true; + } + modify("Sell-to Post Code") + { + Visible = true; + } + modify("Sell-to Country/Region Code") + { + Visible = true; + } + modify("Sell-to Contact No.") + { + Visible = true; + } + modify(SellToPhoneNo) + { + Visible = true; + } + modify(SellToMobilePhoneNo) + { + Visible = true; + } + modify(SellToEmail) + { + Visible = true; + } + modify("Sell-to Contact") + { + Visible = true; + } + modify("Order Date") + { + Visible = true; + } + modify("Document Date") + { + Visible = true; + } + modify("Due Date") + { + Visible = true; + } + modify("Requested Delivery Date") + { + Visible = true; + } + modify(Status) + { + Visible = true; + } + modify("Prices Including VAT") + { + Visible = true; + } + modify("Payment Terms Code") + { + Visible = true; + } + modify("Tax Liable") + { + Visible = true; + } + modify("Tax Area Code") + { + Visible = true; + } + modify("Shipment Date") + { + Visible = true; + } + + // parts + modify(SalesLines) + { + Visible = true; + } + } + + actions + { + modify(Customer) + { + Visible = true; + } + modify(Customer_Promoted) + { + Visible = true; + } + modify("C&ontact") + { + Visible = true; + } + modify("C&ontact_Promoted") + { + Visible = true; + } + modify("Co&mments") + { + Visible = true; + } + modify("Co&mments_Promoted") + { + Visible = true; + } + modify(DocAttach) + { + Visible = true; + } + modify(DocAttach_Promoted) + { + Visible = true; + } + modify(MakeOrder) + { + Visible = true; + } + modify(MakeOrder_Promoted) + { + Visible = true; + } + modify(SendApprovalRequest) + { + Visible = true; + } + modify(SendApprovalRequest_Promoted) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuoteSubform.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuoteSubform.PageCust.al new file mode 100644 index 0000000000..448e2eddb9 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuoteSubform.PageCust.al @@ -0,0 +1,85 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Sales.Document; + +pagecustomization "SOA Sales Quote Subform" customizes "Sales Quote Subform" +{ + ClearActions = true; + ClearLayout = true; + + layout + { + modify("No.") + { + Visible = true; + } + modify("Item Reference No.") + { + Visible = true; + } + modify("Variant Code") + { + Visible = true; + } + modify("Description") + { + Visible = true; + } + modify(Quantity) + { + Visible = true; + } + modify("Unit of Measure Code") + { + Visible = true; + } + modify("Unit Price") + { + Visible = true; + } + modify("Tax Liable") + { + Visible = true; + } + modify("Tax Area Code") + { + Visible = true; + } + modify("Tax Group Code") + { + Visible = true; + } + modify("Line Amount") + { + Visible = true; + } + + // totals + modify("Subtotal Excl. VAT") + { + Visible = true; + } + modify("Total Amount Excl. VAT") + { + Visible = true; + } + modify("Total VAT Amount") + { + Visible = true; + } + modify("Total Amount Incl. VAT") + { + Visible = true; + } + } + + actions + { + + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuotes.PageCust.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuotes.PageCust.al new file mode 100644 index 0000000000..f8511a1048 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/PageCustomizations/SOASalesQuotes.PageCust.al @@ -0,0 +1,111 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Sales.Document; + +pagecustomization "SOA Sales Quotes" customizes "Sales Quotes" +{ + ClearActions = true; + ClearLayout = true; + ClearViews = true; + + layout + { + modify("No.") + { + Visible = true; + } + modify("Sell-to Customer No.") + { + Visible = true; + } + modify("Sell-to Customer Name") + { + Visible = true; + } + modify("External Document No.") + { + Visible = true; + } + modify("Your Reference") + { + Visible = true; + } + modify("Salesperson Code") + { + Visible = true; + } + modify("Sell-to Post Code") + { + Visible = true; + } + modify("Sell-to Country/Region Code") + { + Visible = true; + } + modify("Sell-to Contact") + { + Visible = true; + } + modify("Document Date") + { + Visible = true; + } + modify("Due Date") + { + Visible = true; + } + modify("Requested Delivery Date") + { + Visible = true; + } + modify(Status) + { + Visible = true; + } + } + + actions + { + modify(Customer) + { + Visible = true; + } + modify(Customer_Promoted) + { + Visible = true; + } + modify("C&ontact") + { + Visible = true; + } + modify("C&ontact_Promoted") + { + Visible = true; + } + modify("Co&mments") + { + Visible = true; + } + modify("Co&mments_Promoted") + { + Visible = true; + } + modify(MakeOrder) + { + Visible = true; + } + modify(MakeOrder_Promoted) + { + Visible = true; + } + modify(SendApprovalRequest) + { + Visible = true; + } + } +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/Profile/SalesOrderTakerAgent.Profile.al b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/SalesOrderTakerAgent.Profile.al new file mode 100644 index 0000000000..8c23eb8cfd --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/Profile/SalesOrderTakerAgent.Profile.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +profile "Sales Order Taker Agent" +{ + Caption = 'Sales Order Taker Agent'; + Description = 'Page customizations for Sales Order Taker Agent'; + RoleCenter = "SOA Role Center"; + Customizations = "SOA Customer Card", + "SOA Customer List", + "SOA Item List", + "SOA Item Lookup", + "SOA Sales Quote", + "SOA Sales Quotes", + "SOA Sales Quote Subform", + "SOA Contact Card", + "SOA Contact List"; +} \ No newline at end of file diff --git a/Apps/W1/SalesOrderTakingAgent/app/src/RoleCenter/SOARoleCenter.Page.al b/Apps/W1/SalesOrderTakingAgent/app/src/RoleCenter/SOARoleCenter.Page.al new file mode 100644 index 0000000000..e64a1f3a87 --- /dev/null +++ b/Apps/W1/SalesOrderTakingAgent/app/src/RoleCenter/SOARoleCenter.Page.al @@ -0,0 +1,109 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace Agent.SalesOrderTaker; + +using Microsoft.Sales.Document; +using Microsoft.CRM.Contact; +using Microsoft.Sales.Customer; +using Microsoft.Inventory.Item; + +page 4313 "SOA Role Center" +{ + PageType = RoleCenter; + Caption = 'Sales Order Taker Agent'; + + layout + { + area(rolecenter) + { + } + } + + actions + { + area(embedding) + { + ToolTip = 'Manage sales processes, view KPIs, and access your favorite items and customers.'; + action(Items) + { + ApplicationArea = Basic, Suite; + Caption = 'Items'; + Image = Item; + RunObject = Page "Item List"; + ToolTip = 'View or edit detailed information for the products that you trade in. The item card can be of type Inventory or Service to specify if the item is a physical unit or a labor time unit. Here you also define if items in inventory or on incoming orders are automatically reserved for outbound documents and whether order tracking links are created between demand and supply to reflect planning actions.'; + } + action(Customers) + { + ApplicationArea = Basic, Suite; + Caption = 'Customers'; + Image = Customer; + RunObject = Page "Customer List"; + ToolTip = 'View or edit detailed information for the customers that you trade with. From each customer card, you can open related information, such as sales statistics and ongoing orders, and you can define special prices and line discounts that you grant if certain conditions are met.'; + } + action(Contacts) + { + ApplicationArea = Basic, Suite; + Caption = 'Contacts'; + Image = ContactReference; + RunObject = Page "Contact List"; + ToolTip = 'View or edit detailed information for the contacts that you trade with. From each contact card, you can open related information, such as sales statistics and ongoing orders, and you can define special prices and line discounts that you grant if certain conditions are met.'; + } + action(SalesQuotes) + { + ApplicationArea = Basic, Suite; + Caption = 'Sales Quotes'; + Image = Quote; + RunObject = Page "Sales Quotes"; + ToolTip = 'View or edit the existing Sales Quotes.'; + } + } + area(sections) + { + group(SalesActions) + { + Caption = 'Sales'; + Image = Sales; + ToolTip = 'Make quotes, orders, and credit memos to customers. Manage customers and view transaction history.'; + + action("Sales Quotes") + { + ApplicationArea = Basic, Suite; + Caption = 'Sales Quotes'; + RunObject = Page "Sales Quotes"; + ToolTip = 'Make offers to customers to sell certain products on certain delivery and payment terms. While you negotiate with a customer, you can change and resend the sales quote as much as needed. When the customer accepts the offer, you convert the sales quote to a sales invoice or a sales order in which you process the sale.'; + } + action("Sales Orders") + { + ApplicationArea = Basic, Suite; + Caption = 'Sales Orders'; + RunObject = Page "Sales Order List"; + ToolTip = 'Record your agreements with customers to sell certain products on certain delivery and payment terms. Sales orders, unlike sales invoices, allow you to ship partially, deliver directly from your vendor to your customer, initiate warehouse handling, and print various customer-facing documents. Sales invoicing is integrated in the sales order process.'; + } + } + } + area(creation) + { + action("Sales &Quote") + { + ApplicationArea = Basic, Suite; + Caption = 'Sales &Quote'; + Image = NewSalesQuote; + RunObject = Page "Sales Quote"; + RunPageMode = Create; + ToolTip = 'Create a new sales quote to offer items or services to a customer.'; + } + action("Sales &Order") + { + ApplicationArea = Basic, Suite; + Caption = 'Sales &Order'; + Image = Document; + RunObject = Page "Sales Order"; + RunPageMode = Create; + ToolTip = 'Create a new sales order for items or services.'; + } + } + } +} \ No newline at end of file diff --git a/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLFFOrdersFromOrder.Codeunit.al b/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLFFOrdersFromOrder.Codeunit.al index 0d64623eda..9679ddbb71 100644 --- a/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLFFOrdersFromOrder.Codeunit.al +++ b/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLFFOrdersFromOrder.Codeunit.al @@ -10,7 +10,7 @@ codeunit 30267 "Shpfy GQL FFOrdersFromOrder" implements "Shpfy IGraphQL" /// Return value of type Text. internal procedure GetGraphQL(): Text begin - exit('{"query":"{order(id: \"gid:\/\/shopify\/Order\/{{OrderId}}\") { legacyResourceId fulfillmentOrders(first: 25, query:\"-status:closed\") { pageInfo { hasNextPage } edges { cursor node { id updatedAt status assignedLocation {location {legacyResourceId}} order {legacyResourceId} deliveryMethod {methodType}}}}}}"}'); + exit('{"query":"{order(id: \"gid:\/\/shopify\/Order\/{{OrderId}}\") { legacyResourceId fulfillmentOrders(first: 25) { pageInfo { hasNextPage } edges { cursor node { id updatedAt status assignedLocation {location {legacyResourceId}} order {legacyResourceId} deliveryMethod {methodType}}}}}}"}'); end; /// diff --git a/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLNextFFOrdersFromOrd.Codeunit.al b/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLNextFFOrdersFromOrd.Codeunit.al index 9757e81dd0..2e887d20df 100644 --- a/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLNextFFOrdersFromOrd.Codeunit.al +++ b/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLNextFFOrdersFromOrd.Codeunit.al @@ -10,7 +10,7 @@ codeunit 30268 "Shpfy GQL NextFFOrdersFromOrd" implements "Shpfy IGraphQL" /// Return value of type Text. internal procedure GetGraphQL(): Text begin - exit('{"query":"{order(id: \"gid:\/\/shopify\/Order\/{{OrderId}}\") { legacyResourceId fulfillmentOrders(first: 25, after:\"{{After}}\", query:\"-status:closed\") { pageInfo { hasNextPage } edges { cursor node { id updatedAt assignedLocation {location {legacyResourceId}} order {legacyResourceId} deliveryMethod {methodType}}}}}}"}'); + exit('{"query":"{order(id: \"gid:\/\/shopify\/Order\/{{OrderId}}\") { legacyResourceId fulfillmentOrders(first: 25, after:\"{{After}}\") { pageInfo { hasNextPage } edges { cursor node { id updatedAt status assignedLocation {location {legacyResourceId}} order {legacyResourceId} deliveryMethod {methodType}}}}}}"}'); end; /// diff --git a/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLOrderTransactions.Codeunit.al b/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLOrderTransactions.Codeunit.al new file mode 100644 index 0000000000..e48d7b6b0d --- /dev/null +++ b/Apps/W1/Shopify/app/src/GraphQL/Codeunits/ShpfyGQLOrderTransactions.Codeunit.al @@ -0,0 +1,27 @@ +namespace Microsoft.Integration.Shopify; + +/// +/// Codeunit Shpfy GQL OrderTransactions (ID 30312) implements Interface Shpfy IGraphQL. +/// +codeunit 30312 "Shpfy GQL OrderTransactions" implements "Shpfy IGraphQL" +{ + Access = Internal; + + /// + /// GetGraphQL. + /// + /// Return value of type Text. + internal procedure GetGraphQL(): Text + begin + exit('{"query":"{ order(id: \"gid://shopify/Order/{{OrderId}}\") { transactions { authorizationCode createdAt errorCode formattedGateway gateway id kind paymentId receiptJson status test amountSet { presentmentMoney { amount currencyCode } shopMoney { amount currencyCode }} paymentDetails { ... on CardPaymentDetails { avsResultCode bin cvvResultCode number company }}}}}"}'); + end; + + /// + /// GetExpectedCost. + /// + /// Return value of type Integer. + internal procedure GetExpectedCost(): Integer + begin + exit(3); + end; +} diff --git a/Apps/W1/Shopify/app/src/GraphQL/Enums/ShpfyGraphQLType.Enum.al b/Apps/W1/Shopify/app/src/GraphQL/Enums/ShpfyGraphQLType.Enum.al index 4315a4f5e6..d6d2c8d75a 100644 --- a/Apps/W1/Shopify/app/src/GraphQL/Enums/ShpfyGraphQLType.Enum.al +++ b/Apps/W1/Shopify/app/src/GraphQL/Enums/ShpfyGraphQLType.Enum.al @@ -400,4 +400,9 @@ enum 30111 "Shpfy GraphQL Type" implements "Shpfy IGraphQL" Caption = 'Get Next Catalog Products'; Implementation = "Shpfy IGraphQL" = "Shpfy GQL NextCatalogProducts"; } + value(78; GetOrderTransactions) + { + Caption = 'Get Order Transactions'; + Implementation = "Shpfy IGraphQL" = "Shpfy GQL OrderTransactions"; + } } diff --git a/Apps/W1/Shopify/app/src/Order Fulfillments/Codeunits/ShpfyFulfillmentOrdersAPI.Codeunit.al b/Apps/W1/Shopify/app/src/Order Fulfillments/Codeunits/ShpfyFulfillmentOrdersAPI.Codeunit.al index 2dae5f1e26..0e570c6b50 100644 --- a/Apps/W1/Shopify/app/src/Order Fulfillments/Codeunits/ShpfyFulfillmentOrdersAPI.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order Fulfillments/Codeunits/ShpfyFulfillmentOrdersAPI.Codeunit.al @@ -168,6 +168,7 @@ codeunit 30238 "Shpfy Fulfillment Orders API" FulfillmentOrderLine."Shopify Variant Id" := JsonHelper.GetValueAsBigInteger(JNode, 'lineItem.variant.legacyResourceId'); FulfillmentOrderLine."Total Quantity" := JsonHelper.GetValueAsDecimal(JNode, 'totalQuantity'); FulfillmentOrderLine."Remaining Quantity" := JsonHelper.GetValueAsDecimal(JNode, 'remainingQuantity'); + FulfillmentOrderLine."Fulfillment Status" := FulfillmentOrderHeader.Status; FulfillmentOrderLine.Insert(); end else begin Modified := false; diff --git a/Apps/W1/Shopify/app/src/Order Fulfillments/Tables/ShpfyFulFillmentOrderLine.Table.al b/Apps/W1/Shopify/app/src/Order Fulfillments/Tables/ShpfyFulFillmentOrderLine.Table.al index 23f4136743..0857dfb0d2 100644 --- a/Apps/W1/Shopify/app/src/Order Fulfillments/Tables/ShpfyFulFillmentOrderLine.Table.al +++ b/Apps/W1/Shopify/app/src/Order Fulfillments/Tables/ShpfyFulFillmentOrderLine.Table.al @@ -58,6 +58,10 @@ table 30144 "Shpfy FulFillment Order Line" DataClassification = SystemMetadata; Editable = false; } + field(11; "Fulfillment Status"; Text[50]) + { + DataClassification = CustomerContent; + } } keys { diff --git a/Apps/W1/Shopify/app/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al b/Apps/W1/Shopify/app/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al index 97cd67b4f4..a6c5ab8c21 100644 --- a/Apps/W1/Shopify/app/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al @@ -47,7 +47,7 @@ codeunit 30228 "Shpfy Refunds API" else Parameters.Add('After', JsonHelper.GetValueAsText(JResponse, 'data.refund.refundLineItems.pageInfo.endCursor')); foreach JLine in JLines do - FillInRefundLine(RefundId, JLine.AsObject(), RefundHeader."Total Refunded Amount" > 0); + FillInRefundLine(RefundId, JLine.AsObject(), IsNonZeroOrReturnRefund(RefundHeader)); until not JsonHelper.GetValueAsBoolean(JResponse, 'data.refund.refundLineItems.pageInfo.hasNextPage'); end; @@ -88,7 +88,7 @@ codeunit 30228 "Shpfy Refunds API" DataCapture.Add(Database::"Shpfy Refund Header", RefundHeader.SystemId, JResponse); end; - local procedure FillInRefundLine(RefundId: BigInteger; JLine: JsonObject; NonZeroRefund: Boolean) + local procedure FillInRefundLine(RefundId: BigInteger; JLine: JsonObject; NonZeroOrReturnRefund: Boolean) var DataCapture: Record "Shpfy Data Capture"; RefundLine: Record "Shpfy Refund Line"; @@ -113,9 +113,14 @@ codeunit 30228 "Shpfy Refunds API" JsonHelper.GetValueIntoField(JLine, 'totalTaxSet.shopMoney.amount', RefundLineRecordRef, RefundLine.FieldNo("Total Tax Amount")); JsonHelper.GetValueIntoField(JLine, 'totalTaxSet.presentmentMoney.amount', RefundLineRecordRef, RefundLine.FieldNo("Presentment Total Tax Amount")); RefundLineRecordRef.SetTable(RefundLine); - RefundLine."Can Create Credit Memo" := NonZeroRefund; + RefundLine."Can Create Credit Memo" := NonZeroOrReturnRefund; RefundLine.Modify(); RefundLineRecordRef.Close(); DataCapture.Add(Database::"Shpfy Refund Line", RefundLine.SystemId, JLine); end; + + internal procedure IsNonZeroOrReturnRefund(RefundHeader: Record "Shpfy Refund Header"): Boolean + begin + exit((RefundHeader."Return Id" > 0) or (RefundHeader."Total Refunded Amount" > 0)); + end; } \ No newline at end of file diff --git a/Apps/W1/Shopify/app/src/Order Returns/Codeunits/ShpfyReturnsAPI.Codeunit.al b/Apps/W1/Shopify/app/src/Order Returns/Codeunits/ShpfyReturnsAPI.Codeunit.al index 688a377c28..0855c28be4 100644 --- a/Apps/W1/Shopify/app/src/Order Returns/Codeunits/ShpfyReturnsAPI.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order Returns/Codeunits/ShpfyReturnsAPI.Codeunit.al @@ -43,10 +43,10 @@ codeunit 30250 "Shpfy Returns API" JResponse := CommunicationMgt.ExecuteGraphQL(GraphQLType, LineParameters); GraphQLType := "Shpfy GraphQL Type"::GetNextReturnLines; JLines := JsonHelper.GetJsonArray(JResponse, 'data.return.returnLineItems.nodes'); - if Parameters.ContainsKey('After') then - Parameters.Set('After', JsonHelper.GetValueAsText(JResponse, 'data.return.returnLineItems.pageInfo.endCursor')) + if LineParameters.ContainsKey('After') then + LineParameters.Set('After', JsonHelper.GetValueAsText(JResponse, 'data.return.returnLineItems.pageInfo.endCursor')) else - Parameters.Add('After', JsonHelper.GetValueAsText(JResponse, 'data.return.returnLineItems.pageInfo.endCursor')); + LineParameters.Add('After', JsonHelper.GetValueAsText(JResponse, 'data.return.returnLineItems.pageInfo.endCursor')); foreach JLine in JLines do FillInReturnLine(ReturnId, JLine.AsObject()); until not JsonHelper.GetValueAsBoolean(JResponse, 'data.return.returnLineItems.pageInfo.hasNextPage'); diff --git a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyImportOrder.Codeunit.al b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyImportOrder.Codeunit.al index 7fbd4921da..86b44abdca 100644 --- a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyImportOrder.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyImportOrder.Codeunit.al @@ -833,11 +833,23 @@ codeunit 30161 "Shpfy Import Order" local procedure UpdateLocationIdAndDeliveryMethodOnOrderLine(var OrderLine: Record "Shpfy Order Line") var FulfillmentOrderLine: Record "Shpfy FulFillment Order Line"; - TotalQuantity: Integer; begin FulfillmentOrderLine.Reset(); FulfillmentOrderLine.SetRange("Shopify Order Id", OrderLine."Shopify Order Id"); FulfillmentOrderLine.SetRange("Shopify Variant Id", OrderLine."Shopify Variant Id"); + FulfillmentOrderLine.SetFilter("Fulfillment Status", '<>%1', 'CLOSED'); + if FulfillmentOrderLine.FindSet() then + UpdateLocationIdAndDeliveryMethodOnOrderLines(OrderLine, FulfillmentOrderLine) + else begin + FulfillmentOrderLine.SetRange("Fulfillment Status"); + UpdateLocationIdAndDeliveryMethodOnOrderLines(OrderLine, FulfillmentOrderLine); + end; + end; + + local procedure UpdateLocationIdAndDeliveryMethodOnOrderLines(var OrderLine: Record "Shpfy Order Line"; var FulfillmentOrderLine: Record "Shpfy FulFillment Order Line") + var + TotalQuantity: Integer; + begin if FulfillmentOrderLine.FindSet() then begin repeat TotalQuantity += FulfillmentOrderLine."Total Quantity"; diff --git a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrderEvents.Codeunit.al b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrderEvents.Codeunit.al index 2bcf4bc5b1..7ec64dae1c 100644 --- a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrderEvents.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrderEvents.Codeunit.al @@ -161,7 +161,7 @@ codeunit 30162 "Shpfy Order Events" /// Parameter of type Record "Shopify Order Header". /// Parameter of type Record "Sales Header". /// Parameter of type Boolean. - internal procedure OnBeforeCreateSalesHeader(ShopifyOrderHeader: Record "Shpfy Order Header"; var SalesHeader: Record "Sales Header"; var Handled: Boolean) + internal procedure OnBeforeCreateSalesHeader(ShopifyOrderHeader: Record "Shpfy Order Header"; var SalesHeader: Record "Sales Header"; var LastCreatedDocumentId: Guid; var Handled: Boolean) begin end; diff --git a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrdersAPI.Codeunit.al b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrdersAPI.Codeunit.al index a2e7904454..47658f4248 100644 --- a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrdersAPI.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyOrdersAPI.Codeunit.al @@ -309,12 +309,9 @@ codeunit 30165 "Shpfy Orders API" CommunicationMgt.SetShop(ShopifyShop); GraphQLType := "Shpfy GraphQL Type"::OrderCancel; Parameters.Add('OrderId', Format(OrderId)); - case CancelReason of - CancelReason::" ", CancelReason::Unknown: - Parameters.Add('CancelReason', Format(CancelReason::Other).ToUpper()); - else - Parameters.Add('CancelReason', Format(CancelReason).ToUpper()); - end; + if CancelReason in [CancelReason::" ", CancelReason::Unknown] then + CancelReason := CancelReason::Other; + Parameters.Add('CancelReason', CancelReason.Names().Get(CancelReason.Ordinals().IndexOf(CancelReason.AsInteger())).ToUpper()); Parameters.Add('NotifyCustomer', CommunicationMgt.ConvertBooleanToText(NotifyCustomer)); Parameters.Add('Refund', CommunicationMgt.ConvertBooleanToText(Refund)); Parameters.Add('Restock', CommunicationMgt.ConvertBooleanToText(Restock)); diff --git a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al index 82209b7f75..a9ea62de6b 100644 --- a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al @@ -65,7 +65,7 @@ codeunit 30166 "Shpfy Process Order" BCDocumentTypeConvert: Codeunit "Shpfy BC Document Type Convert"; IsHandled: Boolean; begin - OrderEvents.OnBeforeCreateSalesHeader(ShopifyOrderHeader, SalesHeader, IsHandled); + OrderEvents.OnBeforeCreateSalesHeader(ShopifyOrderHeader, SalesHeader, LastCreatedDocumentId, IsHandled); if not IsHandled then begin ShopifyOrderHeader.TestField("Sell-to Customer No."); SalesHeader.Init(); diff --git a/Apps/W1/Shopify/app/src/PermissionSets/ShpfyObjects.PermissionSet.al b/Apps/W1/Shopify/app/src/PermissionSets/ShpfyObjects.PermissionSet.al index 4565a80012..21ac49f7ad 100644 --- a/Apps/W1/Shopify/app/src/PermissionSets/ShpfyObjects.PermissionSet.al +++ b/Apps/W1/Shopify/app/src/PermissionSets/ShpfyObjects.PermissionSet.al @@ -193,6 +193,7 @@ permissionset 30104 "Shpfy - Objects" codeunit "Shpfy GQL OrderHeader" = X, codeunit "Shpfy GQL OrderLines" = X, codeunit "Shpfy GQL OrderRisks" = X, + codeunit "Shpfy GQL OrderTransactions" = X, codeunit "Shpfy GQL OrdersToImport" = X, codeunit "Shpfy GQL ProductById" = X, codeunit "Shpfy GQL ProductIds" = X, diff --git a/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductEvents.Codeunit.al b/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductEvents.Codeunit.al index ea60be918c..a2129c6823 100644 --- a/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductEvents.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductEvents.Codeunit.al @@ -382,4 +382,14 @@ codeunit 30177 "Shpfy Product Events" internal procedure OnAfterUpdateItemPicture(var Item: Record Item; ImageUrl: Text; InStream: InStream) begin end; + + [IntegrationEvent(false, false)] + /// + /// Raised After Shopify Product fields are filled from Business Central Item. These fields are sent to Shopify when creating or updating a product. + /// + /// Parameter of type Record Item. + /// Parameter of Record "Shopify Product". + internal procedure OnAfterFillInShopifyProductFields(Item: Record Item; var ShopifyProduct: Record "Shpfy Product") + begin + end; } \ No newline at end of file diff --git a/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductExport.Codeunit.al b/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductExport.Codeunit.al index 1316e56c3d..213e7e7286 100644 --- a/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductExport.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductExport.Codeunit.al @@ -278,6 +278,7 @@ codeunit 30178 "Shpfy Product Export" Shop."Action for Removed Products"::StatusToDraft: ShopifyProduct.Status := ShopifyProduct.Status::Draft; end; + ProductEvents.OnAfterFillInShopifyProductFields(Item, ShopifyProduct); end; /// diff --git a/Apps/W1/Shopify/app/src/Shipping/Codeunits/ShpfyExportShipments.Codeunit.al b/Apps/W1/Shopify/app/src/Shipping/Codeunits/ShpfyExportShipments.Codeunit.al index f1b3197515..16fb7a9f9b 100644 --- a/Apps/W1/Shopify/app/src/Shipping/Codeunits/ShpfyExportShipments.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Shipping/Codeunits/ShpfyExportShipments.Codeunit.al @@ -181,6 +181,7 @@ codeunit 30190 "Shpfy Export Shipments" FulfillmentOrderLine.SetRange("Shopify Location Id", OrderLine."Location Id"); FulfillmentOrderLine.SetRange("Delivery Method Type", OrderLine."Delivery Method Type"); FulfillmentOrderLine.SetFilter("Remaining Quantity", '>=%1', Round(SalesShipmentLine.Quantity, 1, '=')); + FulfillmentOrderLine.SetFilter("Fulfillment Status", '<>%1', 'CLOSED'); if FulfillmentOrderLine.FindFirst() then exit(true); end; diff --git a/Apps/W1/Shopify/app/src/Transactions/Codeunits/ShpfyTransactions.Codeunit.al b/Apps/W1/Shopify/app/src/Transactions/Codeunits/ShpfyTransactions.Codeunit.al index 9bf30ef463..bede5737e5 100644 --- a/Apps/W1/Shopify/app/src/Transactions/Codeunits/ShpfyTransactions.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Transactions/Codeunits/ShpfyTransactions.Codeunit.al @@ -11,7 +11,7 @@ codeunit 30194 "Shpfy Transactions" CommunicationMgt: Codeunit "Shpfy Communication Mgt."; JsonHelper: Codeunit "Shpfy Json Helper"; - local procedure ConvertToTranscationStatus(Value: Text): Enum "Shpfy Transaction Status" + local procedure ConvertToTransactionStatus(Value: Text): Enum "Shpfy Transaction Status" begin Value := CommunicationMgt.ConvertToCleanOptionValue(Value); if Enum::"Shpfy Transaction Status".Names().Contains(Value) then @@ -20,7 +20,7 @@ codeunit 30194 "Shpfy Transactions" exit(Enum::"Shpfy Transaction Status"::" "); end; - local procedure ConvertToTranscationType(Value: Text): Enum "Shpfy Transaction Type" + local procedure ConvertToTransactionType(Value: Text): Enum "Shpfy Transaction Type" begin Value := CommunicationMgt.ConvertToCleanOptionValue(Value); if Enum::"Shpfy Transaction Type".Names().Contains(Value) then @@ -29,10 +29,6 @@ codeunit 30194 "Shpfy Transactions" exit(Enum::"Shpfy Transaction Type"::" "); end; - /// - /// Description for UpdateTransactionInfos. - /// - /// Parameter of type BigInteger. internal procedure UpdateTransactionInfos(OrderId: BigInteger) var OrderHeader: Record "Shpfy Order Header"; @@ -41,11 +37,24 @@ codeunit 30194 "Shpfy Transactions" UpdateTransactionInfos(OrderHeader); end; - /// - /// Description for UpdateTransactionInfos. - /// - /// Parameter of type Record "Shopify Order Header". internal procedure UpdateTransactionInfos(OrderHeader: Record "Shpfy Order Header") + var + GraphQLType: Enum "Shpfy GraphQL Type"; + JResponse: JsonToken; + JOrderTransaction: JsonToken; + JOrderTransactions: JsonArray; + Parameters: Dictionary of [Text, Text]; + begin + CommunicationMgt.SetShop(OrderHeader."Shop Code"); + GraphQLType := "Shpfy GraphQL Type"::GetOrderTransactions; + Parameters.Add('OrderId', Format(OrderHeader."Shopify Order Id")); + JResponse := CommunicationMgt.ExecuteGraphQL(GraphQLType, Parameters); + if JsonHelper.GetJsonArray(JResponse, JOrderTransactions, 'data.order.transactions') then + foreach JOrderTransaction in JOrderTransactions do + ExtractShopifyOrderTransaction(JOrderTransaction, OrderHeader); + end; + + local procedure ExtractShopifyOrderTransaction(JOrderTransaction: JsonToken; OrderHeader: Record "Shpfy Order Header") var CreditCardCompany: Record "Shpfy Credit Card Company"; DataCapture: Record "Shpfy Data Capture"; @@ -55,74 +64,70 @@ codeunit 30194 "Shpfy Transactions" RecordRef: RecordRef; Id: BigInteger; IsNew: Boolean; - JTransactions: JsonArray; - JResponse: JsonToken; - JToken: JsonToken; - Url: Text; - OrderTransactionsUrlTxt: Label 'orders/%1/transactions.json', Comment = '%1 = Shopify order id', Locked = true; + JObject: JsonObject; + ReceiptJson: Text; begin - CommunicationMgt.SetShop(OrderHeader."Shop Code"); - Url := CommunicationMgt.CreateWebRequestURL(StrSubstNo(OrderTransactionsUrlTxt, OrderHeader."Shopify Order Id")); - JResponse := CommunicationMgt.ExecuteWebRequest(Url, 'GET', JToken); - if JsonHelper.GetJsonArray(JResponse, JTransactions, 'transactions') then - foreach JToken in JTransactions do begin - Id := JsonHelper.GetValueAsBigInteger(JToken, 'id'); - IsNew := not OrderTransaction.Get(Id); - if IsNew then begin - Clear(OrderTransaction); - OrderTransaction."Shopify Transaction Id" := Id; - end; - OrderTransaction.Status := ConvertToTranscationStatus(JsonHelper.GetValueAsText(JToken, 'status')); - OrderTransaction.Type := ConvertToTranscationType(JsonHelper.GetValueAsText(JToken, 'kind')); - RecordRef.GetTable(OrderTransaction); - JsonHelper.GetValueIntoField(JToken, 'order_id', RecordRef, OrderTransaction.FieldNo("Shopify Order Id")); - JsonHelper.GetValueIntoField(JToken, 'gateway', RecordRef, OrderTransaction.FieldNo(Gateway)); - JsonHelper.GetValueIntoField(JToken, 'message', RecordRef, OrderTransaction.FieldNo(Message)); - JsonHelper.GetValueIntoField(JToken, 'created_at', RecordRef, OrderTransaction.FieldNo("Created At")); - JsonHelper.GetValueIntoField(JToken, 'test', RecordRef, OrderTransaction.FieldNo(Test)); - JsonHelper.GetValueIntoField(JToken, 'authorization', RecordRef, OrderTransaction.FieldNo(Authorization)); - JsonHelper.GetValueIntoField(JToken, 'receipt.gift_card_id', RecordRef, OrderTransaction.FieldNo("Gift Card Id")); - JsonHelper.GetValueIntoField(JToken, 'error_code', RecordRef, OrderTransaction.FieldNo("Error Code")); - JsonHelper.GetValueIntoField(JToken, 'source_name', RecordRef, OrderTransaction.FieldNo("Source Name")); - JsonHelper.GetValueIntoField(JToken, 'amount', RecordRef, OrderTransaction.FieldNo(Amount)); - JsonHelper.GetValueIntoField(JToken, 'currency', RecordRef, OrderTransaction.FieldNo(Currency)); - JsonHelper.GetValueIntoField(JToken, 'payment_id', RecordRef, OrderTransaction.FieldNo("Payment Id")); - JsonHelper.GetValueIntoField(JToken, 'payment_details.credit_card_bin', RecordRef, OrderTransaction.FieldNo("Credit Card Bin")); - JsonHelper.GetValueIntoField(JToken, 'payment_details.avs_result_code', RecordRef, OrderTransaction.FieldNo("AVS Result Code")); - JsonHelper.GetValueIntoField(JToken, 'payment_details.cvv_result_code', RecordRef, OrderTransaction.FieldNo("CVV Result Code")); - JsonHelper.GetValueIntoField(JToken, 'payment_details.credit_card_number', RecordRef, OrderTransaction.FieldNo("Credit Card Number")); - JsonHelper.GetValueIntoField(JToken, 'payment_details.credit_card_company', RecordRef, OrderTransaction.FieldNo("Credit Card Company")); - if IsNew then - RecordRef.Insert() - else - RecordRef.Modify(); - RecordRef.SetTable(OrderTransaction); - RecordRef.Close(); - if OrderTransaction.Gateway <> '' then begin - Clear(TransactionGateway); - TransactionGateway.SetRange(Name, OrderTransaction.Gateway); - if TransactionGateway.IsEmpty then begin - TransactionGateway.Name := OrderTransaction.Gateway; - TransactionGateway.Insert(); - end; - Clear(CreditCardCompany); - end; - if OrderTransaction."Credit Card Company" <> '' then begin - CreditCardCompany.SetRange(Name, OrderTransaction."Credit Card Company"); - if CreditCardCompany.IsEmpty then begin - CreditCardCompany.Name := OrderTransaction."Credit Card Company"; - CreditCardCompany.Insert(); - end; - end; - if not PaymentMethodMapping.Get(OrderHeader."Shop Code", OrderTransaction.Gateway, OrderTransaction."Credit Card Company") then begin - Clear(PaymentMethodMapping); - PaymentMethodMapping."Shop Code" := OrderHeader."Shop Code"; - PaymentMethodMapping.Gateway := OrderTransaction.Gateway; - PaymentMethodMapping."Credit Card Company" := CopyStr(OrderTransaction."Credit Card Company", 1, MaxStrLen(PaymentMethodMapping."Credit Card Company")); - PaymentMethodMapping.Insert(); - end; + Id := CommunicationMgt.GetIdOfGId(JsonHelper.GetValueAsText(JOrderTransaction, 'id')); + IsNew := not OrderTransaction.Get(Id); + if IsNew then begin + Clear(OrderTransaction); + OrderTransaction."Shopify Transaction Id" := Id; + end; + OrderTransaction.Status := ConvertToTransactionStatus(JsonHelper.GetValueAsText(JOrderTransaction, 'status')); + OrderTransaction.Type := ConvertToTransactionType(JsonHelper.GetValueAsText(JOrderTransaction, 'kind')); + OrderTransaction."Shopify Order Id" := OrderHeader."Shopify Order Id"; + RecordRef.GetTable(OrderTransaction); + JsonHelper.GetValueIntoField(JOrderTransaction, 'gateway', RecordRef, OrderTransaction.FieldNo(Gateway)); + JsonHelper.GetValueIntoField(JOrderTransaction, 'formattedGateway', RecordRef, OrderTransaction.FieldNo(Message)); + JsonHelper.GetValueIntoField(JOrderTransaction, 'createdAt', RecordRef, OrderTransaction.FieldNo("Created At")); + JsonHelper.GetValueIntoField(JOrderTransaction, 'test', RecordRef, OrderTransaction.FieldNo(Test)); + JsonHelper.GetValueIntoField(JOrderTransaction, 'authorizationCode', RecordRef, OrderTransaction.FieldNo(Authorization)); + JsonHelper.GetValueIntoField(JOrderTransaction, 'errorCode', RecordRef, OrderTransaction.FieldNo("Error Code")); + JsonHelper.GetValueIntoField(JOrderTransaction, 'paymentId', RecordRef, OrderTransaction.FieldNo("Payment Id")); + JsonHelper.GetValueIntoField(JOrderTransaction, 'amountSet.shopMoney.amount', RecordRef, OrderTransaction.FieldNo(Amount)); + JsonHelper.GetValueIntoField(JOrderTransaction, 'amountSet.shopMoney.currencyCode', RecordRef, OrderTransaction.FieldNo(Currency)); + + ReceiptJson := JsonHelper.GetValueAsText(JOrderTransaction, 'receiptJson'); + if JObject.ReadFrom(ReceiptJson) then + JsonHelper.GetValueIntoField(JObject, 'gift_card_id', RecordRef, OrderTransaction.FieldNo("Gift Card Id")); - DataCapture.Add(Database::"Shpfy Order Transaction", OrderTransaction.SystemId, JToken); + if JsonHelper.GetJsonObject(JOrderTransaction, JObject, 'paymentDetails') then begin + JsonHelper.GetValueIntoField(JOrderTransaction, 'paymentDetails.bin', RecordRef, OrderTransaction.FieldNo("Credit Card Bin")); + JsonHelper.GetValueIntoField(JOrderTransaction, 'paymentDetails.avsResultCode', RecordRef, OrderTransaction.FieldNo("AVS Result Code")); + JsonHelper.GetValueIntoField(JOrderTransaction, 'paymentDetails.cvvResultCode', RecordRef, OrderTransaction.FieldNo("CVV Result Code")); + JsonHelper.GetValueIntoField(JOrderTransaction, 'paymentDetails.number', RecordRef, OrderTransaction.FieldNo("Credit Card Number")); + JsonHelper.GetValueIntoField(JOrderTransaction, 'paymentDetails.company', RecordRef, OrderTransaction.FieldNo("Credit Card Company")); + end; + if IsNew then + RecordRef.Insert() + else + RecordRef.Modify(); + RecordRef.SetTable(OrderTransaction); + RecordRef.Close(); + if OrderTransaction.Gateway <> '' then begin + Clear(TransactionGateway); + TransactionGateway.SetRange(Name, OrderTransaction.Gateway); + if TransactionGateway.IsEmpty then begin + TransactionGateway.Name := OrderTransaction.Gateway; + TransactionGateway.Insert(); + end; + Clear(CreditCardCompany); + end; + if OrderTransaction."Credit Card Company" <> '' then begin + CreditCardCompany.SetRange(Name, OrderTransaction."Credit Card Company"); + if CreditCardCompany.IsEmpty then begin + CreditCardCompany.Name := OrderTransaction."Credit Card Company"; + CreditCardCompany.Insert(); end; + end; + if not PaymentMethodMapping.Get(OrderHeader."Shop Code", OrderTransaction.Gateway, OrderTransaction."Credit Card Company") then begin + Clear(PaymentMethodMapping); + PaymentMethodMapping."Shop Code" := OrderHeader."Shop Code"; + PaymentMethodMapping.Gateway := OrderTransaction.Gateway; + PaymentMethodMapping."Credit Card Company" := CopyStr(OrderTransaction."Credit Card Company", 1, MaxStrLen(PaymentMethodMapping."Credit Card Company")); + PaymentMethodMapping.Insert(); + end; + + DataCapture.Add(Database::"Shpfy Order Transaction", OrderTransaction.SystemId, JOrderTransaction); end; } \ No newline at end of file diff --git a/Apps/W1/Shopify/app/src/Transactions/Enums/ShpfyTransactionStatus.Enum.al b/Apps/W1/Shopify/app/src/Transactions/Enums/ShpfyTransactionStatus.Enum.al index 7b90d1b5de..eef9efa675 100644 --- a/Apps/W1/Shopify/app/src/Transactions/Enums/ShpfyTransactionStatus.Enum.al +++ b/Apps/W1/Shopify/app/src/Transactions/Enums/ShpfyTransactionStatus.Enum.al @@ -28,5 +28,12 @@ enum 30133 "Shpfy Transaction Status" { Caption = 'Error'; } - + value(5; "Awaiting Response") + { + Caption = 'Awaiting Response'; + } + value(6; "Unknown") + { + Caption = 'Unknown'; + } } diff --git a/Apps/W1/Shopify/app/src/Transactions/Pages/ShpfyTransactions.Page.al b/Apps/W1/Shopify/app/src/Transactions/Pages/ShpfyTransactions.Page.al index b0e18daaac..33bc90e495 100644 --- a/Apps/W1/Shopify/app/src/Transactions/Pages/ShpfyTransactions.Page.al +++ b/Apps/W1/Shopify/app/src/Transactions/Pages/ShpfyTransactions.Page.al @@ -47,11 +47,17 @@ page 30134 "Shpfy Transactions" ApplicationArea = All; ToolTip = 'Specifies the name of the gateway the transaction was issued through.'; } +#if not CLEAN25 field(SourceName; Rec."Source Name") { ApplicationArea = All; ToolTip = 'Specifies the origin of the transaction. This is set by Shopify. Example values: web, pos, iphone, android.'; + Visible = false; + ObsoleteReason = 'Source name is no longer used.'; + ObsoleteState = Pending; + ObsoleteTag = '25.0'; } +#endif field(Amount; Rec.Amount) { ApplicationArea = All; diff --git a/Apps/W1/Shopify/app/src/Transactions/Tables/ShpfyOrderTransaction.Table.al b/Apps/W1/Shopify/app/src/Transactions/Tables/ShpfyOrderTransaction.Table.al index 71b8aef427..88cc00d74b 100644 --- a/Apps/W1/Shopify/app/src/Transactions/Tables/ShpfyOrderTransaction.Table.al +++ b/Apps/W1/Shopify/app/src/Transactions/Tables/ShpfyOrderTransaction.Table.al @@ -93,6 +93,14 @@ table 30133 "Shpfy Order Transaction" DataClassification = SystemMetadata; Editable = false; Access = Internal; + ObsoleteReason = 'Source name is no longer used.'; +#if not CLEAN25 + ObsoleteState = Pending; + ObsoleteTag = '25.0'; +#else + ObsoleteState = Removed; + ObsoleteTag = '28.0'; +#endif } field(16; "Credit Card Bin"; Code[10]) { diff --git a/Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPISubscriber.Codeunit.al b/Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPISubscriber.Codeunit.al new file mode 100644 index 0000000000..aabc6b8659 --- /dev/null +++ b/Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPISubscriber.Codeunit.al @@ -0,0 +1,46 @@ +codeunit 139649 "Shpfy Orders API Subscriber" +{ + SingleInstance = true; + EventSubscriberInstance = Manual; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Shpfy Communication Events", 'OnClientSend', '', true, false)] + local procedure OnClientSend(HttpRequestMessage: HttpRequestMessage; var HttpResponseMessage: HttpResponseMessage) + begin + MakeResponse(HttpRequestMessage, HttpResponseMessage); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Shpfy Communication Events", 'OnGetContent', '', true, false)] + local procedure OnGetContent(HttpResponseMessage: HttpResponseMessage; var Response: Text) + begin + HttpResponseMessage.Content.ReadAs(Response); + end; + + local procedure MakeResponse(HttpRequestMessage: HttpRequestMessage; var HttpResponseMessage: HttpResponseMessage) + var + Uri: Text; + GraphQlQuery: Text; + GraphQLCmdMsg: Label '{ transactions { authorizationCode createdAt errorCode formattedGateway gateway id kind paymentId receiptJson status test amountSet { presentmentMoney { amount currencyCode } shopMoney { amount currencyCode }} paymentDetails { ... on CardPaymentDetails { avsResultCode bin cvvResultCode number company }}}', Locked = true; + GraphQLCmdTxt: Label '/graphql.json', Locked = true; + begin + case HttpRequestMessage.Method of + 'POST': + begin + Uri := HttpRequestMessage.GetRequestUri(); + if Uri.EndsWith(GraphQLCmdTxt) then + if HttpRequestMessage.Content.ReadAs(GraphQlQuery) then + if GraphQlQuery.Contains(GraphQLCmdMsg) then + HttpResponseMessage := GetOrderTransactionResult(); + end; + end; + end; + + local procedure GetOrderTransactionResult(): HttpResponseMessage; + var + HttpResponseMessage: HttpResponseMessage; + Body: Text; + begin + Body := '{"data":{"order":{"transactions":[{"authorizationCode":"53433","createdAt":"2024-06-11T09:58:22Z","errorCode":null,"formattedGateway":"(For Testing) Bogus Gateway","gateway":"bogus","id":"gid://shopify/OrderTransaction/6657081606262","kind":"SALE","paymentId":"rhVoj2pg5L3vVrybtYswqKnju","receiptJson":"{}","status":"SUCCESS","test":true,"amountSet":{"presentmentMoney":{"amount":"679.0","currencyCode":"DKK"},"shopMoney":{"amount":"679.0","currencyCode":"DKK"}},"paymentDetails":{"avsResultCode":null,"bin":"1","cvvResultCode":null,"number":"•••• •••• •••• 1","company":"Bogus"}}]}},"extensions":{"cost":{"requestedQueryCost":3,"actualQueryCost":3,"throttleStatus":{"maximumAvailable":2000.0,"currentlyAvailable":1997,"restoreRate":100.0}}}}'; + HttpResponseMessage.Content.WriteFrom(Body); + exit(HttpResponseMessage); + end; +} diff --git a/Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPITest.Codeunit.al b/Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPITest.Codeunit.al index a11aacb37a..5b53b399d1 100644 --- a/Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPITest.Codeunit.al +++ b/Apps/W1/Shopify/test/Order Handling/ShpfyOrdersAPITest.Codeunit.al @@ -20,7 +20,7 @@ codeunit 139608 "Shpfy Orders API Test" begin // [SCENARIO] Create a randpom expected Json structure for the OrdersToImport and see of all orders are available in the "Shpfy Orders to Import" table. // [SCENARIO] At start we reset the "Shpfy Orders to Import" table so we can see how many record are added. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); Clear(OrdersToImport); if not OrdersToImport.IsEmpty then OrdersToImport.DeleteAll(); @@ -56,7 +56,7 @@ codeunit 139608 "Shpfy Orders API Test" begin // [SCENARIO] Create a randpom expected Json structure for the OrdersToImport and see of all orders are available in the "Shpfy Orders to Import" table. // [SCENARIO] At start we reset the "Shpfy Orders to Import" table so we can see how many record are added. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); Clear(OrdersToImport); if not OrdersToImport.IsEmpty then OrdersToImport.DeleteAll(); @@ -90,7 +90,7 @@ codeunit 139608 "Shpfy Orders API Test" JShopifyLineItems: JsonArray; begin // [SCENARIO] Import a Shopify order from the "Shpfy Orders to Import" record. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -128,7 +128,7 @@ codeunit 139608 "Shpfy Orders API Test" JShopifyLineItems: JsonArray; begin // [SCENARIO] Import a Shopify order from the "Shpfy Orders to Import" record. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -168,7 +168,7 @@ codeunit 139608 "Shpfy Orders API Test" begin // [SCENARIO] Creating a random Shopify Order and try to map customer and product data. // [SCENARIO] If everithing succeed the function will return true. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -199,7 +199,7 @@ codeunit 139608 "Shpfy Orders API Test" begin // [SCENARIO] Creating a random Shopify Order and try to map customer and product data. // [SCENARIO] If everithing succeed the function will return true. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -230,7 +230,7 @@ codeunit 139608 "Shpfy Orders API Test" begin // [SCENARIO] Creating a random Shopify Order and try to map customer and product data. // [SCENARIO] When the sales document is created, everything will be mapped and the sales document must exist. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -275,7 +275,7 @@ codeunit 139608 "Shpfy Orders API Test" begin // [SCENARIO] Creating a random Shopify Order and try to map customer and product data. // [SCENARIO] When the sales document is created, everything will be mapped and the sales document must exist. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -321,7 +321,7 @@ codeunit 139608 "Shpfy Orders API Test" ProcessOrders: Codeunit "Shpfy Process Orders"; begin // [SCENARIO] When the sales document is created, tax priority is taken from the shop. - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -365,7 +365,7 @@ codeunit 139608 "Shpfy Orders API Test" ProcessOrders: Codeunit "Shpfy Process Orders"; begin // [SCENARIO] When the sales document is created, tax priority is taken from the shop - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -409,7 +409,7 @@ codeunit 139608 "Shpfy Orders API Test" ProcessOrders: Codeunit "Shpfy Process Orders"; begin // [SCENARIO] When the sales document is created, tax area is empty if there is no mapping - Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); @@ -486,4 +486,12 @@ codeunit 139608 "Shpfy Orders API Test" JShopifyOrder := OrderHandlingHelper.CreateShopifyOrderAsJson(Shop, OrdersToImport, JShopifyLineItems, B2B); ImportShopifyOrder(Shop, OrderHeader, OrdersToImport, ImportOrder, JShopifyOrder, JShopifyLineItems); end; + + local procedure Initialize() + var + OrdersAPISubscriber: Codeunit "Shpfy Orders API Subscriber"; + begin + Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + if BindSubscription(OrdersAPISubscriber) then; + end; } \ No newline at end of file diff --git a/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al b/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al index e77b8f835a..98f60f979a 100644 --- a/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al +++ b/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al @@ -44,7 +44,7 @@ codeunit 139611 "Shpfy Order Refund Test" CanCreateDocument: boolean; ErrorInfo: ErrorInfo; begin - // [SCENARION] Create a Credit Memo from a Shopify Refund where the item is totally refunded. + // [SCENARIO] Create a Credit Memo from a Shopify Refund where the item is totally refunded. Codeunit.Run(Codeunit::"Shpfy Initialize Test"); Initialize(); @@ -81,7 +81,7 @@ codeunit 139611 "Shpfy Order Refund Test" CanCreateDocument: boolean; ErrorInfo: ErrorInfo; begin - // [SCENARION] Create a Credit Memo from a Shopify Refund where only the shipment is refunded. + // [SCENARIO] Create a Credit Memo from a Shopify Refund where only the shipment is refunded. Codeunit.Run(Codeunit::"Shpfy Initialize Test"); Initialize(); @@ -118,7 +118,7 @@ codeunit 139611 "Shpfy Order Refund Test" CanCreateDocument: boolean; ErrorInfo: ErrorInfo; begin - // [SCENARION] Create a Credit Memo from a Shopify Refund where the item is not refunded. + // [SCENARIO] Create a Credit Memo from a Shopify Refund where the item is not refunded. Codeunit.Run(Codeunit::"Shpfy Initialize Test"); Initialize(); @@ -146,6 +146,37 @@ codeunit 139611 "Shpfy Order Refund Test" ResetProccesOnRefund(RefundId); end; + [Test] + procedure UnitTestCanCreateCreditMemo() + var + RefundsAPI: Codeunit "Shpfy Refunds API"; + RefundId1: BigInteger; + RefundId2: BigInteger; + RefundId3: BigInteger; + begin + // [SCENARIO] Can create credit memo check returns + // Non-zero refund = true + // Linked return refund = true + // Zero and not linked refund = false + Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + Initialize(); + + // [GIVEN] Non-zero refund + RefundId1 := ShopifyIds.Get('Refund').Get(5); + // [GIVEN] Linked return refund + RefundId2 := ShopifyIds.Get('Refund').Get(4); + // [GIVEN] Zero and not linked refund + RefundId3 := ShopifyIds.Get('Refund').Get(6); + + // [WHEN] Execute VerifyRefundCanCreateCreditMemo + RefundsAPI.VerifyRefundCanCreateCreditMemo(RefundId1); + RefundsAPI.VerifyRefundCanCreateCreditMemo(RefundId2); + asserterror RefundsAPI.VerifyRefundCanCreateCreditMemo(RefundId3); + + // [THEN] Only RefundId3 throws an error + LibraryAssert.ExpectedError('The refund imported from Shopify can''t be used to create a credit memo. Only refunds for paid items can be used to create credit memos.'); + end; + var ShopifyIds: Dictionary of [Text, List Of [BigInteger]]; IsInitialized: Boolean; diff --git a/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundsHelper.Codeunit.al b/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundsHelper.Codeunit.al index 8abb79482b..bff99f3c1f 100644 --- a/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundsHelper.Codeunit.al +++ b/Apps/W1/Shopify/test/Order Refunds/ShpfyOrderRefundsHelper.Codeunit.al @@ -52,6 +52,19 @@ codeunit 139564 "Shpfy Order Refunds Helper" RefundId := CreateRefundHeader(OrderId, ShopifyIds.Get('Return').Get(2), 0); CreateRefundLine(RefundId, ShopifyIds.Get('OrderLine').Get(2)); ShopifyIds.Get('Refund').Add(RefundId); + + RefundId := CreateRefundHeader(OrderId, Any.IntegerInRange(100000, 999999), 0); + CreateRefundLine(RefundId, Any.IntegerInRange(100000, 999999)); + ShopifyIds.Get('Refund').Add(RefundId); // 4th refund - linked zero + + RefundId := CreateRefundHeader(OrderId, 0, 150); + CreateRefundLine(RefundId, Any.IntegerInRange(100000, 999999)); + ShopifyIds.Get('Refund').Add(RefundId); // 5th refund - non linked non zero + + RefundId := CreateRefundHeader(OrderId, 0, 0); + CreateRefundLine(RefundId, Any.IntegerInRange(100000, 999999)); + ShopifyIds.Get('Refund').Add(RefundId); // 6th refund - not linked zero + Commit(); end; @@ -197,8 +210,11 @@ codeunit 139564 "Shpfy Order Refunds Helper" local procedure CreateRefundLine(RefundId: BigInteger; OrderLineId: BigInteger) var RefundLine: Record "Shpfy Refund Line"; + RefundHeader: Record "Shpfy Refund Header"; + RefundsAPI: Codeunit "Shpfy Refunds API"; RefundEnumConvertor: Codeunit "Shpfy Refund Enum Convertor"; begin + RefundHeader.Get(RefundId); RefundLine."Refund Line Id" := Any.IntegerInRange(100000, 999999); RefundLine."Refund Id" := RefundId; RefundLine."Order Line Id" := OrderLineId; @@ -207,7 +223,7 @@ codeunit 139564 "Shpfy Order Refunds Helper" RefundLine.Restocked := true; RefundLine.Amount := 156.38; RefundLine."Subtotal Amount" := 156.38; - RefundLine."Can Create Credit Memo" := true; + RefundLine."Can Create Credit Memo" := RefundsAPI.IsNonZeroOrReturnRefund(RefundHeader); RefundLine.Insert(); end; diff --git a/Apps/W1/Sustainability/app/src/Calculation/SustainabilityCalcMgt.Codeunit.al b/Apps/W1/Sustainability/app/src/Calculation/SustainabilityCalcMgt.Codeunit.al index 4644c8733d..35add37418 100644 --- a/Apps/W1/Sustainability/app/src/Calculation/SustainabilityCalcMgt.Codeunit.al +++ b/Apps/W1/Sustainability/app/src/Calculation/SustainabilityCalcMgt.Codeunit.al @@ -70,7 +70,7 @@ codeunit 6218 "Sustainability Calc. Mgt." begin FilterGLEntry(SustainAccountCategory, FromDate, ToDate, GLEntry); GLEntry.CalcSums(Amount); - exit(GLEntry.Amount); + exit(Abs(GLEntry.Amount)); end; internal procedure CollectGeneralLedgerAmount(var SustainabilityJnlLine: Record "Sustainability Jnl. Line") diff --git a/Apps/W1/Sustainability/app/src/Journal/SustainabilityJnlBatches.Page.al b/Apps/W1/Sustainability/app/src/Journal/SustainabilityJnlBatches.Page.al index f61ad8c7a3..f69e81f89b 100644 --- a/Apps/W1/Sustainability/app/src/Journal/SustainabilityJnlBatches.Page.al +++ b/Apps/W1/Sustainability/app/src/Journal/SustainabilityJnlBatches.Page.al @@ -41,4 +41,29 @@ page 6216 "Sustainability Jnl. Batches" } } } + actions + { + area(processing) + { + action(EditJournal) + { + ApplicationArea = Basic, Suite; + Caption = 'Edit Journal'; + Image = OpenJournal; + ShortCutKey = 'Return'; + ToolTip = 'Open a journal based on the journal batch.'; + + trigger OnAction() + var + SustainabilityJnlTemplate: Record "Sustainability Jnl. Template"; + SustainabilityJournalMgt: Codeunit "Sustainability Journal Mgt."; + + begin + SustainabilityJnlTemplate.Get(Rec."Journal Template Name"); + SustainabilityJournalMgt.OpenJournalPageFromBatch(Rec, SustainabilityJnlTemplate); + end; + } + } + } + } \ No newline at end of file diff --git a/Apps/W1/Sustainability/app/src/Journal/SustainabilityJournalMgt.Codeunit.al b/Apps/W1/Sustainability/app/src/Journal/SustainabilityJournalMgt.Codeunit.al index dc00c792bf..d591155018 100644 --- a/Apps/W1/Sustainability/app/src/Journal/SustainabilityJournalMgt.Codeunit.al +++ b/Apps/W1/Sustainability/app/src/Journal/SustainabilityJournalMgt.Codeunit.al @@ -116,6 +116,25 @@ codeunit 6211 "Sustainability Journal Mgt." end; end; + /// + /// Open the Sustainability Journal for the active Sustainability Batch. + /// Specifies the Sustainability Journal Batch. + /// Specifies the "Sustainability Jnl. Template" + /// + procedure OpenJournalPageFromBatch(SustainabilityJnlBatch: Record "Sustainability Jnl. Batch"; SustainabilityJnlTemplate: Record "Sustainability Jnl. Template") + var + SustainabilityJnlLine: Record "Sustainability Jnl. Line"; + begin + SustainabilityJnlLine.FilterGroup := 2; + SustainabilityJnlLine.SetRange("Journal Template Name", SustainabilityJnlTemplate.Name); + SustainabilityJnlLine.FilterGroup := 0; + + SustainabilityJnlLine."Journal Template Name" := ''; + SustainabilityJnlLine."Journal Batch Name" := SustainabilityJnlBatch.Name; + PAGE.Run(Page::"Sustainability Journal", SustainabilityJnlLine); + end; + + internal procedure SelectBatch(SustainabilityJnlTemplate: Record "Sustainability Jnl. Template"; PreviousBatchName: Code[10]) SustainabilityJnlBatch: Record "Sustainability Jnl. Batch" begin SustainabilityJnlBatch.SetRange("Journal Template Name", SustainabilityJnlTemplate.Name); diff --git a/Apps/W1/Sustainability/test/src/SustainabilityJournalTest.Codeunit.al b/Apps/W1/Sustainability/test/src/SustainabilityJournalTest.Codeunit.al index 54ca91b65b..bfae0fd4c7 100644 --- a/Apps/W1/Sustainability/test/src/SustainabilityJournalTest.Codeunit.al +++ b/Apps/W1/Sustainability/test/src/SustainabilityJournalTest.Codeunit.al @@ -5,9 +5,13 @@ codeunit 148181 "Sustainability Journal Test" var Assert: Codeunit Assert; + LibraryERM: Codeunit "Library - ERM"; + LibraryRandom: Codeunit "Library - Random"; LibrarySustainability: Codeunit "Library - Sustainability"; + LibraryUtility: Codeunit "Library - Utility"; OneDefaultTemplateShouldBeCreatedLbl: Label 'One default template should be created after page is opened', Locked = true; OneDefaultBatchShouldBeCreatedLbl: Label 'One default batch should be created after page is opened', Locked = true; + CustomAmountMustBePositiveLbl: Label 'The custom amount must be positive', Locked = true; [Test] procedure TestDefaultTemplateAndBatchSuccessfullyInserted() @@ -100,4 +104,46 @@ codeunit 148181 "Sustainability Journal Test" // [THEN] The Check should fail asserterror SustainabilityJournalMgt.CheckScopeMatchWithBatch(SustainabilityJournalLine); end; + + [Test] + procedure TestCustomAmountIsPositiveForNegativeTotalOfGL() + var + SustainAccountCategory: Record "Sustain. Account Category"; + GenJournalBatch: Record "Gen. Journal Batch"; + GenJouralLine: Record "Gen. Journal Line"; + SustainabilityCalcMgt: Codeunit "Sustainability Calc. Mgt."; + GenJournalTemplateCode: Code[10]; + GLAccountNo: Code[20]; + GLAmount, CustomAmount : Decimal; + begin + // [SCENARIO 540221] Test that the custom amount is positive when the total of the GL is negative + + // [GIVEN] G/L Account exists + GLAccountNo := LibraryERM.CreateGLAccountNoWithDirectPosting(); + + // [GIVEN] G/L Batch and Template exist + GenJournalTemplateCode := LibraryERM.SelectGenJnlTemplate(); + LibraryERM.CreateGenJournalBatch(GenJournalBatch, GenJournalTemplateCode); + + // [GIVEN] G/L Entry with Amount = -1000 for the G/L Account + GLAmount := -LibraryRandom.RandDec(1000, 2); + LibraryERM.CreateGeneralJnlLine2WithBalAcc(GenJouralLine, GenJournalTemplateCode, GenJournalBatch.Name, GenJouralLine."Document Type"::Payment, GenJouralLine."Account Type"::"G/L Account", GLAccountNo, GenJouralLine."Account Type"::"G/L Account", LibraryERM.CreateGLAccountNoWithDirectPosting(), GLAmount); + LibraryERM.PostGeneralJnlLine(GenJouralLine); + + // [GIVEN] Sustain Account Category with the G/L Account calculation foundation + SustainAccountCategory := CreateSustAccountCategoryWithGLAccountNo(GLAccountNo); + + // [WHEN] Getting the collectable amount for sustanability account category + CustomAmount := SustainabilityCalcMgt.GetCollectableGLAmount(SustainAccountCategory, 0D, 0D); + + // [THEN] The custom amount = 1000 + Assert.AreEqual(Abs(GLAmount), CustomAmount, CustomAmountMustBePositiveLbl); + end; + + local procedure CreateSustAccountCategoryWithGLAccountNo(GLAccountNo: Code[20]) SustainAccountCategory: Record "Sustain. Account Category" + begin + SustainAccountCategory := LibrarySustainability.InsertAccountCategory(LibraryUtility.GenerateGUID(), LibraryUtility.GenerateGUID(), Enum::"Emission Scope"::"Scope 2", Enum::"Calculation Foundation"::Custom, true, true, true, 'GL', true); + SustainAccountCategory."G/L Account Filter" := GLAccountNo; + SustainAccountCategory.Modify(true); + end; } \ No newline at end of file diff --git a/Apps/W1/TransactionStorage/app/src/TransactStorageExportData.Codeunit.al b/Apps/W1/TransactionStorage/app/src/TransactStorageExportData.Codeunit.al index 66e5ab363c..7354663de8 100644 --- a/Apps/W1/TransactionStorage/app/src/TransactStorageExportData.Codeunit.al +++ b/Apps/W1/TransactionStorage/app/src/TransactStorageExportData.Codeunit.al @@ -1263,6 +1263,6 @@ codeunit 6202 "Transact. Storage Export Data" local procedure GetRecordChunkSize(): Integer begin - exit(200000); + exit(100000); end; } \ No newline at end of file diff --git a/Apps/W1/TransactionStorage/app/src/TransactionStorageABS.Codeunit.al b/Apps/W1/TransactionStorage/app/src/TransactionStorageABS.Codeunit.al index 18b2e29f44..d8511395f0 100644 --- a/Apps/W1/TransactionStorage/app/src/TransactionStorageABS.Codeunit.al +++ b/Apps/W1/TransactionStorage/app/src/TransactionStorageABS.Codeunit.al @@ -32,6 +32,7 @@ codeunit 6205 "Transaction Storage ABS" TransactionStorageTok: Label 'Transaction Storage', Locked = true; JsonContentTypeHeaderTok: Label 'application/json', Locked = true; ExportLogFileNameTxt: Label 'ExportLog', Locked = true; + MetadataFileNameTxt: Label 'metadata', Locked = true; SendBlobBlockForTableTok: Label 'Send blob block for table %1 with name %2 to Azure Function', Comment = '%1 - table id, %2 - blob name', Locked = true; ExportOfIncomingDocTok: Label 'Export of incoming document %1 with name %2', Comment = '%1 - incoming document file name, %2 - blob name', Locked = true; IncomingDocsExportedTxt: Label 'Incoming documents were exported.', Locked = true; @@ -80,6 +81,7 @@ codeunit 6205 "Transaction Storage ABS" WriteJsonBlobsToABS(AzureFunctionsAuthForJson, CurrentDate, ExportLog); WriteIncomingDocumentsToABS(IncomingDocs, AzureFunctionsAuthForDoc, CurrentDate, ExportLog); WriteExportLog(ExportLog, AzureFunctionsAuthForJson, CurrentDate); + WriteMetadata(AzureFunctionsAuthForJson, CurrentDate); FeatureTelemetry.LogUsage('0000LQ4', TransactionStorageTok, ExportedToABSTxt); end; @@ -153,6 +155,7 @@ codeunit 6205 "Transaction Storage ABS" IncomingDocKey: Text; BlobFolder: Text; BlobName: Text; + BlobNameToLog: Text; AttachmentName: Text; FileExtension: Text; ContainerName: Text; @@ -184,8 +187,10 @@ codeunit 6205 "Transaction Storage ABS" AttachmentName := RemoveProhibitedChars(IncomingDocAttachment.Name); FileExtension := RemoveProhibitedChars(IncomingDocAttachment."File Extension"); BlobName := StrSubstNo(IncomingDocBlobNameTxt, BlobFolder, IncomingDocKey, AttachmentName, FileExtension); + BlobNameToLog := StrSubstNo(IncomingDocBlobNameTxt, BlobFolder, IncomingDocKey, EncodeDocName(AttachmentName), FileExtension); AzureFunctionsResponse := SendDocumentToAzureFunction(AzureFunctionsAuth, ContainerName, BlobName, TempBlob, BlobExpirationDate); - HandleAzureFunctionResponse(AzureFunctionsResponse, StrSubstNo(ExportOfIncomingDocTok, IncomingDocAttachment.Name, BlobName), 0); + HandleAzureFunctionResponse( + AzureFunctionsResponse, StrSubstNo(ExportOfIncomingDocTok, EncodeDocName(IncomingDocAttachment.Name), BlobNameToLog), 0); ExportedDocCount += 1; end; until IncomingDocAttachment.Next() = 0; @@ -215,6 +220,34 @@ codeunit 6205 "Transaction Storage ABS" SendJsonTextToAzureFunction(AzureFunctionsAuth, ContainerName, BlobName, JsonData, BlobExpirationDate); end; + [NonDebuggable] + local procedure WriteMetadata(AzureFunctionsAuth: Interface "Azure Functions Authentication"; CurrentDate: Date) + var + Metadata: JsonObject; + AppInfo: ModuleInfo; + BlobExpirationDate: Date; + ContainerName: Text; + BlobFolder: Text; + BlobName: Text; + JsonData: Text; + begin + NavApp.GetCurrentModuleInfo(AppInfo); + ContainerName := GetCompanyCVRNumber(); + BlobFolder := GetBlobFolder(CurrentDate); + BlobExpirationDate := GetBlobExpirationDate(CurrentDate); + BlobName := StrSubstNo(JsonBlobNameTxt, BlobFolder, MetadataFileNameTxt); + Metadata.Add('aadTenantId', GetAadTenantId()); + Metadata.Add('environmentName', GetEnvironmentName()); + Metadata.Add('companyName', CompanyName()); + Metadata.Add('vatRegistrationNo', GetCompanyVATRegistrationNo()); + Metadata.Add('cvrNo', GetCompanyCVRNumber()); + Metadata.Add('bcVersion', Format(AppInfo.DataVersion())); + Metadata.Add('exportDate', CurrentDate); + Metadata.Add('expirationDate', BlobExpirationDate); + Metadata.WriteTo(JsonData); + SendJsonTextToAzureFunction(AzureFunctionsAuth, ContainerName, BlobName, JsonData, BlobExpirationDate); + end; + [NonDebuggable] local procedure SendJsonTextToAzureFunction(var AzureFunctionsAuth: Interface "Azure Functions Authentication"; ContainerName: Text; BlobName: Text; JsonText: Text; BlobExpirationDate: Date) AzureFunctionsResponse: Codeunit "Azure Functions Response" var @@ -421,4 +454,22 @@ codeunit 6205 "Transaction Storage ABS" // remove consecutive hypens OutputValue := Regex.Replace(OutputValue, '-+', '-'); end; + + [NonDebuggable] + local procedure EncodeDocName(InputValue: Text) OutputValue: Text + var + Ch: Char; + begin + foreach Ch in InputValue do + case true of + (Ch >= 'a') and (Ch <= 'z'): + OutputValue += 'a'; + (Ch >= 'A') and (Ch <= 'Z'): + OutputValue += 'A'; + (Ch >= '0') and (Ch <= '9'): + OutputValue += '0'; + else + OutputValue += Ch; + end; + end; } diff --git a/Build/Packages.json b/Build/Packages.json index d85aa4c888..3ee793130b 100644 --- a/Build/Packages.json +++ b/Build/Packages.json @@ -4,7 +4,7 @@ "Source": "NuGet.org" }, "AppBaselines-BCArtifacts": { - "Version": "24.2.19548.0", + "Version": "24.3.21374.21695", "Source": "BCArtifacts", "_comment": "Used to fetch app baselines from BC artifacts" }

^v2XO)^tx?>M*=9r&&7r#zpSEP)*^PWza@B`~XE6#qH%!YXb5fQ$2C% zDdKFwYQa3g8%)l_&eC1W$jgmP?|1_xf2lhCBQ9OoZdRddoTxK*$2Ps}k5BBGtUCJI z&F)uD=N@Wnx2wDIdconOgjvr?5rHU)jE8uw^6T_a#>t0utx^!Ny_NtGa$9VR(O7@ zHL@O-t`eLMxl}mT+3Y6(kaBzW`ad6W^z`SHX~@yPZwqlR0r`Jy0N7c@Dwo27VqSf% z65PlZy3z1!$)BDYbT)o34Ai!>|8rL^h+Ub?9D$A9!l$*&3{8ia-}Ho60sssn;{bxo zBx0W#Sw{_BfiU#{Ns(zlB!$&bO4K33ECoxxj+9S*va|VPLt02T{eJi9zibGx^0y7G zkFWw8En7JYIy;s80tqVwlC?L#d*k&Q?D^ll0k8bi8?p$ucm3vI*m9K*g0(4-ek)(^ z2=E{)knCz#Q2BKg@@B%{e6$Apc>458F-)}xcJ zfow9K>+&6Kr@c-H;Wd8%R|odq-=ucs{%&dazqu44^pCLFhQI>? z|2IUe{naT^e}i-W-%`W@Q8tBq%@z6If#N<7;cVm&`@;hM1clDu!l?$4xc=BFEcB0P z-23vE1hHNEx1E~(4Sr?NPXC18fxT65`pAp)U)d0f@ftYoEdGHsSiql1vqB*4cck1e zxpPoG9lUEs4<*0f@%q0mW#q5O_*+Iio#4zTxU>BILU`@i-UBg3j1w)X)&+8>{etHT zsW!qMCi``dh1(Kw$`{1b-%7`fG^v*)rjM{YFSNeoys^s2r<;_4+0%vA!aYWVO(63D zh>Q&jC|@8)AXLPjlsdnZ{W%R_!!ehDnU1urK%x;%YVEN@MW9=nJsRNH@7hV~ZqTYSdI z{m8pn(nclBWO`{D$FHOqV@?HTr^U4S4NuuA@Aom1%8y`lvV>as`^XyHp`K8lqU%x( zZ!^%Mp2v5JlB&G^olcp}S39O7m8(DMY8QEPCX*gXM>LLHsxDR)capSG5xY}5ri7L} z%9U_`|C@42QS{u?ay<0y+;y2bnAeOrIYYx3*E)UZ4=iaQWDjoFTn37c8@w z{Mi}-=9HW}JwA76l0Tt5{P8(MIv~y^T?NR@^1mscL~@b)o;+$_3|07}Gx2dEeQ1Kw zKSuj2?0HW4(Pw$`@Um3J<>T#FNE1A4qq6jhr>`xxE$4|7UG47=l8r%WZyUApinn{b zG>3zg(I-m~V`sk_2G$fC;a{mQ=6e2OVR$v+rWl*NacBQ2IcR;n$?*=dKm`Xjxy*#P zSmlg5`Cpem9$vnmQ5W>IgR{p1LED_(<%{=R~esiEX`7b{J;}*HT-2jf|8;-fQnNbKg@!?MtNUVkCV)x9e;5 zs_x{2&3LQS4rsR+OrJ-A<^6%>=c0$DmRjwn(lF((c%L_2k|P-HCqui@(S`QIP~c81 zJ$FJ}9sXs^l8P}leMoTgxiV}{AT$yS5Y>-RI=9ImSuAnD!olH->m?OAbfxIcR3gV`p zpqoyegS5887=U(;5+}lkE(j3iXVwL9Sa${5;58#$MG-{+n6WPqiVGAG%AwsnvJd8) z2$6V1M?{i$BScCa6)A%hse%;Am&BNHwpIbXADeUUgxJG2-OSf6idTA{W{-7F1RPD_^>T8JD|!A3wR_Kcq9WDPLF79jneYip~AP3($$YDtd3Mz?Wn?P zsKzg;x*Ex<`!T}1hp;Ipw`1qiKboS%5*ffI%T3GxK?Ur<$UTjtmQ%+Ctm55=6DR0Jhpg zRg;Ys_S&cX46{Xy3bf<$L#J?tnWm;|X3_01)>Y@yR3KcaBRyA;m~p^E*1-=UZW@R9 zB|?vr*hlm@Wron>-BCT>BQeN93>*>LQZ0^eTMw)2o~xElC`xFo<}uAY62CH#JsyfZmEEC3mbSt z#|Yz!cMQ`;Cj=GyygIHpkQ33gI-pG=VKI$_#cL!ipd!)t8lxR}0jHi7WRF7+_kfQ> zNGm_;;VPtumyUXP87Z>zsK`o$NKv*UBGvMd;6;jTz?84(MX_gV(hkWDu?U%W*l@Ma zJFoLLsoS)Jj9F*WjP{E6B)k@*TO9#Ma~&icYYw9V$`0E|lY1OBxd$@XbdQ*vSr?fd zNRODDybodWlNd)54i*n0;dmbv>5UYrcT}VvLgWpk$WsIj=}dETl1W$wY)xuSJWU${ zE*<H@17*QTz% z9+*AFDQ|s6EFI!B8Mbq2n1WY=7dAT4XbS21;x2Td&6>cAeJJ829b8PjLT?egXbUm% zTIa5tKIdX08r+uhrV6f73Pzw>IfI)%1@&KY^3#xZ%&$9wTQmZ)kg_^u$tKT^Z|2oS z1`{m4xVvofQ=gpd%A%l3R5y(iO@B)f+@cWFb}c=c@_JAOUWvXEc{S2cU{T6sezo$B z@cx|Z2EmuXV^FrX_65cpl)!hHCUkCxbQz|CQc`(643sZKJQSz%+5nlkT*nC^jR^xhVfMZ()gvB>L)Fp#Ac77NuJ^}dsN?1u&2+V{Qoiw-;A zpiwOEIrM(4evE#1BTxzQ3JRyO1a|z}7Eu1!hISqXNiC6mwZ!gy3eGq$Jk1Pz0Mg^4Klh1bscn{(cAJ5jX)8&;tQM5IbG$U5yCyA{rq=8 zQUAl8tHnxh>R}vTyz*vI78Do27+i}_L2k(CaJ2`TO+^Db2Ky4onnXCWp%LgYX_gv{ zxDNT08Ig?g3h?geg-jQt*lmDnIbsfsxomCyK%wsB4ltV#`VT|$J9^f+^tHSL5RlH@ ziNln*CI1kRA|edID#Qj0qlTq^`r4VM4v;}mAZ_Qd$j_WmpCo(;EH0qKTUh~>89|8I zAl@=No|qR+DDm+K*oaFv7{}{&U)^2UIRJi;eJtoDM9r()Dvh{2Y_z5 z&HNA!SC54|04Q(kx}#A%7C<obd;a^*rsjG06Mvcz#j2C&1rX4DQ|ka#{+UOoXG&SeiFtHI!el3QGU>_wEg zz1tvok#L4(0_(&Bw;$Rbb}t;Dle6CeNB^Jc4&}t3Hhb9S4k>zQ{X>-ea{1jZB6}#` zZmxR`|Cy-%KiuimPZU5&YwI<*b$|X}zzT{2fcJmWjIeO1rd}+mK%GOcA}TsnwAU67 z1r@w~fH*{oL*yIkIFJs;gV2yE2jqqLY4Gxg=Y+8TB?5oh7A`|S!|8tty8oQx{!KVU z2NaEMJ^HYnnGDDccH#u5A=^URpM*3~cUjsd&q9-ap3B&K_4cs%o%ubKvv_shd)^Xq8;B&VkZ3~?EA>shMV+RT{ zg1`Yf;a+?SKu%i`G+jW!k%z-GV|2fOWDUvf-HA<+4uwiChC1n;9L%Lw9*Be{&s$qx z9+o=XT;0JS87J8Lp`3QaO}xz>U?D#M_e$>Q!59KX7j~&pQo1dumKBTOFo2}J8*&hz zd4p7^-HJ9P59)>@oNbK-YytStI1UtapnV6kv<2G*zPHvKC@T zr{Kr~B?ZJ$dScpFYmKPkGEZ+Bin7IgO53PQ89Kk3*A!3s0Ok%H zWF+iH3@nLQ4(;sL-1`KnpL+#*vri$bC>%FJz=ke$he(3x5-da!1@aIw{KkrZsu9f9 z(a(jT^N4=)^1uPnX{bXxJqU6PbngA9-@y46>X0Ic*P(yD zX&3PR>M6VcM;SQvWKd>9-aHfnRZ!r17=f_e;En=datKQU%CLYA&I<_XhZwvH?sl3T zPQ*arc93AwnauB(MG3Y2)6gKK01Y~tqY$nF^?T#cMo@}ENB~>--}2v{(u0wxUqbZR zI+4+fFb;e?`H4qxB(Z0MVf1@$zGmd`5bC2tc6TL4ga$|$An=YP3`9Qq-*yscHb4V| zpLqx&mSpZ!5s3kk`ds{s^v1Mb_D=OLPZPU@{))r@GuVWA9$ZNNk2vX1-_ykbH_y#A zCP;-;QE6Tnpc+`533?^FR!}>D5{wgeHT71|{M zx-SaI7LFYj#7o%gt6L#F&qBNgbbX+ zqCW)ncb00vDR`Q2IIA}rIshUF%Ofx#a~>m34z&1LD9&K5PxMXGG$sJUpHn9?g+Im$$-G5@ZT;Eq{$TrN{mmrJzIci{3#664v_N z;fe8(h=3@!AL%8Bd-~AcL4gCgX3P4)W#}j(phNQ_@UWo*_v=%kR0!{o9e)<2eXy+| zY^zkb0L@vlA$uYnU5)*D-JmOBI|bSlLIQ6sds_Op7x-WLK@8fHo=1>l%GbVN{?(SsyImE|ZI_+13dLlN!)xfh@y50F%7gDP+_g#DPI`?(vUR4_0Q zG^Y4yik_|z3{h5#Wlk9z4VS-C}cr-ZzUdRW4 zIRV`du?y-8U?hYv+^loKkP_nLeNQMMkJ*>OP)By%7;8tcut6Jhk=A_oI$-n&AH)1+ zsA@?A8rU8hG4OQ^=p@a7qd;{(IN*aI07T9R_B%%JOfl%IsuL^xHDA0foi2utKCs<+ z!7LXF-4}=g3u*te9j}my6bxF+P_p@*H9_rR;6%u4NXCQ2EVTF0+f|{EpPy9yumP71 z9bA5KRj7xB7^Wg!jA&fHArZoc`QGm?hK61l9lN%NVTm{lym1*Lgv&0B5%>%MS8gzN zL$nnUu1C^qBnAFo&p`j`L>Rkf>)>PnwQRpOLfl~pK5qZA1Y+un%pwUe6c)69FvF}8 zwmFisBkTYT*ucr>r!@fq{a3#c!Y%m!b$s4Ife#;u07B5(KNSEB9u8MUSpRZxvVq*E z&*uIDT<#yzw)#C_;mPwMFp zFe!kY0nJFNYKp7M!BhfdY?yGo%uqQTVSTLzBdi%yuY22k0touU=Ns160%%KRD0FiV zBXXGgz+E12AJO2pCxBVj9jHN*If%U=2oM{ruW)GKJ7*exAjs$^^%A_o21*@xW&=#E zz^o2XsUK6ww9N7ku44jm9cLP-!wq$9j_@LAE#fE(&kaG0$U84H5DBc1 zL>Q`E$A6}75knrwv5-8sejkjWg{`B5$hwarte2OvxR z(ZbODwLeNDL>6!(1`ibd+8;E1mWJ@>-;x5_sjN&6)_D_5&x1*A+dkm z9&)Y*F$BbOJAjd21LT+(A`jr$3>Pui7iQ2=6&vCWjPOH2Fm*s=K6oXf<&+3e14}`S zN?(ByHr!bP^VX#~z)Jq%zb%PuEj?Lyh5(PS4%sy5r-3vHx%vpL`GrxqHxr zIp=A@80eDu@~_B1KD7i50-^0d$bm^6z#ab`tssw&s9@f3cB~a@T_E2Y`{Ia&jG3Pg z7VP@pL`GN!VmSHRvGYHHRH(N~3`Rr@z`X7|;qNElco) z9_B%S^$I#@)BWCzdxGR^#YWrAwF#gJ0;Z)#@br)cdG>&(-;m+K*=CEG^a0c=d}ZWJ zqXE*uh`El2BTe^+IT9K_hw)JVN)u|ZACgrBiV%&IqlpJG>3RjGzed6d$hjDzw*;O~ z^9N10zbrnNm)D>Oy429)LUV#{#K;1O==J;#^Pje{#afyKWB{~NUj#zL4yLRbN*={S z|8|QuMEkSa5;U5C#TU%pBASB`#(ryFA(XfICy)DG6?pywCn|)%Up!6w zbEozMqg3!b+aff$hLuk6g%4nVD~fkYeh8*(RZ41U)G^ilqrZOa&JV_-qSI_y8u-&{P=V zPaSe37yhk^KnD*NsNgF8h1kJa_Ap?5-9Fmd#yWSp4IMI zgM|EFLaOQG<}^H6T}@K)-(6Eb zUqC@fv(7DT$G5hJhF$N%O>qAKwiwT;4D*ZA47aQdAM2mzNYp8F?P%u~v8uyNemXv? z%!qMq&Z)8Wo)@)b$L?~6toX+HA3`TMlG-%ti0aP^vT+6J=pmdEYHG3eU9#swpCUK9xYzq;RZM0% z8ecQ#vXA4md%>}}?;^4NRS}W`TX-cui2d>%yCeF8KV)f$HMF^gWo!mg-bOt^yWGRX zezz;6H|l&Bq5er)w%C#z{hpT`uXqitqH$19W(h8TDM7~)W5d=LKE`C7$EwC^e)@cA z=+~WHSzT3@lbLUQ9&VhWmZ_xOqC{h6&yh;z)@Gj;X0R8a$F70DQ3Hl#M3kmwJv**= znOD(6dLDa62LGGyB$Bz6YmCKlEgWEbYwlMS9!0hN9bsfLF zc*`b{YrE&Oyw@yGw_LS)YORxd5Z%l2oc}AQ=tsTi$yPj!Rg914Y{)JcW^hQ7e$-^Q zeRt32c~!$XJ@&=gk9bjd`j(f!pHwL}1HUBT=?@!!#KR~)#wF=0@z^N``ULUEGvKnx zN4#{yC!5hULX_t?VkJ@(xIdB(n|Lmp@zYE67S_mwz8Gy)VCqC& zY?ygRm5b&ZvrgyDE$>>w_B%w}G=xF(l*d)h@~L(O;+9r&4Yj@CsxELLQ|-Y&_10%6 z>K)-Lyp&6t$s$k5{ofHfTi&#h<$hK+$3N+0hOKuwyPEFox49eRzGm2=h1vDs7ruFX z6=yAFqPCU#(m7vgT`W|i2W)1Q)-0#*+{VjO&>MZ3ZS9|q9gA^M!3Qh4FuQ^7?0R|G zV*4{7XL767JiJ=~)ALm<=2O9K<2?pGpp@y}MF#s8w&!4d|k_^Dpw} z8=W~Zltf|@$LZ#)A;%F`#a=qYOSHdL89-0U-@X&$kRC-OB;!Z<-9g9DV=O)=@m1i7CF-y4PqzT|E&T^Q@Od`$lG+q$Ea18q_XRZI>=!pXEMU%eO!%nEM( zjC+fUxJ&{I7d(2i>*7pq4|;VCS~`f)27>>~fLh#2BVIr#@kCcTZ)Cnehnp@L$&~Jx z%&0=UUc;h#XbFA~U)K-Prf(6erMryL_^hm{W_!GPwFP;>8t9HNC;qsT|H{zw{Kk` zeDXuc@2Xfz%XWE$!o#-@2^CjS2-3YDFI~UwtAl>7{>*r}da0FOWaAcX5~D22_%25u zhEIOlDihIhU0VA#^1Yo02Tbelyq$xulD1zxTZ8ImO4q8V}#JSqnVstF!cTzul>0C-L9~?fJ{MbY6J06C~l8_zGE$@~R ze{r$nUWNkr8JAECFIGHI^{|V7LFxU7PZ^!mE-IJpr6(E5yWVaF-}{#thU8;}rCZoc z4rtjZsGUd-T>RpH-Sodl0IWrD%8G&SCBpH}J$GYw>y^FzKP#_2hHJI3uFcIsm-*gM)`q1&|2hFmPGb5K^O%5$T*O!?# zUv2uy%OhnvAzn)M&lYw(9{Y3Y>$W$Zs=U!W8A;flr*{8sr=tEU6OTKq%7UZjxUhHx zo4T|bntY6bNaS@LZ+#vej264~L2mKzizd4yY}t`J=PBNZV!S?E(=cK7v^hCuWwmZh z_kcWwxu-Mrp^V zIBVgxG4dt(#oZCkGpo^y=7AFZ@x!&83DP2mg|MvC%_S`_jNYdOyxX|e$=x`iX-w{O;cMz8 znd<{7dJkH%ZOXVJPX~9uU#0RQkbfI>;1@kzn^=DEyn-r)wzgkmDSLe)F>m(r7i$U& zg?AS|Em&>@DY!8#MuT#f6w(>_uH5;(DmlB$!Mwra9gl{btXJuZrp}0yr z^CiIDg>54{JSsf%1*%F+%N4P{_0YGbmu$7IxYovZoI|K2$(1Kl!!EaUM4PN}?(Le~ zk1)-UZ3sm5xowomoh~h?*cFDEtkqv|HjhvlQ-3t~i}ULnf!{VHlUI(91Ph8d2C@3w z6nq;ZUdN~@^P1!(56NSFA`bQ%R;QGFZjl7QY3+9mucaBI6pj(`8exk+O`INh6&YZD zY00f#Of)XsOA@7h=}UwAeuuPmc50-rjpv+}p?it&Mgv6>Z)eIu2D{@Fqy6ao@x{!< z5h=dcg-359PP|<=6?(q&M3?{7-c#wmsd}nlEu0l&Uaes}!N6#Enr6eAR4yvdNR> zmg>E!%a5cEUMVpgn;Lq&ILqW_L9naJ&(G9U%{lUI`Ps6C$!Phz1%~5h7CfE1l?E}Q z3`u1IPj9n7BT^de#;X+6!o76A$oX3ZBNrjs0_mAOK9m5SNgiYCoGESc|H0TdM@QBu z+fS^CJ+Y06ZQHhui6*vf+qUgwVrydCnDE#0&Asowb>H`X_x;tUyU#l7^jf>C_TE*e zio#2~%a3y!3`nyUavBbC$OhXR6bP0YxIysqIyuxU0x$PqjiAp1GjPy3N{(k_&leit zhU!@P;7{k4pznBpeHOt9YNktM$IxcQZyzXRgXCpa{gfm}{@m8P6tTl5bpa**jy(5p zw!(Px*XEkP5SNfVW3$SKAnXnH3&bLcuMP{dV0Bq%P1l!PA$yiGr{V48A_#KoXX3*T z+W_{i{PF9_u#@N8Z>>18&2zbKANQvBU35~lZSOpt+Wp0<$nQ^awH_|F$ETSHKEoIgYk9|UVFRXxVFYK zelJlbj}-d&1Dmnd@?M<|g0#xg^skCAq~xM{df<)J93F#)*{_hwEM4n$X1VsF^)CtZ zb{wxbh(raYL?lJnxlC5*=8$)WYZz>KfU_}_kze+hORU&_R#I!&&Ci@=A!Q+fkcdb~ zu?v{5(99wosl%K#XrSRlRE2upXed2&!17+^sG!kQd8Vx^_9+_V42XqNh?3Jxg*Sk@ zE&93Z{`1tmU96ukb!OWs&P?sa0mTD+p|MDcQF0nOXy#CNf@9!S;s3fS%UKWLl2$E% zpO$cyfIXSf2k3bFHjS_>UnfT{Idku75kPUT2SFryir@PI;mCE^SK1m6-$g(o?z7 zuF;9B>oDYSBu4n6pXM-o<>O!K%5kC>+MoWj&$cR*t52)+uwID^Jcw>?RV|H!$n0lb zZw_*|>!c4N;(a4*?#LE;5sZ>0=&52(KhVRu3a+>Npy^slZv|I|B%?~~T+>Aqb?vfa zaEnN@0Cex+eHC9$Fjr8`T&4%Vm-C5gh%CJCwQfzF+6E@BqOt||e_{9Ew=T)a#55lQ z`1yCh&`?|eumRHF&fMA7QAyvx%Glw*9sk8s&eSz+*H}=z@M=ErAzhV8R^zNNn_xEQ zLB-m0oZEu+;Twe32FT@eN(Mw~Ke_}ZlJ+GLtF>z@M+DJ97_&k~ zC}bf>-F8#J#ffm|9J%T7&~q1&6Vky*T5+vyL zd}^8SQm`oMv#bwif{59?`x)c=B(d!d6d>zPMKpvYYghE(sOQyJ;iJt;926HKHvhm;VqJ-iqFxo;royMS^i6B_ ze$6aYzJn=}5Cn$!y`h?lJTIUKZ&V`2BmbcQ*Svo(BLaGKtfY{Z3zGlp&;|I!rkBJ- zPB8|aQv3$rj1pam0hl2LjUOlTd!G4c$%QY!f_SImq%L@FOu0MJq}ZtLm9K^Nt+d5r zGx~NKofYWC8ASvn)UXx6TNivkzeI@2*~?w|Re&F~%(V+6Y=(ttZ3t*1*FF{t|Hwh> zF|hQ7%duYVzaciqYel>k2#ktZNx=Fp*<1e%>#R2une)|9ksp&tPAUdoM@(daKk)mF z0fq7d8drJ!SA!ZG3`I_^!@!V{448dHA)`S3!CQ&)43!@u3eauT#4}X~ND5U-L7t5y z!6j6_waRTZ44Ux$x}NGsBwe(p5X&?r>v+YG3*ys-uFiN`o=KDNlQXr8!RMUqPt{sb z!!X{F61t_jEj+poPM+oR>wD9}H~M&2z4lX9f{*H@GTP1A&oHGXO5Tl*mSy*irS0`R zEN8a-<{yTNSMZc>8#Q?L&SxD9j#ce$=aZCg3zQl!BiZH82eot-pX36wq{dj!I{n)fkksl2$g1-0~%GBjr=buub%75)0@INl2qjG4?tq$VP%#8Gs9s(jJDH; zkPbGa8iyiJs3*aW-5zx^&U>~glz4DYfgZq&VwbnCtS5a zZR2|I=QNDoP)cy<6D#1!Mj=2*8bkBbzUv5M@y-(Rn)cc$aY}&2uKiu z#WQL;vuy?)LZFdea?C)|k`wz;vF(n7CrAjahKgq;|}&={QN zxUvIZ{q#+hXJ0alKQzZiR+!!rPIgzS7V%_Idy)fneOJrxTP%5)w38SgQe+990~_#5 zakt;s$Zc(Q$O)OpjvEKPXEK#8`bvj&rW`C3r51!la4KDBWoB(3wEHGqIAum4I$6%1 z0!5d8o|PXjS|{Bi1fP&S!B?%&+!T#my#CndVwb59hMlb2Z~gY4&uO^VBs9 zUo6#n$>>3l&_S`mw04GPmO*^B9repg{R<@5 z?Sh0NbV9L#)l8#}MdV`R7a0Dp<+K7$!WP_`l}B<^6K5GV+Qa7&9((O*CvHSzPDRM& zoL^j3j_~0dx%Q;EALWMCKkuzG3p+?u6Loh`QiVlt<})8% zL?kP<@y?RLCj17VcI07P3NG-M?6|JaYfj2}RJ3aX^T;sSY-l@9v}nSfUu)l=GFEZ} zH3m<>sDvlT7GZ5GH;bxuGj-_pzRyjP00TL31`UTcDwJVHi&%H>#N2xP_ z#@!z@BUk|!Qr!<>i{iDw8ePfLwy!!^$0|=A_7cz-3|mc0OD&B|xvq;i^&l})ZA{2J zk!U3^o;eot_N7gOlY45>l7WH(KC|6Cro7b%o0vZ>bFwd)yR1ER53t!xr4@Ow;UjSd z+1+}NEjPcDZ+_lZtPX$eUmyz&15^81FE>G1 zbEZkL2-}CkG&1z6(P^u!D`2TERZ*=jfBqMN6To{{)$SNfsGZAv?J=a;w zJK0+Wjel?Rbs71^g<1o(6{S+GEM7~As8$P&9S;HcsmIZX+T!4sQxGy8Os%P6v>w(l z&uf5`)a$Jx(O5tY3%$=i=3GXYb?o6tNw}Wjkyg!Gdd!#?e8^*-(qLoKy!Y3@2 zpyS-rP*g+-AOf^Dp!L`uSgr~PX2U$}FQ7a_%l^g*f-uo-2|`{=gt|a14G}$sQRuyW z3=AI81}mNalj zdu9ti7`V54!vD0nIBt!-xv&fr^mvW_i~U*PajbqhUHzUK6;7SgnfYSBv}6HaIFTP_vHCD_RXAA96YjCPO(kgA z{Az9FC~Rq!H@)^QuN$9E2-c+ZUL8T&FG*KqsfZ4QEUNp<+y&Ybs zBR;%ezu3AOYkS(a3Vxw)!1Txg=q4}7xfItHm1<4=%5A!9lNXjoJqFZI%U(7 zqP+tk@`OlObTI@FT5!Vr$IF9xpy8-hI(pmBmV->nb5rGc!slVk*y3+1 z2P_6ssbOq*WQXmtV z+V;bdr7IDTd+5wSy!gL@2lO#8S z3aL{)^fNgU%%=~(j|Y*{)vYhXoX>~u;uGP*)&&P@^G;|WLWS&t3GSi#mAh?JI6=ms z4{Bl<#Pkpe=HP%Y=ZfxdAT3#!aUm^vwjby=EcGD}I`dmzCQmLNx=v|_aLGSNIPsls zFUt@nuQIyeuE|T4;tc5T70i$M{UWMG9~$sY{rrBmScI47QNQnPlV0Vne^bX6p>Wnh zYqZ>zOwD1_^}uR0JdwO{g2SrY9oF9j)t{=ywZNsHazsr4i!XcR9z$5rl}XI6_tJGZ z$CSo?i!yr#FXs3W%$0i>M9gpz&O!T{O1(w9^!Af{EN3UM5W*8Uv|?ibfw~ofl!swH zHaF_Hx7{?pJ1qC7eljy1T9v7R>6jlx5cQjpHY2lKgIhq$tJQDo}wrl!LITZW{d$24VxvMFV+Y>@sd z5j}`12y6Oh&(1}7+s`r>h%Gt0CeaPKe(C)30hzQ=VmN-=Z11kw`ar5q)8EZQd4m;P zwkYANd{a45+cR(NHJyH{yy2~ttvB|*?;!rfDNSr`X?!JyX(_)k%~dgd7PuH-=qhdB zuJz7boIf7xp8He5`geI#)!L&;3n)P-0x}!G3i>T?9IVU@jlVhk7^LN z_5vFtu~3+>qiQiwc=?wo=RP9+#B;fMqmIHZTDxx9D6bzy4dHkzXs>ZbfW0_mwO&lG z1tl)T?8o;C-m^Y+c1E$7w`AqY{^~#gL(1kKFi%Kt39a5oITGK-FRTKYaSe5=y@h$V ze#UU}W;2u3ATQ>vXc@cXhvZ5gAE;4?AG0LZ$25`t`8q-_>f^vO{u%Mt#8bS*cGBV4 zA-N=mK9Y$5L&|{@bSeTiTEbY7Uc<g@0Yu^}q790(5DmL~o0Wsb@H-QDf9o`o46>WA0?^eCScmZc70`d#jc00qI1-QE z2S38Ia-x}}v(Yl`UNbXa5?Jk;KE{J@5_viX2{cOLGWo-%OMy&#K|g`?%z7Bv6pn*8Wd>`;ZM`y2i9r*6MTbhdqF`~(g7VAvkPMMZ zS+~ysc-m=cBz^c$bU*+B-8oVb^IJemVj4MD&uKRlD}1Z;9hy+~3t?RDBVX{5iw~*g^X5_6qdk zOd_bs^=JGTuCUIwQ+5e<351YA>+!EgGVUN?Hkk}4zx_fJNP>)nE6x{&uHL9Zlwt=F zO?_yQLh2N@3FwduBLsCn+MBtdWYYo5#ijG#Ld|%K^5Z#S?eX8IQKUCy1gK{Oo-GuB zdRDgZlX0z0(lTh;QQwX8@nxY$i^cGt8MBbkL=&SpYKsxtr6plg=Z_9PL4ZqB1vV^R z^mA&$4eEw)c<*ai;34{u?6)E4`~duMTar2u2-Lsj3LHve?;M77Oz98DTg{>;OlHRm zeFQi@Ej2&cK0l9)OHSda{ zWt(t=by}~I!BNf}>c^oj^R{{_0@upG0=Tjf zO*GB<#``}p;ZL&N1o=u>lqwhIa1sw98!jMhLNjda+X#B^(8+1P`WwJ!?tD2k9?QGr zzAw~sqLB?ZiWOT>Y_nKH9)L1ogI)VR9jp^&iic7i_NplXing5;S0sEysp-fn2iTe} zwlxu!9GUDqqRI`I>Arx5*KBn^XxF;$1YZ_qCyoK7yasjt#k)eIJz48`$=l4#B;zzS7jwKVL14G zF4iJGOvv#F_qg8vAJgLzxycxAuv`VclAm;w>E7c!FWNW|kjiKO|Te&)Pcg9Vx)~c-MRBbO2);L~Z-Uk(%|ceGyg8 ze9@}zswnEv`Ar={jd_9@&UxgGO=RlYx_b{hmrm$ni#i+A01ZvbUWONGaB_diydSj} zunU(+q0W#QLWu$lX9W?$Eym27CCr5cO*pC6 zysbOo8Axx5-uTK`Qpki{4(1<`(Jc?x*?*fA7-{lGzX3F}$N#RG|KtOWHJddy1W&qY zZ~VKCF!8WFl6)Ec^)O&zO)HHvMxwb|1o1lsM_QWaOU?qLcKf>Xq9btgU3AS3*wR!+ zhY>{Gjt&b8M*=6+QsV}-Mx3j*au-jvFo6&zv5h;uCoz|}{H6dZrX-ABsVHi|LB9^PGJ_+jj2+(iMVQ>7cDdGDMm z&7Qg-a-xEfTDCZ{_}R_&$H$InSz!DKn=pO4rw5kAn~N(vVYc}61qrYiVBIcH zM2NXu;BOizij(AUtq!!O)L8od`_#|D!%`SCqT$@6Pg&)=@~R*MOlno-`vr8Lef-1l zKK;bM)crI&99pe%zBBj`2!6SGjF{H!wWXDZ;N(g9hsZG&peW3;q?sM9<;wz-h>CT;Kf;YEhd0qQ8Uvy{3X=o@P*jkVfBs zj-Tx!hL4*#dOFmfW8N&Z?cSoWA=W{uk-VGIIMU}Ay@E4Z$dTw&Hn;bKo9{T%Ge>N4 zo*?Ym6q+)xSc4d}w(4wW*7^`ZZ!|80?ls_7MttK`i176f4 zy4^tb>p>&&c~xv7L_=M*>ldt)F3T@`+7Krka_G;aWL0+2Z8D3+`$3)0m210W*miL! z=DjU=WWq+`pM5%;?ofrV&mC0Rf&zLEehvxnlEkI9#ps0^H?G2r+QI*9YtsFA8-&f6jAn1{t4nYD z9YQ2a>%?wcZwbPD>jm?bPY2?LBW7uel#Y$#ZZA+o(ynS@l_sRCMQH!~u9U3SBmJXq z3*3McepR-#mR-12bj#5$j{_JcAY47D3)D_Q{bcW}{|XL0riNk41osOhv(;)AVeTuo z=8GJf{8^R3SrzvBHSFG_UKOlRmPTJpPbI@M$ODhul5g9)=*j9jJGKpVZ(;mm3#V@Q zW1F8Ot+%p?s{!4uOsDp$=_O@Vya62?-k<%5|E`Z+s#9R;0QxxTf78c*nk44s0s0sL z;_6Wxur%aFrKF*c)XekZnG11;c(Esn{#Zf!<)Ymv6Gg1N(v|1+(B;s7?L}}2 ze5&nnXa#!)li#-~QWLX%bY^Y|8V2Plx2e3%N#*cJ*xk|l@z-3Xtu)9mFq^GsR8xOV zdT_37Q(O641*7z3hbDaekW;Q^_4fAkrJHv3tIBDvWq(Kv^>|+u3)-7_s>_6M%$hk& zwOV^uIRvl68@SBf<|F6l-gY;7$+@)c{gkAf9LocEtkY+=6~B7~Y&U4w%#hpu4OfiTT;WKf=R`z|a!J z$IU71_(KK~C<($!;*^ZL<)-K9e_?ZH+3c^8$IKeKvS!#knJBgK^Ot8k!LUaAZM;3@ zO_*@*k?)9S$fL+)2+y^2;wW(+MV{)C&L$KJjgt3MkU$+E=BlAY=%Y&VQx!_|=!%iW z8lDz>&wQ}&wtDx=9jl)yi!k{X3zv2KAOhgy5NXM9L`v(2eiW$Mt@iX?{@?0M((N*hNQ8Beq?@-!d2;opp_=GHfPY? zi%OjsZbe|P-_Q(D zV*caD{PpJRpRGCZy0&w_cXG!*!NuYsxQk^Z#4wYL&YOHz7Jv-BR#F~uT3<~209`BP zAn4*;qJ>Q$z~EAEjq*PH>2Q8>f-l@)I`pm5B7uY=EG5rvVxdU{&(?P5Ygh%5g>-;Q zg~;Q0Uiras{10fERCB2HTFa*GFiw0SKE);x&cimSAv6|}+R(juvvOA2Tn&THl^%I3 z&i;|r3k(N^E%~&hmVr3Cz^H`K0(ibQLug`_Rk0nbya_a!l=iN0pr44ts#QsC!c;qm>3%kb1_rr_L{A8r%SR?As0)14&3#2Bv#NN-HRPbBGx z{3yoxpFjJL7aX2`@k}+|eRWEo*y$iIwtuga-c?`G8Je3Z>CD=vTW#q01r0LSnR}+4 zL%Y$DsZi#=f5xDm(VJXS%F(rSu}Eg*{T_m?KEeN$O7>y{o)-<06_tmxg*1vO5v?Fx zfLja3+ly=RmTQ7m6rW@{3knO2j`<6veD%}eJEBee;B6@a`k10O&GBnyxjcD3GTZ%w z-y&~}_vpU6pMT%VLrwy}Vo*tCG;PIuAqK09)FOGHG_G$uFD$;Rh|wdo&-4H^xR(oJ z9W4FG6Xo6cV%ZFep>%|c%-ejPx|aK$R7`Ztebz!qlqA= z#P2qdsD2`iMB-*j5N3-o>! zbuEmGxD?K{iYxf=>h$WIrEnGb08D>Hta($dEvP&SMP_nm%x6d75vA@6$-avUNMFcU%&Dv>9V5D)zX;p!F&sx4rD<;5%%VrVw*Re zTQt1L8F3-?ek41vkPPZ^F_76SrtYM}vO*$ILf8D_JF)NP1`~bLY2Sme9NmIgud(xO zSE9Dv>c#0Z+4&IyyiYWO6zF$yq0~f|2tjLGK``IoJaV~;+aHbF`nW3mm}a-}QC$1J zd-!74NoAaS@(Ji=WzK*|EUJgm*}V!F)V2;9b+U`qJJE;$OUu(vITm;eH3TRwf%+xz zi8lvpHQPF>)>?npiHJx%e26Hx94falVz+^(rgMn#*^Peb@FSKGe*hxGM#pj`od|orfxBlIF&HH<+ZsXwP?b$oxr71-G>t(a(|XfAi?*O9aN53Y42Vo~ zgh;|9TP}(q13#A<1$k^B^aIMi#K;ki`i2lu&K7IMD6&pXoap!7mU&3x4E(F_@(#*t zlp6S;WaSEag%$+(dvV5G38LR>+DOebM`5y3Eim89#spfQP8MD4G-BE}Ws!bJ$d&%? zOwg7*40KRhEL-lX4g2_!Xm|Ehu6!clx&7=Bxo}@8;v6rCPBA2y0w3jG1hY;So7ra0 zJCRJ2E`PgUvN(T5CGTSDX~p#ucJ`SqQvOj&S%6xV9CP*W? zj1^f(9&KCi`4l#S8bt&~c1fkAL?k!%LP=MlYbVvT^-BK$#vK*Tl?I~N z3bDYmgPYQm)@MpHm_dQ($^#PcfmE4#hIWV{9@$VtI@9Q3WKSLm@bFY^ml1y~LFmyc zLb8dUKq?ALT8IWi>B9w&A(FOqRizOaQ_QS>#y-wOrl7Mr)oF&!fxw)AQ7P@+Cs8y$ z4g8wV-aJ-BskC*w21hhk+IEd#JLpL;uUolCkLP*flHqzZW!0Yz9Yui7MfY;L= zi=8(uAo@Q9*yb6mUl3rsQ30(9U}#8#{+OPYFCd?mMv#NzfKg6xdG$G_K(`v42mq}K zJRvAY%CEGy7tm3j=RCj%9?WwQpI#|uG+#8BVS^oLhU1WhPBq1K62hhuaB;pB;$+U{ zpSrE*7`kxvU;OgjR0>{5hD_{>?J(szUDcj}=bM|o< z2?iDGNLg?eO*chqhyY4H1T;Tr)a`ER$lYi$HQr3$J#ENY;iX=<~U$e@fTdUSIZnO0`mB|KN4p+57 zj3L2gRjPJ3*&nsqJAO(co~Ho%?V*ju!w8E?bnF{Tr;A_GzXuSWhG-z>qLxn+)gRS) zy_GfiDVkJ4uGdj$It=0<5av*5=2kkKV;I7u$1MwevuIebOqQdm)v4YlZ>rQcGH#Aw zr?_%WLu=^)kPEnk+JY&*He+bw#XsZ%TqY&BDiY`?(r~ht-Q$rtdl)g!6bpb{plo^I zolE~F7rSqg%Tv?`WPixTH>>5Sf07Ffq&F^q0J%T_kPFNwutfV|Rn+HICVz9r*3^Mt z!e2un<_u6+2l1opsimuLPj~V#qq=%K98JmFVWxkbzXU0)Q<$QUz6NyiIj!7eIzRH@ zzub!MjeG+SL)htE3x4k==yM8{ovaKYaw-Kg&zFNw?!%j^>m`?l_;rO{0J`>7KYy!G zz?0+z zfeXASyCzYi(1kUlM0StGK*Y8oR+~TwX=;5Pc#{GxK;Q&;+iVRWfr0@}=Baw~teeBf zop%e}KPCxAgkzrhfjhGCse|ozHhHd|IsXgQxZLIc${)iLK`7L{r< zM6W;hLJ);|K5>{lpKrDFm3It!hyQc!);35B_fqX?@M z15Cgtv)OqwQ)||t<(?vZQlyH7A0?5I8YDHVR$G)TnMFp{&Iua5_FslcXlwDM@{o^#}Q zzVsPf59I8==~j#TGOshDx78Dee)7-u%+n>aE_X989+<719R|hrpKLJ&P}8X!CfZ9A z^Cy<6I(o@Cri_GqYV7^N29NlIL23%`o&lw5&F2|I^h;hY!U+Zqu6#OqMJKE3vrd@N z*LOsxwqOn|hH! z64R0omEAvV8@_XIznZvS*h_FcURmso9YsWC3RXYJo`pN&#$zjG;b7b$naLoxIw3wU zyfLj#(x5Vj>Boa@U0>#h=pfE?f)F#+?+Eeyd`jVl+u_-*wS|E$rceJNC!>kphfv|b zs8o%h!&e|l_Ye*SY?D@#Ark)a)X&Nb0LcIBiMm>mnFj*sX7&FJoj(dXLDv!hoxx3r z7dR1kL(dvxh^27GH4@2mL=3~}3yOeTatXpR-YnwafZEG0s={j(1+^x!U8-Z3Np4kV zr}|{V)vt!FD$GCPP=uxAJ9jJ;^Q+ypCwhc?!ZAJ zPA62(EVeoa)CLNRTM@D|ubwnYmL#cFFWI52Ez;N3X%1zee2*ytK!;c>m&lm-7*niS z%6C8mOFTomVWkJ^cDeDZkLJ!(9Lxn=mP(G;?2J`@1A!#att+p2CKPrVu! z~Ptnp|H2gpCAC4!)HEuDih)T(e8MaOC5C0 zmL9RomE9FSMu<0ToF;8^d1Edw6P8WSw2t|M2jb>+x0tL9WE7N`8e` zmryi`F(!~LnzsAyr3%r8^7ZUz7~8CpMhpw|y&d=KHT77qc^di>NDPwIa6qI$I`avY zeDTxcg~HhA>$zG;`C#cBl=&NM#cx%^eNXDY)xDz|c1*FLbLt^Wm%*POR1z7@$n|Dw z^mF{HdOix8E2zl_N9rDI?74f6fT1M+{I0SXHv++1JTM%Mz;=qYqB<$Yz3&~nyP)Si z!#O)~2c%oKea`kFO!RKebvUoz!QZDX0a@!}2mpL6{xf|35;hr1($TB*2%V}Y-XR_( ztAaZLfhcBisCb&8lFH^Q$O4J>pVjU~EjUAz0c-1P)n_keL9}(xBDgO*T@8y{xFryA zerGMDKUu4)bv5xw{}(%M-UvsY1!02$iJKAHx{B>4ii+Kj@rY^e^m-cApFjejW>ymeA{Vl@X01*7mK#V{m$%n)}nI;WG%#;R}36!@O`k*-CgEobfjBTVD61m ziwQv1@^zo?tGLE?{EC{bb)2;q& z6EBu19Zb$Ymn>7a-2o(^9GG{k9H^VJ0bd$rXWQ@Tj`|dSt|1%VjgMs67Ya*$ol-TA z7O64p!|X%Uxz3Fjai{-T>pFtz9XE+QU?!E|UI66SlALzJ?WWn#-8GMBGDl5tep2&` z$wx|rCL5__LLX@~-UgZXg&W&hY>D)>w)t=}ecB0su-+I^cMXBV7kF8o&S7Rza?H3;zF__VbWn|j)dXd()ARS%5 zS1(oc1mU!@u1hKi`Sr;5&d|XoO9hS#G*g50@-d#eYUUQ(XUWzdb47;>#}EH9dqlo{Y849Tk?h_Z^iXC4G!FdmLxt?ZD0c#Iy2 zJx2=Z9j_mX?)NqfI7QN3X!OxZ)`+2nzOG^Sa825eXPOAVhAaW)WY8x9I5U(?LU}sZ zwr}To@%N{#2(~QAHs}SnoHYUj5wuUG$(ZCHnOm~yUe6r#+J_K7KBqAWop&bc-$RVF z6dKkEP!PLVhjUS1+#v(tp;1u*5@0-s!l0H)knUQA?s>NvaU7#vQ%kN`zX&=0|cf92DUD6Q{;e#3oRA@TZPGW5(E|0*7_7#BpF* zI`}}}7FrU0vMJr=1caa)Gfa`XtV(zZtTyDF*N92dzz4s9m0!4LrbzWzzPJEaPMXnR zIrOg(L<0GWf&JF86GxGaN$u3Hfbf~AK8h9WJ&C6N*Z2Drk#K#Mu%O*LZ6=(;a5J`v zq1!>bwv1@fO?|yKMrL}NYo%Bqb;;4R`qy-I)!_HlBd`*5rO*~(t^!@MfnT-L!hxQ<;)!1)gBYMNEx-5EwDhD{c`M=$3h)UfRE1-Jr|ZC-_)8gm$rvyLOV%geI!808-*1 zWo3dTCr!(D$RT)BPuFYx2~cc z-L6yP<^WRIqLA4j^j!~i8?A2lkIJotRH$4|7Gtcc77zhYCS#ZehbmlsD}6+R z-!tV(fGqZk6+6JFXPx-4he~2u@`e>}aw~b*|G%aOK6;<6`A|Snwh&!4+$O ztLt4tz7YA%IhC4rOH%28dDGJ65V?-mTPUjHASb2wDf)sZ%lnK_>)>f;D~(OzKqH0& zz<_98f2p)D+1>}MV*#WWBS3nAIm;xL$iG_N0ymHDSd$Da+{|wV%)d{fk|)eSWw^QX zpW=;l@7*M9sc##+R3z}j{C8g$?O(pGpwS!LA79rSuq)wTzAm-HU%swG#>QCdv+4>M zXzOPMUNN6Xkbr$Q>DM)M9k0KJ-TZq|fDLjH?l*b_{xf>m{;AtnfAeRub51p{l*Qly zs0#D`I3hF%}#k5MZK-y+XP?exAy25BpRZa@F6+lyOPBz#$Z!zXl( ztv94pgsw#+@oB8z+A%WLNr|RpIxO+~Fm+d{PB&%67AzyP^`g~yl9oLLC;&c^9e{0M z2nPC!3RsdG7}oc*gON!>bjfy!%Zv1FHI@MWT#!u6J{nq}wasmepN{-H{Dc<%6@Kdd zunuYg;iq~2njQV;ITua87>oa?gt_1$aE9&7V!?0zyqwj~Q=7v5hd-ww_OtxOpDBB{ z4r7j%^yiLbTGKe1W=)cd^e_X!adZ=&+;zzEnT}26lRS@vFHc@MzAWC;e~GjeO?LIp z*mHUY5h>!Ft9j|k^y+XoSXJlp^v&KbGy5gd4v`)A_6EYvk?mswEvt8VHFv#5LaNN4 zrL83=S}p*ynkNS@+rN2vUthkVob|vjQ3H#N76_+*D94|E1)T-2ELw>8oA<{0NelGCTf8(pcvtpI^@m3*9VW3`eihZ z_x*Z7_HSd4S{b-9=>LuR{HZ7)5;B!RKtpf=akSA5c<~NFc=laG!g>a^=u2p7lWx6m`*g zKgde8P-j3%>Ex}w4^UFVL~b)-wHifr;S2F8vI7~<|g3$Tj#3`!%3CrMW;wgOyj(lL5q?L8*JTsURN zJ(OET0b4GnOQ2B(WzluPw8i?jq76Gb$pyMPt@vTT?jrVp~UK4eI7H+?kGC}@;Mm?6ch17rV{(~*NTvfGaY+SoD2 zrDGWXsrsqez)k$V#HsC&JVQV;s3h^X0CO?=Iq+3I503f3|k|hk7w;K?hL|ya0ZK0erPUBu&qA*5(xs!tMmQLG;;G5S*iPP5kw2< z{(uA^$Py5L2>$=s>mQS^{#}8ktiuM7s@LjM*_To#auX<}4)`d07c}{+RX%TWvIIIO z;~pLC7!BQSq_aAQt#zWzL}89KQX+~2*z>|sQn_>}?m_krViT%vJl1Y@m+>LX`^szAv% zMcoB+I`Qp0xo9C9!2+#EWqbMqx$%dljnx8eoHVaE8iT-h8%5x1Pgh3?p0>N z{_OA#Ov&#&rA9vAeIMT;La1|x_xU3>lX^oo;HieoS!-?*ZvZKfo`a!4#}wZacCb~w z`;EJ{^QS!_>2zAI#V!qOdAIb?1a>@$1i>f~g8NKBoQsk(9y$frG_4lg2ihxq4}CBZ zB3!1xmY##M8mZc@C%gKEQ)XVWq?*slSkEsAr0=f{`s@+7AGb?#Zve3TPa6nq5~39Z z@QvpG0Y-l&9Vtmy14wkoe`zr3^x3$*Qt9w{7=gSDfcqS}rtw6yEVEEd_ReXU4E|$R zP7F@Qxt_7U-uWiDeycasqCbIJ4r!1)r%nYnJ{Z_jryG7V58xnT^(7X7xfOtOC(!Bc z1=XjWgw2b#<+zikf(3k5Q}hIEa_IDCsJSvnfP{Dt25U zyHHtr{3$}{38f|3K&43%Im=WuAfO%a-yQx!hW=$y_9GS}F8YE0N^$p7AnBTVaSuH0Zvyo+tq|pcB ztQ%VQm-85GSHxEu9e%vNBdOJC0@(wvZROn%SnbHNe>ZVIZz8N*^8>rlcN~n)l#u;(3F^Ii zH@B2^%(AISIvq!PvsH0d&dI-8MU4s;MlcE-<2tOBrz+HN$?{ceniL!2aZmfPX6ro> z`~{A{?rZZn?0$o@*PRHbvge%+5LV6iQ%r9l;P7;M>SX)f?sw=Pcz+v+Y+lkOey6hk z3xfWb&`SR$!(#uEVLE9%V&4{uD(7JZ@+trbiUJ@A(W>|ab!QW^y+MvPT!2N!gyArQ z-LU;TmpCF$>c5;Io0iq&qd5yiczGind00e^S|skT;kf0=bkJ06#zmxeJtkJe02zh= zlvYQ=!3LP{*A$a5KpLkAkYTL>7NPex5QWQ4L9s))zk4He(xR>)CHqi0@*_w*!3#8t zd<=^JN@QobeICcF7{7hQB$$gVE{!Nc@!_$~*&r)0a$aGwcz$>OohL{52gcA}k$lmQ z-km1wEN3H~$2xI@NT6Pyqr9^0M-!&*EY@qNK>z@{_^y~|`_{%f^^$MSl`%fV@x3cLT!u*o$xiMiQ7U_q4;5SnD$2T6}IdwC6pRo^EUgL02w9} zWtGgA(aXYC{%ZGD8*Qh&mEH%w1>i!nA_TZi!PS@Cd;S}G3EZC&^+ZXngq(`8jc8*_ z6kjb}x{r+B+z1EKCkofn8oXeB`#@m4_mm*}-N>)zbF#YCQq8}pjKOIz^By*S)I1{_ z{hS5lGL$$j;8d4!5?5iP7n{sJ5bHksE8E`tPcRp{W_Cviz@`r6eGI)NkGmEPs!ov` zRC=&zw!ph|e0tZ&LHk@buS?}Q&wuMhyVN&R|1M+vu7UlhT=vI|2261TNU^|2vDe@c zm;q`evg3xBIHUPHUrK_2ftoVPy*3-mNW5O>vM7X)Ov_|va(_KN<9&|z$=1Ww{R#ds zv#EbMLHB9p)`2|hlRHb~bx|eE01!d1Gltuo98O69Kx86y6eYbJM0EiGk@O1md4^>$ zhUW4=LDcdaL?$4jwbrmimhFb);=Z>`GOIPxlv#V-)X`|uz{`Qz0_dZxcD_-$k(G(H*}|AwUtV)4BN{MKBAvF!%$W3~y|Ft>iyC3}6HOcA}|X ze-YAD)puar0hly5fC%YOCS+3roap2WC_sPBSS*4npufg&_L)jGS5Ab??&KV-(i{IH zZY&yf3L1UQwD7YAy^yu1qy9boU`y+77s%=c^5>iRr%@QfHP%l7q$>26?d37nKKw&u zY;fm%+Zg)V8UQDHB765v=l?PGj^TOeOB-+4xUm}Bwr#7iZQD*`Crx9cv2ELS8XJw1 z^Q3F-eXjHF^`8BHiJp&{YyLC8`<|HzfCfg3KV%&1fe*X^kC42}d}WL0_KNdQ4;Tht z($&8tu>Tf2f05|_FlPnPQUm(a0+dCH|-5fw4pA6{ZE$U3swAla}*awOZn}WltMFpT}0+6&CmKF9z zIEIEQif=N+MWUMR4p8$*C-cx12CJB&$u7MB6n$W>v4aFiKrKbEBs{=J(G;<2=0x9W zzp+|2>7PH*egaTLUAyk}jag_E3C{G2BvvDWu1DIH@31Q{XrZl+OJryff9t0Jb5`=d z^iw3H*M$#%m1tjeJ?k?zKmw~e82$2!(McmFqPcI+Y7^l`Z@&6)yzhWi#FlU^!{x?j zcGE4FntBdroCV_YdwUmjW+Gvk=?R-fWw3E&{VDeJ0)U_+D9m`jym)b|;eSYA{UrAJ zC3X1PD978z56{LLpKIEvX#t@_0|*_s1#&)R06@HWRrg6)KKU9J@t8A+c=XcyVa)>N zy!#Zm!dERf<1T((e0|!bKo|HGR>2ZaU+q=SaBc2G#9(#*(}nG!#;tP!x-b}lx%I!h zFx=3FY&$%YKO)AzyD(FPBknMs8vZVLzeoL+m7 ziPRYb+AzwwKM49RzRWqegJ-Q@=%Wpb2ee_qzsGV!S^;5BSrD6|B<(ifHwJi|=vyWccg!;7C-~#P+PyCU9h9hO2!aG6oE7)2ipk z<0Up*KNCU?#=a@SHT#DFon!z0*8dVLFbODrJULjcM!gR=0FM{!MyPOS48?r8!~IzR z(%{0%DHA=MVqP*G)om>Xyv_5GG45tQ9@!OsYkPR8NM~5(bz2tv&6QCsYNwuA3rnIm z)ZTK@q?|IBoJkRgqjCz|rp5hMUX5>ua5Qxx{VdknC5 z)OQVOxe^zRB2Uh3+&behjc4}WSzpls8Jq-EN&Pr6z2B7y5+C{n5G8X1f-sLx&=e?Q z4;1Q?dc#Ef^SgL^ONEA#+pf{!|KP!07Ij@KmI`q9b zrF8j%Bv?#K6~#Q+b~8cV$t&R>{RbibVL%#eT4yj`o;NIM27q0OaHty9Ae#&km816; z4peUAWAO_Rzk@#%3`j_`5wwRbEiR(I9w`ZHYIp0pc`o!t4W#x}0m|xf{km!h00T0L zCB_^M12CXW#)La200Rm@;sR_|WL+?U$J|$46#YQZnzT)=H+2jj2>Kp?pi#45f@J?f z&_^@?1U)DR=CSd9mlpj^U+i4wJ{~0r|5D8E_CS#hRvE-|;i|CfzSoNLi)`VI8RN+Q zw4HO3$gERcI9kN~o<&pIXVSc1c&YK{(&HWA%JqlTs$(mfsS)daNuf4&-y2_w*Q40_ z-k$xi*DG=s@=`BS;0IF^Io#uyll7;q%`EK7si^q@90}=YP{5L3G2`D&wMP zRnG<~aiyVgjJj56ee#C*u%q6Dy;#MMky~a7sYba zUtP7VEnZ&FNn84cI7>Mx>kL>rOwn{%E;d!ZUM7F1ux>m}`=h-B;%33^L`xURKwsg5 z9Rk$TmHzT%;mXBWNh@27v(sb%dd4J?5P&A6P<`O1Fn$Kf_bkl*(B3nm>X-RL9yx9i z{XCB!!eP$Od1wa38-97^)#XqDkKCKt0^pB0^}VfrXKX4T@}F`i4H=-l|2QY1pcL4$ zw!0lg-rzM#CB8N4K-r@VYItU-hvSmLEcI(I&GAOHcj0+TqMFdN?SYGxt)Kj zr}3Kwuq@GlGEr^72dP+UO_^uY-1R`aT8?aJdLBDG1J#?$dW^xG@|wCjFPb$8txk*p zw<2JYE}l?IOoTT?@uO8Qo)2_j!NnmmlYd#fY?*SqvM1~-`c+*(z}vuw=G`jwmui8$_leIoq+#$5m@i`(2#DH&CNdo=S&_a z$d7FEe~FsEiL@Ftvn05JQQ%fhZY+P0+R7lZjXc28e0(bksOV3LEsH62(7Q!;EsnIxZSzakHtTpqNgXG%k*}Dts(JCKO!wt{!ZZ6-flU4&}rqm2!C}9 zz}BYAUJ{vJycxhwXd#wE(mXZ;JW^Z$#6$V;qQLkif0-OlkfQsywA$REPBXM=5#%xI z`*J5Wvrb1AT3Kc)W#KOY?pD6wBgPea^&o%zqj7K;1&VT40 z?mjzS%%oPMf-(>a=ncGDt|a zCsuJ~3&;D+*Zsfkl}t{cB8WyBohu>|y!o;f?m-jwZisHkWg#efwHiQ~u7l%{4{yKw zv-N5p-Yu`htZ8@F)8RpAE8|u0St!$y3ZP}n*6A%ZYG{`$KtCZHx?67Co45(8wq%0& zCXtNixexauWeP?+;_f?U29p>crIQ*9sJ}Fx$?VvJe`NtGc8!Q)k$CCKwAMDCFDu|E zQRY${HP#-6;|0PAib>~Lr+%k2$CNwz3CS>ipf9+ukUC~+9465d4szg>S=$*nee@&l z$LoIQGqkPQbAKQzuT`S{swN7y+2GN51KRFt!KbM(25I>9o~JJEsF|=&ho5!Kdg8;D z6xOqg1JE%0)0NP&p*4il?bG@@MCw7z)Ckm*6{Xo2cfybx%o#daWF;jH1P#n~@~aYO z*}rs5Ob*F-a!odTk;5W#CX1w2HZ?N+)ZaMot1ebPm7;ora9Z`LHDgi6`g{!p+%w?R zprDIYQ|a24l>}G%vFv5HbfG2-EZ|bVK*y|FXI`ZQIJg+q@0$d@vU=^BDsLaH*|On1 zj@!?#`?-iXV+q^}u%^=}a^@f>g<<;yKZ+zUQ1fALkaoFy`|Gx*+4S91*;?g&ifchJ zE{NzO%q8y?qzxs_`*_~Wq#4mnKl{4WTLr--*B;{Gn)X0m(0)$c+Fanoy@TVI4*c~b z8vQy7#7_S3xeM;P0|?=Q+{NS!d*F9q$h>o1xkMgH(*XNMHla`bXuJ<=O z*$Dm2?Y*uw^~6gzI}PT2>h7b=R>a-<^Ks1*4I?~K|Kue5QE9Efn7iXO=4!t~6(zcn z7GRei!3p zco^`kocrhx>a5TMrD+~G_)GXN?(+NG9Gyo%>p|gQ}=W+bF31o+3`Z$tx!msll<#ll|%C2TUn!}%f z@AdOf$+u?ywfg8gYMnEot#FLSQZ|j{ri7C?^!nV4cjo#aLH%v6PmO`a=A-D*sAB@ZU(Sh(#NOebZvS z@dZlc$&~68ps-o!9ARm9z10-peDte{9nGzuqUm1L~d+ zp`GCWU+7}|`^1axN8R&BX&3%WX&)umm!L$`6D%#2ILSmvlcv|3_hnoa$hO$@UMw`S z{7%|HMz#3+qe)NLJOzh$QN}7X@{cDM1x~8hU}&b8T6{KV=l8D`u7FgHM?2()YoP!b zHQ-EH=21%;oun84HaVl1Sz0so{cUmvNEG!S5`{+PHYICRp^h7_*^{;MVrfzXVX{pk?=4altYB|)IrJ@t+$R;4 z0`nzbwzLp)+b^N&Ea$*}J?S7wX{w_G=(1HGh z7x}rs6JT>Db5>lH3Tq{im(*`8LI}?#|E9*H1t2^H@9jj!yDr0mvzbAnX%{RtqpN`^ z)0qH~v{XJhpWGn)m_>CJ+S|J+0_KD7qaT;*cII!vFskCQ@gKOi+~q$)e#R+Glzls z-xEyRDoHvQt$8=*_End&4hnoK^|ze4at`)^?OvzHL$SAKv)u7YhTkz*irj%WXTo92 zJE}4p;M2DN2o&C*ry^pqGWE_F)wLL@6|@_?D%S%iN8Xyh0Y*3dS+TO5eU9j&5h|o! ze%i}mmq^iwV+DJ-;dgYBUvtaVx`JjSSxp8-1x!NUB>~!WPuKE2qbnE6zVYi*CsB=e zFe<=wMP#N&l>epf_8*gT=E=3JT)Mx4(A>fx=GS)|Ou*>oSMp#XT>qs`SyFc)qi0h(VoCibfBBI>|2++!M~U-Uv{#x z|9NewYo$&3hhPC1GWxHv^Y?hgfAF1fn%4LLK7-2wl(h6n3QKcqx^;MGS7U6!cTdyB z`juD&L1%UIeE0nfSJD1)31}yy50^&z0Fx;bmWxg{;0*1oY`TSk`wF{q@Ph7cPK4-4et4)c>PTCmv3X z{P6fN855qE;;%D;lenyiA6xw#$7LLgsfYqvQygpr%;s#F3q>07sGlXVI#KaILS;xp zpMif%nAKdGB>tQQ`NyS!gVY=SuSUIb>+rtWMh%(~nD@v{X=kwPMBRaB9Btakg(bRX zTMzr!ve%cWPqhj@ty+6GtH0L@IkcfWL>Y zRn>XmBu0sV*P51R-29}mtdAg)Zm16iMrEUqTk~?T5cepLhXH&!q_mxlEZyfmN|S?B zD!of8n!kT^e*mx8imwv6iJ$$nq7!BT97)ZMAR!wQ#5A-Npl4ZZ>R%+I&xq-kG=Ius z%^A}DpnMD? zXuu6{HX{R^%^x#eMc*za>ZOD-Ke01qbtz}ftvXDJ7C(*e>B4DD>QjXLyK0lk%* zhMs!~dmas)sM^C_gNDeOUptf|5s&PYXg7p%*H=aj>90ZMGwtR}MO~Vp-%7HpzrEt? zu{F_h`OKX!3>v&+jHqgAILMqGLno4CTFY`s4L!!-k*sCkE`_=J-0E|9Q=3w==acdL$& z?#if~g{&=P^dtKk2)JgG#4V#S^5yP);h#M{wZl_L5C6xw`CH2xkN!&sZ43Mb9w4$q zoKHd_Av%keZ-ao;TUr|Xqp3XDH{eVeC(6yWLOV^Lnf^NM zxbf^YGyRAg@nm8Wiofy=>8cq1IurQ6c{0`5eNGI}n$kzUaXm3tiZtTV{F86G{?0cM zwX=>(G1Rhn7=Q9j#z(&S7|H>d3R7Ya8%a`@1zoAZ%kb&30A#S$T_fLIaV(EHOFGw! zmm<&oYobD?k;L!cLOvNZqghod9`rQNC~lVc48K@vWKJP~Tf1fEZ}ME&c+s8@fH+#T z{na#dsJ(H0(+y^n_quzcIaic5rf`Ej*kOFU753aS^Dh`<|74qT+{CggHG#k#zL27* zfs@5WfRkCPMPq6stNKeQV+TF*1@#a&ya!(2MV;umv59celwXd;g(0-9FKQ$p-2liS zv6$Wg9>-v1@#$tIvRgJd`{)~0K8AekKDbPPCwV&H2Fo8ZXlS=FtmZB01Q%x=Fv0^i z{mrR0;{{Y?0o}Cjr6E{=a z(`9|mVWv}?$=OI19W`hitD*aPGS%))(HtyXAGnR9w7S&S0ix}J(34Hy)}EAHLO6k{ zj$bKm#>#@HwCFII{+Kr~4Ma3Am3rEN;B79y2rn){AFL01s(+X+}wwaG#D zMnmP)>vUNOq@2DpgRfnPhy%97Qvlwv8&j`-<#^K&(^q{p06ACWbX?L)Q@1?C^!N^?M>-erVBmc9@ho zh-)I~Qhjpf$8R8|*DS_lWooF}ft^*d9TIdX5iKG+_F~ZK-H1!^@rbvNa&;s!-lJx; zY~SbrKBhW~T`^L8cE|O(v(ZiWjOS@0FDqC-XfdXk0X`80)2A*pmIBQy@nK!9v+qnA z2NW18g>%C=(eo7ngS^#DTFd(NpPZ#%G$SlDw{iMLzY@^6U$pF*4L*!iC90Poa9o$? zcG$j|H1l3Gc#E?^0;A=vUq3Sf#g%F1Om{o{jOuQW4_7pw_V?3z{(_VcGcM6&DozbA zI@EJ7UYyYm6LAO|A>YE6e;nISfWmJ*1dYuUWK4C%%u(ej1rY`%u9y~)GXseH+8TK){#LnlQGqW(BPBrtOzK`J7^$RP9F zmz$Oa;@4wY&i<@h|8l0+9DhczzDnuK-{`dI-6wDGHj@lIW=Wepe`vPP0_zzV8+GS8 zm+G;cA)8zpQin6E9sC^4i0TNZO2|2-VCykkIw}BUN|4%lA9dM~2>099bv;G1K5}gd zH?P`sLRrLR{KnwvCha9?eo5H$XPr|Suw}0Ew7^NW{G`h_^p30m1I?W3C{rC^8`br!-W@DNePSy-@JPmdvRu@9?y%f^Xh^b3 zCo`kYwXo9NbW&QIyRGiLpnM+AXe_CXwg<@ckt{HU`&+?;73XaYOszM^9O}9*`e#@&92o*{tF%@8^HL`ccs;p~rN@T<+ft{$Ucdjj^fn+r z<7dFq222Q6VXXu?pEL? zO=r?a)8vx{;z`KGnSg_(vBZz5(ZNjxub%`x&^YQd;rI%@mw4(cx11EM=eNSYMs|H+ zfPymMKuJZbA~%|c{Dw5PyxC=|SedptwmDp}cKw1Ai#qHOPq38V3^_#{=q}_i~cX6Z?|kN`2CEE#;8nFm!-~KUilWm$CL@hUoh_t-ypo<;Mf7 zhGmXg?n2t~Y+(o5v1DV!29==n_N?N%S_q8w!=3mZ*qW7zS!I6y?zEyb(udEeV6HB@dShPb?_SF^^6Yk)U;ihF`XTjH9OP zICUL?Hf;?f9wn9;V#*_tT0Y+1B^?y0llGqvv=N~?%H|3tz=3|)UBs%krTsk;ui`J& zMvCXx5WaX~6iloBTSYhOtC%GJt8t=}=6qzr4PH39V$B?gw@fiKRtNNZa9w&xGM${L zWqN|5#$4;C|_P2&>ohnFGAA)4m#~+jD3e(_7)$5444dkG_8^iIbcn{yvCfj{_GIH z#=w#1PR5C-CZd;aPh=SM>B3BD3L~hU+wKK<@-kT+W0-_I!HnG`>N4dbZMFdeWia{Z9Q`XT3e1!OSXn<~9!cYSWV7SWYywKJlWK zo(NCi#!e)Ay6Fv7S?6^`rH{|=xFy!A%T_Etcb(Szt!^^87;?GY|7_rEi4-;;_*h+Z zR*`wlFjHSXogITTR1R3zhf%oT%UPN^lTOE^LuF5u+b@0_6X&QrO6Qyb zn&t4aN|*8;!O_P+q}KLvUJ##;RMLKlC7Z&Z*kCp7;Cso1HA$b^HXXz|p2t_Ff_aL2 z-kM9q*jsQ2U5gv`_c9Y`?CPnce|nG-E%EY1-k`$pX5vD@@P?B?i^d0ny7y054VWI`#v0K(mN2^Cj~n>zoD6X_y5WBxmtNQ>g;3^3iSsAIDcG8XDDhRHHl44A z8+Ysamwg|BJ&$t~yRV!2toeTx5U0}o-W!DyDDDz#XvmzToR4sOIbhKDF z5rj&r4h1`xr`uL_ZHvunJJ-5KS!~pl2|F1# zy2G0mXG2Zt2J`5AyX>M=2%Gz-_FP)cU1!f$SM-e;%hiJO7@W~igL`S7jy((h!)7SB z+O~GxPyEih6?jeOb~x&XgB(53?Y#b)8~3)HZPFt`qA)reO6MDGl-zB-TA+*Hl<#@? zE*`YN&*F8Eb9yCvQA#ZeeuLJAGg>zN?)|LHd$7~izAV?lYaP1N>YYQW6C`^WVl|XK z=?Rg>eUaFZ^;DDNwE}ol=Fs2bMO3nVW|sM)rDY0G6f?5Paz^4FJH4=$r<;hIMo&5}tf zF;^eyxgVpild)#_@d`AL_p4f5ACig;Nk4&jvw>aYwAfBuXJz3#x-)@QPFqZP=T#$7 zn-r)VI(PR}D<`liVlGUZFjes{kQbskH&=Q2itjtk=V7c`#Ra#iJ(oHPC-E$~sr+=p zWwT#Ri8On&zMNCjC+TgEqgdL2hofs$FlP0VOE=kR4Nlu6(O_{m3p7}rN_j6=%TYhL z9kVh)j|ZQO9a4DD`gdx{LG6c>nWYuUb!VUIeKvky9Sbu)z=|FbG(&&kq>!93K%<7) zw2Co=d@Nebo>~2M>~T#Vd)?kz=pJ-5 z^&R1pq%MQ(h>2bfN2w;ffn3mp)VF%q9P7Bc&!_DM(G~YQ9ORSNqbt7>*WRHFM|Gfn z!{cYd=fC|t5ZR;>DKCexQPS(nC7}aZ%%T$%x~lVYfr~4D*jf*_9tVN6>M${jr7y*_ z!oOin)~bQj`n5~>{kqtT=SOD0%{dxK^~q5ke5+*e)|Ijj$nq?9bLfNtbgv=#o4EY% z${?!)#BXVHeS)`9V7%MNNYu(YB=$+5y!m!#kOzmR&o|$iEWsKu&Yj5L)@Y$Q#~6T~ zt7RfV?de=ACN6v0W0uC$X_Mf;+P{tef(GYwq~ElwD=D{>G_zO**5AZJm!4A2T}h08&raEA%pj>n#|srdNw9t^;H7G=5aI_Cjd8?g!k^@ zf`jy*t7Vm3!gB{el>-hB1cdT;En}wdU~Hu1Z7E|SKS1NVhBE2b?@EbZil!F z{6#WK;3d#?$QmMLXq0Eu#JFxU>0>UX*P9pDppYF>#dRGlo9mBWZ!eFAZg%SOu4ef73m^+WPbqT&tz-k3_dc(CP9dQ$4bwCmfG% zNI(x|z?u1?8j9SS@&z%f%# zxm_}&RG42|WCz^1<%D;yObrBTir4l_{~7Cv*;%teX=|lKnvs_E@Wi>QuP|gUztRfH zHp4u{9Cos(nZx%Jl{C$UCGlR14%+;v>9565h$TDYEuL+=78#)P8i$>T_5%hbItbrJ zJRxPup#o${(#^VayNRRhYPoI$1P^*-S*K7Wv2Ie!5WF`Ab>)1TWfmw<;;~AC7^FyO z=KG!1EQYw{zNV^i#p0jBD$^p;lrOj=H<6ww6ZMyD7kQz&h*3i_PAY??gef^F2oN5d zdG<);%Ggmf471ZkL{(dgPnDmZ=*hwUpt!8lGAC>!-$ z>k(cM>`&wQnGH|GF+t;t@>S}JGFGR@`j_;@lvIAL#&uKXDh}yguAh2TEmPRToQgl- zUkOaeN!10td)8#HKlJN2PI-eBy4Lss56#;q$lT|FY&5#vg4GlCN1U^J0kiM9fu$X} zpvOs|-0AX@+WCu37Ug=~Utt$i7^)UIU|ClE73$DPstbKwQbf7gmxr%PaxZID>_t;O zxw57W6tE}lI7{7Lj*9nTHgOmt%)H(mX6>%%XNS(Wt?g~b5ANzzxKI@!Z%b0!V>nUO zT1hyqE+RO$fBR^_!fQu0usc~}n|rV|$UZVx+*_80 z8>F4JUQOAq)npDBA~1-yNHYK_rl5wgu+0<-e;rJ7$pjK2G1$*-h7fJD*tzbnOn*R{CL5w@PN#5@89@u}MpmVi#uyiyt zHg*DRkp1}fm;9KZ9s>}sgEy(}_|$yJBA}oIf)pqUa7y4+7EO0C3=jwBSXY%_FWM&r zMFlNpw?}@pT+gduN#S~g6=7V;f}oS4uiJ@vIAn`>{&`owFOeI_fJjomk_Clm*d(S^ z(!7Nt=UfUyA%yme4%o)-MB&@(gamY9l7i+5@UkuAW=hsmiQICOlkPjdG{$3ERuGn6 z3?W?vimVOwOz!|)P(NF$WlAQFNanWgtZ}-qePZ-bs&F2;MmttJl4{rS zwC`>|H#)t(D(Z~ak8P6gv0rwkL_rWVhZ+ZqH4Qj1$*eC>zAa+ zk!u|`i7Q;ci1r}6dM@Lc8acvx?00P4)lJ+)_^o{wDgcY3-o|eq+hM9ITwfAIIW}hu z&H2i1AZT5JgCQt?Bhgnj8YSzhuF7*GO??b!IDcAe9H)NuA0wpn_u3`n zIFEz?p^C<;FZv95n%IGdvAtpJ-h~uN#gnvTf-f7@&k%{w`7FE6Mb3QnhFJ=ETj6ZYfRgMAr`;yY}#GQt_`dqkO+pR3+YDod zz0gxDf7Ker%|tyhga)4-PiJ#J{#G*ovPaFj|!v^fF@yCC|A(nSMSA)=^zA~-{`!LSI6c4s5?Sjv&$ON0+J z5Q++QPr{rj7&0Y7YiMB_p>FfIE8d2Omcu^Jk?K#D1IIOtYo-{{LNNAY2 znKn1S8V)Rw3paCtyHVlb;rK*KI#cToqNNWXO@G6D0E$2VCM^I`3Zh34)g{@}8Qj!H zMP0K-hh7aGvY3-MG-5Oko^iEBG0IV8IxtM-P@*-6%>sd7(PSOYq{MwNosfsyola2y z&HU?BKP-~hEHO8sNnuRg78VD{c{#_e)Ll=lxMJsFT4b%jp`f*(y~b7<_1(PYhN7Lh zIVHbnK#KF~l6IKpciIU}M6D%8udbvlMb#;hDzgTVoP}LcEeO1R-nlF|f*P40V zx9t`rOW+wla0-Zd1W>>@_OgT1+_hUsf-}}oHs<%QcT%j{hI`&6?4D?OGyRIXD_=!l z|Iyb>(oa9q0N{LF|Ly$LpZs{LCKUrX(b<81=!+1fg(}ftq#1J7MaKeTH6wDGADRo1 zmTR4xNFF;^5taSkE_AHle_|cU9hb%!^^II!`i5h@D3&OikrY!YP!~v*bo5!f;^UMv z$wmUoa0)jWW~5cKcwB&7wWBdDq~u;ELK0)+t~(E#2y?AekbZb2uteNL?GVn`EH*_; zPGo6bcTG78ysZl+x<+TUHv-G005^y%1)A1%xd#+K?WPR{Y0T{nsA{ZdX*rm@f!dUj zm2W!jK}1t$D(5=>DW^b{8mEFQz2heVHfX?T$L@x1LsAY(Vv{8-+6tPe-VdyRXl%n{>{2>Hp6ME*!UCoir zdzpOHvsyTtSD_9qpJBB=r{Q;707Eb(%mz@TF(E1S#HTV=0ZvaXCm`-(=2 z-8DvN1KPwRKg{z5R32^4D1A$U@&k}T@EF19;R@a?0%Yn|D5_!Q?i;B_Bm7txQbTCn zIjZxC4OXRz**^pk16vjKjNo`M&B@Z4E5Q~7DuZX6O)%avqi^8FH1Qm-@ih?KwT``dTw)Vaq{T#f`*R@~wB|LT> z-5cibxCT zpwfCMMC0b*0tTm!JOQS00v@E!jHEX;eQYj|n`KyKO&EJA`g4M6pIhzz>8}%1Rt{nb zs`Y>qR22{=VL7lT=!8h%^LTOhmEDL_^>K1rO%2`^}$YRkVY8Z zl1Ygg{FD@n{!;vR2$$I-JdZ>>XcM@Y&NI9-f=;% z3CyQ2z)#1!o&>2C$#l(PyxSt4PIUG+{B%zL##FArBW5RqN%&XUL(d3$ z_F$<@AS~x7+X+mAPSp+;)TsU`#3nTDSxMI{}iR0|pZ@1ePfZ)yG{ znnW@PhkCF{Ah=+p>Hs*g=^#D+|Aaf!_vZu zsI^1!tdGcaNvMWqzRjYNbi+0aI?JeRSjb@#U_J&Gp8{Yttp+!&)WkvrzDQ54BWSA$V02>V5mmhY^D1_)X0;#b`WD_u37W z#ul|^%(HRLn`?VL(Z}t5!_ZQWFl^$D@K3_e4N51dl74{()EBqUI`DF4>ng|>lev&4 z)O5wVT?ukmkx#Yhq&|p2-0(Yua6N}~Oh1Hok@iXj3O2^su8F7PgnyKtDp#UC{Zt+o zr$JMpVEY2{Bycz+IcIYtmo96LWSWClP}?=Bg!`bMX2>@QI#Q@FJH-4pij~ocxx8-s zcBaa%@IwxF?^3@Pj%nkt8`zV2cg&2TL(?gn)c|%?$Q7AR(m>LFFUM0)Tih@cp|)5X zIf>p+1W`QRqc{kWdXJ%ZE{Z%Q8!K5f5g~kAPyI`ze43T$o~uW8k74vMe=rCgA*)yV zYV7)*%MTfj%modX@+n4@^5k;dhmFMdJ$#njR-H;OgkI=A7xnq1jz%(+KB&6c0+4Ad z5{XXrc(>TS%Ig^C`C*?OD8bM?kNIzaV^a~I6A@TIlnr*^v_&c5GX`6*Y?SYDQh$n0 z2-9dR73I88tE3XEW83Wv>Z3d|>G(Oz)U3q>BCHHY8l`(DKwn&&s3yd?yA=07e;Hzj zy01^Qi|^Avy`>8ym#f0jpSKaRicQ!5eVGbHlU~p67f^}g%zbPrU;UYQana#a=TmTC zh;NP^XnS`94rN#^GFNNEZ-Zxn-Xo7KA}8BPe;%aZ;u9$a9j?Hc%7(NE=B0@ii%QqJ z2Zq*Gme!Cfv~b?FCVPXm%8jz?7P0atu)b^eg6^fI-A*>UDlPaqPs`0tgIYC&scu4G zdrNEn6@kPqb4FH}d>lQrGj%Km9p`o*DwV*o-o6u~k~0cqHa&eDHa4M1-rLfOeGwJV zmX>Do^&Bh(xwci~f?xbzw#w_dnm6BdGXb%`j4KC`r`s4vPQ5 z>xeT4S;;CfPX%fca}t+!9`u7eNJAxim@QSMpJ_6LUp?v-Gm`&Yo}x020s>r~GC{36 zGzAP3`P|v~-y#iY#5d-O!Lge~jL0C-#OIb#ne$CP*o)I(mt?_yACc)$S-&e#TpSv^ z=pTOzXJ;0I;N)wbKc!WmSov!1L^0ixa>E2#xrN?EX9w!z&+rwF?PmjByLs@ndc3uECUX z|IOUhp9du7wd-@%B+FF@>j&di)}8oz*ya3_kPf+2d)i)5@Pqlf2(GHIJ0Xvur1-Qm-N%6dxF( zg*J(|2ySG*XNl;ik|Py^WoU?T=wL6Bad1Ag23hI5s-4~sV)hn~V})Tgb~ zN1hcU_eV)jZvbqpbu)tO}3>me4jNqcq!c_A%pV^jkJ^>w#xwzZj zjuj9s+D;z(D$t_NjNQA-tJ9`)%LV7Ut9K^qR<1kljX~P8SDLZUnA&j> z@EleFyLcXZgeh>ITry+O?eqeK9J?!2_j+Ou#oPlP;i9OB4&YvuFk&cmD^v}`f!(S* zicwa!Ws%pea;ZMF(A%?ORH#R9js_I8tcLYTI~raqG_;mao-YSl)u?RM zk((ocN`s3d_;cTxxV&%$V0Bm=Z1b7eURrDn&56mJJFH_t?ScU#H0ErbF;Vglt)$7v zchE^oIxSZ~b^H2xZNux$>C9t2*ieDpRtvmg<09Gqw59w@z9wu7R(Y*u=iw>B>K!LH zcI$fa-iUS5wGbY1&`47xLSv&JKVVQ3B1u9u{Jt`=$IT} zhuWzR*-fVfN6Lwx?A<0EDpgS*)N>Vy^ZV%gg}V|HIgBJSyF=>Lg~(;(<6l7($a?pv z?0j32Y!mpsexAP^1yqtIQ6bzNOWbYm2r#eU=_YPid4r3mnUZ|EiX3j4IFCY~DT~6% zGMz$WF<(c6WK5rWEc1r-?DRd=X`ijWCY3W^?kU{U zZ@@+rrx?XIF3)zCQJcQ(G~YDR0qLaZoE^KD#rm}tIIXiZ?}f@Jkft$*4IN)ZZ#`QD zErPfu@lE3^ir{^Tlb$fx)&(e(L4 zX)c*`wW5L;$zgB`(o{rIaB7TS^ac4)Tx-m+dGs?iIXN*ma;NYIiEip1l&_j!I^U#h z|JmrEx~(wE@X=m>{$Ii4U*7dZDFApx7`#Y&!XezWN8*C#H&U%iJeTBA_Rfql46C=7 zwyv$xylZtuqQ|!)rFIJl+z)pmJ8q#tQVtp!PQs%3{tu02E;B8y{eXZhZMN7_!~77Ekk>bRd}J#e4m z!c4o1JPJ9lj|SUHl`)+2#ct4*p6wRlWe%_O{TpR`{F+&r>Ss_6?maK2 zyUn0)2~%O{%bzbJ2`{85WaX$GLZ)4NYLI_gr(oI|t7msc^fQwkMZ)H$`+OmG;>D3R zm0)zsHovBqF`1>7dCzH;pwREJR`EwH0~sFzq(^x-wj;1xsql>UOHj?DbyK2II>4@Q z(W$E+3&&ihXSXvb;N^NL8hnjpS@>~~25Jg08E+%Q7ayu0r~4DG8roSEi+ed1pu$pIQo(8hj2rPP`8su#8jULoN}Rsd{IC z!DjLTM@r&7jvTBtPrl={Zus+Ikel!cwo(p#Ze5XL7@p$ELwra(m(WY9#-QQ9|Z-Z1qo@8Zt0d*x{>bg7&@dIq#LBWyQMp%VF>9MVCatDpy$^2c<(*u&%1uE z2ow=M1&F6)t9X1N4D6lhxB>9krH(+pil%t~HzmiGK#Qk1e*-V7-B z)bYF~tLFTvVxRP(a9zh}lhw{^Q3|4kti48tJ=>_?Rv-kOdwsrXU2?xTQ)N=Kp<8$d zU7KjxN>mdlMRJ|Hyprr^I_SX1LTgR6x-UvQTTOG99#foV=Q?lTX`V?!F zp|K`_B-+v@aJHPt9MZK-JFN_RhncPTRNKyLu&Lvfzwill$ny_ zPo8E&*?}#Vj-$$Fy}vPJ+ekRpzi-m`aM(9tj5e*$PN&vS1h0`QTc}YV8^ZjFae%on z47-R8o{Nun(y;1HgK6AqXi7Xe-FTqYRYu$R7btrYPGgj=`gf|(tyU6w#tKB5n_j2% zkx!1XlEU4b_%YMos6n>{cuiJ&aYjaSN^#T-)UPPA1No8rMHPEZr?{ROypn7UJ_n83 zxp^h2eNal>)+mZfc|9PLQ~yBeE}7%>p3=&*fZLOh?8R)6mAGE~Dd}9Eg#)^if@Y|C zI55zq0VO2#IH0%^Fb=)M;&l&a&1YQg7V>k{#s9ZiOsn07*<(n3N8;btcYZ(V0St$j zS${C~8N|#+`@ne-b_Dz7XqeC!;+KUn5n~!4>;X`p5o;{Ndi}obrhLssRguR(B0#vM$EBSW0RII5_7gf(M)65Zku==9H<9Ft6#YRAQ|?%h*7JbaRadwi z9)4!@p-j){kO4@2=jQvHi6(cJ?_x@Uvw;G$@z2F@`|~1zawfHu;l|&4tg)1G8-84M*y7AYH#sPON4E)o1XKOTwQs?xbLN{ zbRHK?!ZN$qR!yBEki;}EP z;xx;eDp%ouON{t{i2fC%VT*-7YAsiGXmV0j;YH+fI6|h`o0wNl@c01U%nP<|$NI1~AFSrpe>zju>6aB>qCcH!vFIY}^j zE1Ob3!G75Mj7lJ)m9JB62T?9;$HR+Gr9h*2o4x0<)C->~%w%VdM)$T$`Zd`a0Bp8q zy*y{KMZHxM6KbdE0q(mv&+&-%rr3jHQ?s$E%bRi5=0yX508- ze2~It#UO@q1llB;m5&%-%CA`R*$6~>S!JlT@^wqNT~-^_xDmy zB&5{y8dB=HNEKceH{HeWGu#{=a{`jTi>b(7KSTOxx~ygqHk?ySdeHED z9!ovz_-^=hppUj`7$Z(|&LPhAfLk79M;m0=&-gTp5eB_sKF!cs{O_^?)2t&c>%M(Y zBwe91-jTrrZWBG{xz$r(bEGCQ`9veHk`YWdxc^w`$yj3jz0z~B;dk^#A4X}L8j(s) zZ%NRHu;W<=al&xu6>iu-e+chq_1D;h;VaXTW{&v@u;s#sYU=NWzwNS(H}n{b;k~u+ z$_E6hrDm{*IMu9|-`R^?YztTmM=r@I42KU4es1};Q<6>n{-b^j&!R}iOj;3-=p8;H zY^gDYM!#`m=9HGiyqytQ^=;zMF|7aJ+R4JijIWoF)xU!fmIU$fl;iBZOw3oo|uO=&>@-O+0T=Tc&V{Zs52EzPixEUkG~iBrl1)y?W_0mq zfcxRi{|;QcR2Ly+uOVxNN^BY{33^>+Pv4_omdpFwxQTczgKztkyK9irOwv>|`S@P6P@d3Ioif{WPFx~+syaL>Wer^3=g>eyDMFDeY(wG*Ff7fA!pQN*_h z%)#cwxxC`ynzGAWH&QK{a<8OwKELS7ep2A z{JDb0Tlx(ROgg)s^lm;2r3VwV#WY*9G%|HqJUyk}yZAWOTi26cCY!4RpFI0hxc%6k ze}&tk0JLBCNF zoUg+{8D@+d;hSBW6Ozz~i)+p-wL4FBVacPy7bkiZ_<_d|QBDd~8YF@tEHk(`(`K)g zuqU_@w^!Bs8S}Y<#UpM;bn^ee&C6B~Uo-_SRaYqwf?Lv^>)kJL`&jet_)iJ-$5D*m zaT|T)Tfk4gNjS2Y4vn{9MYkkf|MotQw&E7laducg>G(8Db|<$4*nDent8zPGc$Uuk z?Lg4-bnQJ;hTf3Vf~U#K-ZF^omqN`?Is2^{@(wBFAm@Lya6cwW{s7K5qWwh&1BwvX z`vK+La@++aGPfmgtY{mic&8Sz_Cue@w>Gx#!u*HKdq_8id8YU$Zw}DsT=Ftvp26Do zI8GzJ9?9!8h4)5lL?Q>j?~KMua%sp9XVw`I<(~gaERSo3CI5meXEv0XM4X_{An(Ga zC#IJ@|I=nLQ~^NNT;W##-CZ}jMIKSD2Hff?0>>2}@S=sK`eKtcTAYtqp<_@8JJ9A! zHvhnd|FYb`Elqx-oYuxJ<}Vlji3RlWPc8n(JjDO8#aG5%smK6wS_h`+f4TTPnUT3a zwfG-H{eEBk@Z*#B1$%=ZpFCCI`w2~P}4f(xj3nr%e07>Ae=r<4(eH$evcIRa}XFvVkd|@)~hva-DEDUb_EbuG9iX5XR^L zZSImpK)5+P<`WiY@ayapHts=@TqFKiziTSxRtT~Gc%Wv?XnOlkE&j)Bx?e3m_BPnMhF@O!bpx*=iT>luXF3G0H0 zB0Sh|V;tO6Qbc;){DF;3_K847JR3eIj38YVL4vGh>h9b;I2BH5R*n*Qv>s-EDQ9N3 zz4s+m=2;!&Py_V2>@2T43i|mc>C>Ygsx*K|kXHQ#^2#Go-(V*^$|sEW=q&F!teoOX zBu2fd;Lj9G-F|tDZjWQ6U>fqw+aT`ze}4A=aIc!9hJ&9nB7B0_JQ>@%RBT~|Jtr04 zhG5=zwb55PM)Tv72JWu#mF3>`bsTEA7>amNl%Qwk~6c`Y!p?c zc}a)X^B8Ff*{Rn8iuC*`R=gJX>HA5!Y^N(jfHyc=#WJXTFk=?TLYo_*eG$$&UC%aLCaQ!TEW0)Zkxk1;pDgE4v`?h(c^7bk6E9mG# z&KT1FjC20+m4Bwjqbq>m|2sJNLi&qH!R1BUP`-4)U^Ufw&eQ!8wrA~ned*v)<>?3$ zbS6JzJhP93PoXPpN;Wh*&umrq-*x#etZpYTb5jav&|+>Ribz~hAWe%#QsS~8P+qmj zeM4Z@i5WrLlHBU>rHsf>#vev>l}pZ?Ej;Z1v>QU1q$FrO&k{H|v9@9(y^ar090vpY%D>(fpM|k8{RJrg5x)HN zivAA83*yQVAHhSa>)$d4YggmqYLVPsL6ZE3SjSs8C$TrZ?14c7)!{5O22Z?a>w9eT zR$MsfY6*1(EUm32UZOvp>Gb4Bk*EsRFkM8l-{s3JNzvgkv?+2#VZID7Er&lVqa^GFbzEuQ2gj0>aM*WO!Wtz zRnL0|!ZozFGnzQb`?|NND`386*vOhyBM{EDo*c_tcN7zzmk!Kv*5eqUm6^QzAc0gn_Cjy&b7 z%7H+!D>i%zLjI*dY#ZsH{sk!h5oG);6sg4j`>dEzdS;3Rv7gHj3;XJ)t+4-TCVqVQ z{q`n#U^t`z>{d4E`K}plnISBTomva{zQx25=s4XDSNH_;&@$8Xp=I_%RRM8HVJo5A zP+}qz)L?SU_E(Y#f9k{z?M=b2`dO^%mhzYTts-`?p*gmKT%;;5kcYk|PXXD)#R)i{ ztJg78E~o(Mxks6~$np~l(mq_|DXPkVc+aMpS`6*=970vTIcI>;q-E$htmFdmay1dw&Xs+OIKvAOgzL#*quJj%$N1$F8wjs@Lkqv; z6(lUM?p&F%ngj=gc%uSTs`9d9p8a*Q*vo^y}mqt8OParQrKny2N*%WzK6QRs3GLgS;n z#pM&U0yH!G?LH?$G@c~1cp)gtppmQReoThd5+t=5V}pVM6Omci0o&{0ziEJ*<-NYb zU1(+`1<)DMhsSb%qUFM6c)@lggrfQKyKP#GO&Uq)-P4ug5m~uct!h+q>%2h>aGE5) z$^S+Y=ExYx5e6_q##0+qN?mOtDBD)J?P7I933AmQxl1zBi@=cJ2(5`YEo3${U;!t( z0!DIswmq4PMZMEo)>5%4AkhH?=3GQ9PkX>E6G{=na$Qxj5Ez7$+ddc%e|Wz-z20 zs>s1P`(3-A{<6K*i+b+kngqz`H+V_lfJpNYRZ}he!c`e*X;s&<$fH z#p1K95|1(PW;lv@{yQQmw0!NywP&=jWXUWfI0Aj%q@xt-sTf9jjr=B<%!XsUqHxzF zyjM`;+Wtm9x~i2Fk`%eJ>e@-=FN{EiJthMmRVO!6rZ>93L=P#~kdZMzbV#hR0MSX` zZMz``KS>d$X}5{0$j=WBj@^63lyHmRzf%3M#X7QTbytC=wwQGC<)FtP#XG%Q3W>@m z4;p`FoYQk4WdUC={W5us9o5Q!{=2&u=30sTIO*#aSd}~IUqy23P)O6;5IgiZHW4yW z=+U3o(=pc*G}bY(d^}31AGvSZNr>+Mfb4*5dta8j7zZH94dvf{W{yd?Sq*oIsvzcg z!9~-PJxqUebmkoK5wBFF3jTVGi(0#h@>7Ol>HfaT*HOolY8Z^n>XONk%uiYf*7*bk zRHQZ6yZTnx*ybo>-Ry4G_zD3c{$V&{}P1d zQT(O{u(P+a_-J8HZ(?s?@k3aInQwlh_(BMQ>_7jRR5r1ic!%Q7mvib0sy6weK=dm6 zMWI5b7~InWfxZtCrjbzHQUzB>UtRUM9FXY9F-nTNdPhcDInMWoBEW!@HGI9$@&GQU z1fow7lw?j`?zk%`ua+*@-}0v~!{DZB8)sR46NZP0aS=(${ zk3m#M&+gM{mJn@!Ikj~yAAZ4@=hkPmbM-ual#w_9)Ub_O6ma3>L+!TiqU_Yq(ZNby z`PuFQ@dHy{o(YDZp|Ek5w6zZz9eds2GGe4rr+8QMSeIq+g-WMRRA< zd}}o>*4G2x&M_$fR4ZtT=o8bp21_{%a5a((;iZV zI-S9C#_DRc>(+>;!QvGa37lKtFJJq!?Z3yl)K}E~JXzrxH-khqf5vj?6~AkrYO2!P zxMad9&SL|`_e*(rA*<%}Lue0z{Kfi%JY;OGtnL1iM%2Uk%{mzn{J=if|> ztLS+qUuG)WOM7JJ-_gX*;`xj}Xhtla)2;FlwUo_2_En2ui3l_m=E+eYX7~<*U1AJ|W_*#2Xu5?W`$*SH(_PA`!GVYVX8MO8^D8 zv@-!^4E%S4CysaFf(n3~d#Gt?2oQg?A{At$ngS3j@(FSj>W^0BN9^-wt;mq#z7*s# znH15CJLGui0xAlY;CKA*KYbRM5_=`kZWAV~t6U3JkG$+)Xwggdfp1(1HZ@A!a_ii| z$Ozo(30nItB0(pZc7fzwFaqk!E~kK*ZCx0=d&_SxJGZWVr?E0rme*binxmchCqOxE zuO;*)>JT4L@${ZjTGjP&v}zNClb93XDU+n7j~(bqxs5d3x^*X8aN#e!{zo zkXPS>YQYpz8s0PrIVzN-k=H7KQ zTlks=OFUsQ#jOYHh>aP^7d~Nv^o0_owxUM2l@GqE2vgA%=glYQf>KIU-n-(?d`(Kx zf@*J6^w4$xw4C87CVFGp;T$B&iw-H}V#+nGy0w(r^6`oEeTvx6Rb+`9#S__9JD~8Y z4ny7dRI*x5vBXUZ@r|T}mG36-KV0SNkr(fH-%&QL>8E z6A8fZa(Aux@HuPnFg8w2ZJf$0`5MW)6j>vAk&oYf%>z4ojSSmP1QNmbP@p#5S`9Cv znv}yOMS@bW{Gv=NrPFaVkWlw-K&qH$`+l-zpWgC>h`J@zw5%W`brf*QOV@?!U-U7(rAAE)Tw?|=0a?17zEi~>&d}c0R+FKrn#cw zYTtiW@L%Gmx|C!{2LpOD{Ut$1Q*Sj@t(g2yFGh1Pyr$rFq2DHtNhS@=&2reDg>>f- z13~u+P;xb>iXf3Wdk`8rYQrPD$iK{v+zy2oYj?QI_jTZk3>|Oq64(_j6q$RC@e7(P z774x@A|D`48K6|AUv*GxTUGj2B~OyP$~?ZdX|(Xe@i2WLyJSU=S-qe2GWEtjV(O82 zD~Yh(_qjxr9XCa8gskqk{Z681HDXaEl@aVoY2xAAoyV(7*=Kp_?k$D(|RyZY?BJOtmf&iDh0wYz|scV98s#*4@y(B;Dr zs@v(2KSaQ~2Zh|^j{>G(Z~gvTILR&{p0ZwA`Z&I}lv{hlEw}cN^Q*`;XT1f6X%vDZ zBrBURw0T1e4Yaymh=6T+M=J~zuu2&~taL%_?VosIQZBe!`Np=oR;d%D4IdzvZ4I5| ziOT}2xV3vYE=mn=UcGL*-8mHb zWr;pCDM>?yk%`^eke#Z6U4h^LPu;{Tv!2VDefBKc!n0E|E-F&=;t!S_Am$yl>+2yE z6DGztvHA43s*(6pIhJri_PJXa8L(- zam#C*xK`}TS1pNDaOh=yn|@oQTUb$$ZntYb04tsng=pjS5HSb7%NqjUJpu9Q)~Y=U z`1o%E_JRmF6-a1!S14u9{U~5Onx6vRE&VCr*fKYpdCErt=V`b3-C}-h9tN$iMFSKy z&2G0K0={_^@a0bd@Ba|65jZQt>X!mu#I3UWF9QBc{8X13G==nCG-Dnk>w<$9R_8yI zv8jnNCTD0sf1NB*JG=27a~| z%-~TEuj`9Zt!u^@8i!S)&IAT;tFOqlpnGK8~$aU(1=@ zZ8%^8$2cn6wFXSH@}*zmO_;uW!~1d#L)P9<1u?L_B!h{0j~X3*a3%SprE0A2>6j^K z6g4DqF=ks7>yV8BA$yA{&u+aqc66ST$&GqH&49TgxFp&!A-*tKrZX!Qz*(r=p?FAZ z1kC|au>qs~)D||WZZSLYeOjVpcM`)rfK7@L-mutZG0Ynd+bl|Tm?vST&Y0W&6K@oQ!F!jcRJO^L`+g;!h+EbCVftRoJP7@YcjStc#VZIb$n)>KzF`# zNraKZU!Xt70Nqc9l1rD4(wW83m*ZN9f0m~iZNB6IX-AT(E%12xb1}&hiL#!Q^4Z)q z?=%2rC&3xoa^zxb&*$YGTzfr{t1Mm-`n@RR-?nw>w?UUTEy{p*Sbm zN>*Ec*lCodx`uy_iRmUhu=(ggPyCYyT{w9yd8L+yoX5a_@~{Jr-Nmk)i;C&CsAV>Gk}sOguO zaAmtWouvR{YwUMD?4c(Zk}eLKzzZh_TrC$fqtC-_LKsUc{BWFLQFVNOIE`8SXbaC0eoy1fWIs+gmeK~3I53A_EoL99W&fFW#4A6%fr=wLJ&B8R$nBOy6Kjt zYF{CY4%}mM%M`|;bul|?i3D!(v|J#X4b4_76KJeaF4hDx5FDXqMHp*@-@=^k9a=@S zJ!wJe6HS$v>C0gXD-kF2?}^N$aK%?#bq0=zxfu-^gg#rh?_fH_2K&MSG%HWACZ4@a zOAu8UiCInr^b)_uc{tfr3l%rQ9q-6VcV^`*`z)OVfJ1#FWGg&6Fmar=l_I-DB_Gqh zRohhV-^FLu%{79U+fXwb%#5a+_CcS~jBTUw7=*L@(iKf`;N@Z@S=EP%=b=4YPCk7h zC$AGrS}G9I#^T)u0*T262v)&XvMPs$E$_90kCC=LT&Y(Vj1F4e zpi|DsgXFK!(dNbuA`b>k^IAj^^OZ+*WpUEw@Z+4#BD*7~s~qcX&Zj$-m%nQ8R+J@A z^1r}aiLx611OQiAR@)lLF4~y)?iC%$(EE`kM_&uwdaIw*zF{ZP+!@)=+BMzh8=Ks? z)RMfInVQ(0D&(ZqAaljkDSLspSjG)5oEpQ#xxX&XN{7MunroS5y02b}M76uQT+LXP zfj6D_N@|2Z3CwS^1vix<%{d##63Ca7sA^8>?@~7| z?}sipln?~YY3+d4UoRDhn6DO1HGiwtysm4pJS~P-FXb{@Wg?iG)^(dUh~pB-8|!5~ z`sJZAJ9jMN-v8{&|0SjTt0{?LR}_P|0{VibIewac%~A-{mgO;W6n7Ver_&P*OhZ|` z?mfb8-;)f<;DKS!z0jRfc63+v0iQ<+<<6O}{orU(It!fL@_X%Z-Onjcg116t(RJvY z957l{C%7i+xaJyt;%+i__1X67#!q9N3pp3D9WS5D<`zu8fuBjS63vmT*F81qWXsl- zY8FX{*Psv1GeO#BUm%fF;wlMyaq*U5dF|;iIKAx@Ug`r&&9!Iw<6R7YjKx3D67N2O zqzZZWkFofV2Bkl1N%SM6k=tcZx;zPL{Xw~ z%tGs!@Y%BZ^t*@{qv~8>KjTqouP?v8&X7~} z^ZVcujaap&NYF@}?NqHQYb~|GOs!-VAAAYd-EWb3lrut5GclH2Ihk#`);9fY+2%;x zF!66w>4O7wPL1c5q2%Oprp-3M&b%p|&}X1gF82llAC0jDQF*f>9l~ItlBR=&jwC&+#0!I zAz9(?3<~5TRaP|}`M7zC&7`00`KDXW*yFQlfp?=pXOvfdP=ap)Hg%+=wyA}CY6*7> z5H+unp*z12$%MHC@Sx(-F4-&(c28U1Z3{v$OD#TCcdk05Wj-koySlll8gal_S`l!- zoW$osg_k3ho}!0L|IjTvzS)fMxpLMSg1FCrl$7;x5b}R(f44h7LXec~xDsuS zF2IY1I1HCp$DE8Go7&~XGESF^#?>B^2oaly*oH@5;wcF+XFyXDrMk}AA zMrXATOBj1$A?@#GV6S>u_jh-}r=dNM^rKvBs5`7-GH6*$p>i&+j*9@Oh}liX?p=KIC89_n%?4xbeP?1?9O{XNCV6q8(2PZb3$gS zZu7h!r)L+LV%>dcKmR34rf(-jt0AOe|0QXD^vC^K(&$H2AVCg$2rcIkwxqFQJST$A zI@dLzLBJwKWq4tF>jYqb!Dtu)+)GYPb#3E*ioc#>U0<=)5gQuiO-V=c9N~w*xdonsbMOrr{u6iQog0JX%)ZI#uP)xG|K*cmSacJ=P6FqR9GCPhwN&pelJZwI%2 z*+JA#{+ar}Y*l{=k-t;shu6EnO@&4SLt0BTGcHgnph^DRjP0WsWz4-Rx-G~g0ee$+ z-=pJAt4%mbv{#+*lOJYg?(2*Zx%ls1@AE(%<+fHx+W7pRyRyB*aUOyP)B`!8o0$~h8ef@W8IaZi7AMwNyqwY=y7xUTWr*d+G znNG_0aa)~~5;A=E+!F-sLW;@|##}>=>HbkybgAbrJ0Oga`Xyt2G!_1N#_%JzzeDkB zOP4#K!Gy^mjt%xflUgO5nj|yFQSFN81#uF-4M-hwJ=t&G()${SBZ>sA{+`38Cu$9A zJX<_DeCb^<$u~FhsYqu)cT_^0I*+r6FG9kA^C^B&3ENzd%EWn0p*OEctUE_ouF}KS zI2zTJ_!-OAh|=8+ai>6N3N@37pJlDB+KydC?R=rVXJOrrRZ#2u$WeuB+#F?`;-CZu zrQnL|kG?(*@~nlNA(8hD8|m5}`VBIZ~noWn*6 zC&Zm1jHHX~pvv++&t)3d6Xqd=6WRUN+c#@nzE;d((wBl7u2CW zCOtInYV)tl_aBoUp}mhu4+$r3l{DvJ=1rB1!b`;`#g|Va zb1A2w5$mwPYB}Cb8Ff1Sj@kN1+^#risb!FD%HB!);_$s}i_x5FgJ{wPCLjOZ#TMUP zkRYTrSrhr++${9KRMB(*!LJlTAoM?!XMVPr{8e{Pq0%KyXW7y-I`V0=*2i80aW zt>5BL8~8+j)zxO~iBMifc+Hsf!H`pfMRDrxXvwILnmW$jDZ{Wct}n@-y782KW2lZ~ zTxKpkgq7wkr``Y}c_rOC0``~@v0W_3H!arTufA&~QC)OQtJ2A{?J2i0a>^0pc& zPOF&d8zKI-DAB6vg+%+b6Nf4*o5P~MD_}~)@HXlNdMI`QLuHyZNNpp?VPs<0i3a~n zBH9D|<-+P>;Q(+h-jr`(m8jB9pIR`N`60e?Tw`-_YBx_s44>OXxm|*<>RuAh!@}+> z`7hZ9J$SSAH=hXm4>pIZ=vB*VG{PWQ7|4p%Rc3H7;y?_u6QVjeB+5S=;a8JX` zZh{?sO1l3z)xTrpKq4=O@>%0htydyOT&f>35lfDQ=7g`njPi`K@_2*j!(EeES^_xNs4-WkR6?I_xKBO7YbUvPGi{DlZSzSh4*LWf-mQm! zmAjqgXe(phre8yZTwBHvT9uK*Fp=1~c_O^}hUr0;)b#mW=n-}j-bB|Hw`^sQ7QOYu zlM%-u&>UVTj%j<96dJ6_vx?a-jXXZ(R@oCSkHd1rFh#+!aZkn zGi1TNjFG(+T~nfT!=6cl=Vrx!F8+R;89CzyW>XoLhoNn4S#P1q#|}!J@6!-XlhwxF zD&?$YRzbFMt-d~3P~-GaC%KYzjdhN{;L733@N%wWIg3N3mZ+Pn&&KzrOWJO^mJJxH z3i^(%5#l>Wsphb}YZ`bx_Zo4*0;U&jRziPcv@W=g0&|5jykttmxB-oN8JouVH`;77 zz{_5i8kyPv(1rFlQ3_zi{^_exHh(3@jDY6KTOJMi4QUYM9+Io2r)FvK$u)F^om0Ht zbdA$-dV>#09|m`WYv>C*O*TnK+TIl$RKFswhGVg|y!VYGJI6Z_C7*tIIqg8`Ma}XS zJWN2r*FoR!a%paZC@H_mOLOv)c7^2%eV?OT)9YMW6CVNoQ;ZG>n!K(zN`nuiGMChf0^=8i?fI819*^k z=t4`;VrDM5EMj`OuYg5*;P~wuQjg~*pwAp-OT-0(eUUN1i&4chU`1<#&T@kP{xV%j z9!FIxD~PCB3UhJzYET$|_-6g`_HFv@yjU-9*Uf6PnPVP!rg=v4f_t>&)!U8+nnf6P zL|;&jZrIyt9f{th9?=VwuJQN@*^2-SfA^wFC}+}L|9jc1y&@Y)$~N#nIs~2@=r6zT zvQT-5DUEmtA*I7P;;yN9A2Z>-^gNkDwoQaJ%dDrYbssy(`9UQYIl6Z7eO9vp{j@{k zlJd2t@-oas#c#dA6*-=jBwP3%IC{7vM^aEsPjT58s-QvpoLqJx0};VGG`jrYXl-pP?zyU&BLzSsV8}n zsc1H5A0~8G`|O6sNm=d?Fh-9MjM7tbHQj}6@i4AuEy<*dA7=w-;ZXTs(a+T<3u(CDk`^SKX9IvHFRN> z$$PqeeBMOpifjNz3|(N!EH)F`>ESHf7X!woLhiNOubE+rUb7!L&tcSi4f4h9rk|+k zJm~i+2Ju(Aki8tqKqUUY8Tj%rPh9w%jRh5LYPIabu+S(Etylp`h&i+tBgPrWEPcb>2u=%RFpDXPl zuNF3rXdDSg7&PK?Lv0#K5=;3pLoqb}S|*dN{m! zXa5ULsx>>B!4CSCyd@nBNAd*Z3!K)9&Q~%6<411tI#s)|Inf&@g#-loGqcyRb!9OKEwYeH+%XpTu}o()pB6D-y1cxssQhf%a1SJ? zqvhvb)8NeLEitRCqcsXYHyK~G4u3oX-ANiU?%_gO*24O zeuT5+MG$e3)#Hy#9%wt&Ig+3X@@!?6l2nP#&PeXtzwy5w-lO>O`WtLPe<#E8?os=AiK2Mp4vDUbYO-i!r7TH#tcpsEaX1| z8ud>a?QP{nKWCXeunl3R*)!8;h*Xh}L;DzIaZ#QG+mvFh$RkR&1qCA~ei5sQW zDn{mGLXSTbEgGhvHHt6kX;zg=Dr}kzx{KX|ISm;+RrAoKE|3TF;X%pRDqj&tY*sOe z9F8v-7`_GeyGBZTSR5Uoin(f~IF@)0IG4HVmht)25qzcR6Gd+K@V)Vf*@ud&Xe*so zhJ&HTEw(QI7HXlw{?R3u_xz0<*+yexOh@|*7|^lG0qfH$ZhRHo^3_iUZB=m9h3wi^ zZMoe~sF7xY9lWGSA8oz{LphMQXRA6`tXT>#4;oG^Hhvbl0N6xxrb(=5`}y1jv&<@! z(Wsu0Y3~%3dQn;lJ^nHPc5txDZHjdwi_VX4nzJd#tqZwf@x?PbD(h%@aWVfSIG09E zmdPmAQ@`Saiv31~FbJgr`$bPnug9?NNF33^z#f6jbAx1I-rTD5qE+e;yZgZ<@!PUh&sPs1r)egIGem(l45N26 zf^DS}dT>zG2*nKL9bZS7V$5PCux4dw;FDDvP%+JYkFG@ZrE3`k_LE6S=sw!CBWc5t zoZwG0yz}+&FP?=M$)m-N^g(nSU^C1JIm=5dwD_ImA?gWJ!>K6=HVn?Ll=0uLCIx{n zOLmIc)jFogC6yBgCDbzNM!6;7fBvf*A5nbK_33v|%vZe;o7jvQ>8kwFDgx?bK@zV4 z(_zEt&(Gm$Ebg2H)yro>deJe9>$SU|4We>iH3Z6Rs~NsJ!kpY$9Q=;OEdKJv3GL%L z__&_O6}`mcx)C)L2(y~TTV7{sue=~pBQuyqG0$a)fbvclF)!s%Nhks{68ZrtI zASG75C#imTpXHXbJa%o-ZaTr*j2v>W7N`ECCB1Dm_6);BJT9(t=w#T8BOOz%L296{ z!33LQU9YVxfTrza?y|`6+KquAH&GBKjwDUJwFUZuvzH?r@gAkM&8UJD^K#?oOrihl zl-47#UH&c4@b5hLzvP+zEl{N2^MnQC%M0dfm{670eh19?wfvsX6hiHKu++D5eQoG} zmCshk5JWvW=io1kC``;j8|gDol6u>$r0%2E<Lcp6b#QPrBwyC@@=q#~DGfIiQz(+n70Z#TE^6gIyL9M_32sRLOdH#{*K%N=L6=X$ zAn5nP92H(92D#(fhPvI6*5i;_P`VX)SMha3E%=TdpDl&Aau5 z^yA4!QmX`CxE}3hIX(w58fEYDy>NW~6cgwRRGWA1LJpZm<#wrDeylAbH|Ng4GZud@$abom!8zW2BGUhVIXaeHx!SR z;+DU4dOTK&|JLcz^blHg`IS^s0;4eYvAmP84Jq%`#Q!MoTqZu2cUoQDj0381+#uy0 z?;qtIs>kxq!p@lTnGT7DUJ7&GCPjqV-5XF(!oVa@)#};`#UM#cveJ6^s#c!Lk6I*M z$xV=IvrqiAVQeGQ2{-Rkcqb3BLCv&FQAf*A?*+Ty#myG|owuHxM$tXNp2sg?B2V$G zX@R`+m^AwZm;X{PjBiBCW1iKwO_bl2$AShy7ghvk|I1s97tldZMcT0lH1WbksH?gy zEIk}H?`#uKzI+euOpT#tv!xO<{E?fVL6v(6;zL!9Qeh_6?|)Yu#BRr}uB3|*7cD-; z5r1sH7(ST$-BkXG4{qg(Y;0%7DJBeGK$<$`V(rxwGbBT|7(#MxGKe7*>{)C78gE&wSqu~z zNe+wK@TiGbs#C?-uvLizo0;ve;s~YXs-q#Q%QsrY2Hyv_cVjPquADnTS0Au%q&T=~ zU-P=-AtXIhLZ|*)663Kt2y-qw6$_~j-v81Pa$>PuIY4exszrVJEB5@QPK>=&S34jp zM)#3y^;Me#zB^=sguOc32PTu0RI*`1BjCDX zYs;&D;A-|Xr?a`kElV6Bw+o!169sOPH*8<1-Dnuz8$qlJS;T|S-@SHn!Qmti5@wWu-c!% zCmvO!5agZ6pdE$NJTeJCa)oz>bS2deYs6ezoUmvvvM#S|$uHbsfm=GamWf829Y!}# zhSXI;hA}wYt;%qLH{~=VN5W>~{tYY+){0Za1PE=lhwf!j@mzh~)az@Q3*??jWyLur zv~lx{Y2Q?`&GS4A2Ii}c26vzCOuQz6Bs0p&WYl_CAEb|x4P1g8-IKZNoH-dqo$ezv z#pvSct^KMty-K9@CgVk&I(WF@K-Z*cCgGEgM|*&o^x30iTt!o!P;c_-9PTe>gq zQ-L}6W3`QT3(*^(E$g}Hc)tCuFC6>nB?eOFT2p7O-J{oz7Gf7hz<{Bnl+srfnw81~ zKurtNdjqvoxciIt>6_iNrcK6OSTho{c1lyB21CBO^W^!ZPXLx8%(mH>hXeJF`$dtZ zJCP6vUV+iBq_qQXs;MSaRhHh8wtc2oW?QD|IUF^mtRA6C?dKYF`>6MH=WkjeztfAv zY9@t;@j;085PaJezUra6G5_sMYD47^$1XYJ6L39iuHUze z9EPA0ks1aENT1a>4WC+SdKVcck$<-|CKUkgb*zM_Twy>ErN?u#|)YcU7T`f${ zP~-Z5<9uu@g;vbiu(#}Z_8KAUUaJpzOMQy5R6S2*seW%JfR)m*0dl$hoLl@FP&yVb47leiuk=Px{T43;+}+Pf|l0kUy` zj0L&-uFJu>wZ?V-oDIW6P*he+_lxAJ&C?PNeU|eqf|(vu^&P2cGB$Ov^**!z#&lln zhI8Y`WOW-&W{s+aV(FdwDYjm~LDbOxynaF}C64ICC~3W5r+e8ck5=uAtwni0M_wx( z`i|6h2ffy!gZn1ABN0HH@3^_#E=?Mxs{`!kp$BZ$esvBo`hg3R`=kccm6ryxju++u z-Z!R}R)z^~*@?@Ji-T$ai{d8F*4nLBc*kn#!=~l{wou7R_nAv~qjbC_$j%TGu-WoO zp&_t|AaR#+y!!YvsdJ%&rP@b_xX<9JUVPL}mJ}m5ZufPLcdWb-FUS!DH)xu15({gY z(`~Z{x}l0YjI#!#+}ZQ+bws-DNYW7O;$F4IBTZ#`xSkh?mG4YaDB>e&lRH}O>}|Rs zIc0(zcpExd6~yhP?WkX+c}dCuOEb4}oy2;0mXEJaycQL?DsQ$b1`SlCwgITioE~)e zKt(2Z?4C_gAe8>n^Uk>5dtIKJp0qLq4e9zD7hl%(=~+-@o;hjsyi_scfqH75biwpI z;EZ*!8|&%_2zZzlYD0Sn4Y8wgA*;aLSX@x`cy5J|#xov}?}Fd!sHuy{+hgL{+T#>R zo%li;u}m!O>CBnHvGi%Be4l}{_C0W`>L9T`llqzuZ~Bt&%0u;(@1&)48`J)NP7s8z zx#$%!?GTp!Q3+&RG_*`}@{!AzAi7GLx31_qQ*o4X4!nVJ<$HeLj{8*r?UJpz(qTkC z*P`k!#nLEggZWZ9ZIJF>q#;jp%Hbe8?nG=0tZdG8Q6f!bf$!p3cQ{h^ehn%u)gy3Y zR3E&j3evae+;8G3=MlQo2%)8P1F$RdiDsN89dD_w*;gp1T#cC34eYT+)C@- zi_kVgfAUqPpqJu|)q|Ys3X61k8Yq%OkagO0h1LI@(gNkYI0{d0K4UIjqV~N>hzmXE z9AOFKt{aSjPxYGJte#vP*1$_e>GyNQIkdYidImnHtTN&hB4cF-zU|AjFG`l@T?L8& zT?^eO()x zvnlQPq}h(lTdhu`XugA_PI;2csvr(|zyP;lB3prU!Ma|YTiZvTxi`6z9kRhx7mBg2 z>6b$>Ii6@+Tz9Loin}8>&0t(|T%9e@%GJ`o%DMvq&pQ>`@G1ZFR7<(hNzzu;|3}_i zM#Z&tdA}hffdmWgkc8kC+#yIHcyNNdL*WjUgamhYf(3`*UO<9dp}{G@ChS zy5Fa7pT2$1=gSAi9^2NcIp$t_?KS`NH~GX>qO9Fb8ogaVzKW**b#lgXB1penPWoLv zMq_toTrO7GY($&fXI|^~$3LOwQ4BX&Nj{m}NBQuV`rZ3c$vYXv=T$n$8<>H%+NlFT zGYhk4@$QSqK$2Fdx0Ofc5nZo;xQ@z9A(BI^C$-9-Bw#YH^{QmK;HTEdoX#D}#JfhU zO^mr(rIMX0+Qj7_UKLi~99opR3Yw!hG|UtLGk!Jptd{9ktqqfP3V@|5%Ozr6fdbs* z0VgPoV+Q5hqkB1 zl`Ry{TW>O4{9vuG9E>Srz_^5y`b~}mQ&Ya(AIYon&|i95Es!$vvRXj?+Q!M!48Xxk zSLE^fVk=}*D$;pq){G5d=8_uXWKFkkbV);lz0FQ{C398LZ$wi@<3jPr%gmI<_XX>KyAf2?+3 zTf76_rPF!Cn;`$+vBap|U$3ge27(UUex)<8I1@G}lZN(Deg=#7W&(o6p=s9oW#n($IMJPW^wh?DVRGV1=hCyC7MFjyg#;*#nP(Q z%{A+PQ`@Sr;p}?Dgdj{8jpEARy`}bY=(IhScU34dM!gpbmxo(*e_&6wC6g#hv*A?p zhMyn|eO{T_mQyO``-l=Lu5)&uCwVCJOl()8u_ViCVPx@?@TW6YH@{k%k_aAD*2OR{ zrV1;3nJnw!j%hm*qMxQqVP?zQBggL&*gf%FF$mcPa++srK`ln+6QY`ka(xAM7z z>6~b~V08$EbGcdsAI&tmVgWmT-!+aHx=|X#k9Tnc0d!FFE4Ij|;(R%=zoSz}Ar7mQal*oH*`l}{T)$Fyej@I4&Ym#TJ)C$Jo=g1tzS~q@0#Vz?Wz;jvl6Wa) zn@CuRZ>FwTv@Qjg7C2qS;@)KDPS)$@XS4dIfO)bP$-T(oYw3pP_oj1zt}w93Ub3$6 z2MSK?(Ig8qB=@$&CjVvTYihPGpexeVnUg+ z4A8aAx#6Q#a*<5g&q8D$dMU^j=7go1v3_^2V|M%N*Oga)&o0E*=0I5rQ`^2@!OYfR zMnjP;3T2I$4;|^IvVvV~7Qvjp(I2>mvb4jBU*-i*zF4iy(&ro*K9ZG*YGy9WCGyw^ z5AfLvn@B2o4maphz3~N4Wa_~gk7{KP(nGM$T@Br|fp*7_1|_EJ2I*Pyo=lUK7$)wq zCMhyaI=H;#M@!s=uX~zl(zfLkqkFo4ol?m7;77t6BEO9i!;l_rN~3rC*Usk@ z_a{Bq$rsE0!TgZRlXY}!m2P;uxmAXEN~1ivrvGe8%|GPsFi&8{vVBciN} z+=0hj%ODD21}Kig`*goQv}`;FNO@}Q8!2SubyTAnpp($3RVo@eY-#JJ>!k4qNZ4N(d7|FxaKs|fvoLeyLEC? zEc+8`>hAI9a?(^dmH)YsQD{vo4K|{}xo^9lI6ZhGez{I7^Q(QbdTTO2mWj3Vgyks3rO#KY>CqxZZ`!UM zn)?sP=E!ujC35olVw8FhkJnA_uL=_Buw+mH2|#C3uBmg-*J?R3X`Vr+X}Q8J7C)s` z3>o8!tqYsylTn!2gyyP&bJ{uN3MwuJoOf@jP()kci{M}~iXPn`c{M-DC<4f_UlJ$= zu)#iv#SJO*fdY%K>td>ud)(hIDIS@3e2erQjnaVVW8;u63?-;?@n(K;F)WwuC&xiK(y;3NpxO~t~j(HM) z7u#?J<>9Pb{mWvS>9$2`Hckwt1fj#*KQ)7Ub%y5pKlV#vvwyBh+|ekkLk8qIH`U2l z@KPE)lpG4qhCf(uO#O+zJLUMmU>Grb1iWv z%{PgBzJsygLdI)V)d&+0iKXlzX@f4!rj{0D+po45B0;>hQv3VS-wX?ps+*I_dKJl2 z@XH;tz)C*XZn>}`hTfB(@k}dkEd1iT_QOh(gVV;nX}{Kz^|yUVd5>LCJqt88uCqyvs4}3mp?1fvUVdwL#Y^bxOZYFW}lES8D)#4A%8pY$ExovF4#rR-vNEvK4I@CPhvSpgL! z#O1u>9jb?0BT?s(m@)l%WBY7*X~C9xU$tnb7y5P%?hpR;lY{58Frx{8lg~tCf>k)Q`ELJ<#U3VDn z-)I1`)A7O2iRIXlLcCP(udE^}L4IfJ=P7%OU+XO=^kJ3dcDUa))V;!|r*b%ScH{v= zel?by`uuy;g^lYoHS6K?7VUN#z7c_R5tZL9Duta{{d+DpMnPeXi@XO1`QHt zUDi=S12vrH*=Y#%Hhr-dz_$oI^_;r|yCdPzhvzV<#(_T?|`P^lKJ%_-~>H|0r!{ zKLwylA^E&FC&ui`2)Azj{Wkg3Ji|0EKA&j5aOU~Yyx94jt zPT%tA{2%>8fp5x`prFTkLIk_HATW0GMZ6}Hu z78CAAj`Mw)(7?c54<9$>r%HZJ)xs&OxcX)nD@ z49c9H8K#-E%=Y?TVAC#jnzigJGdz!9jm!w3ZriK2))x_$9-71-TmfA$rGfckcps1wMbY7yy=4omtnS(; z49xjn{nK;O+)}Mp_nn(XGP(Y5;Th6+X2$PSK6MP)PsyiDQ~*iG9Oe_{pPE;~LK z9)>NJX`AXB+oI9ath|3<=}_jAl2>!R97D||IwlvNRw~?jqdPWFKbcOaS^K8w`5qCw z4BHtAy-YK8<<4^wzs)Y%+@r4gnK~O;f?3ujW+(JI!!vcn^Dc}v#btm)gr{B8_m_yn&__wQFWq*X_9#)vk!$41x5tX^#XHZiOZH&r9rgQ%{)a@DbCQJks>gGPK9{VfQorU9{ zRc;UzI-quhVp_e$ZbjZy?5;O>p|UV|Xb4bQ7+mYQJjbw>SJjyiBN$*45;r|ip{&*ki7P)Brl&F~tD>`iyr3L+!x`R@w z{)J+pEzkMe2Yp!fD#M=a!2_AlzkSgEQEJnEmaPV*a{Q;OBBgzuzDObL;HbH@w~Moj zFVG>wrcQ6*C+l8tpPH$ARaFiCUm_0TtXO4NS5<)~@jXSo_#Ae|$3+&^omzffEF&@f<~8pG$m>6=;v1cSyDR2R=wIO*?3 zjg9}PrkQ3t^tMx1hCHl%boG>7_l(BTcw!A`or5s=Fhc{N#bCR`#BA7JWmZ+OU5{U$ zD>5JC|8mu_J>LJ@nu8L$?!l}-oLozZ6wFrc&Kke$7`n6l$&*ZNA>rLH2s3GTfQw6O zNB+dCWR$>CuBN0I5E%%wL`U1fGiljclHV17a4HT`t-;ZwdLWW9E>^3IxF4^lh zB0o>qov(w+2=ZZctY-nTj%A&#(vEv?on`J~Z2cZ$f^A%$llgiBk{MeK@HE!(>`r$) z`BmFR-gf-1QcVha*r<~x0}Uz zZ{4|Ky(?VEeU4L<*$RFm;_ad#U#o3}7$2o42Y)6;$3lgQx zs|ra(3@^0S-C^l1=6Wp{R6P9sip~dvH)X~AIp*OfYcU(MhqGHjo0K631t=s-JUX7+qT}O`5-NikOh)O;@#f zborfr(N|!5*kK926eAIAdwBY8FjK=bDLeT)w{*;Ph}*%D(L z*#*P{2(n(8Ez_ub1~Hm>M>X{KKQkWcwP`?E2~ znct;m$EjgYt2x;x82KTAYRpIIovL=z-t6E~71;>iPxr1WePko97|xj(HBY~fIxen{ zT!8vI;J8dii)8SrcF;UY*Cmy=XbgXH@s8X1m{4O+#%VG7HX@r#X!U@)*Dv#S5MV_n zxw*sVY;bamc6l{$X9@!6CZP?opQ$|U2dV8cLg=RWXfqMGg3wR)DSID5a<;1C)xWE- z4g)QfHf8hA%@Z$|RKx2J#R(xq=@{-W*`a<5F6G?GmW?3pTV2s(BH*bH(}RjrsmyZk6a?n1KE9TTX?5 z++oAxa4lzNoaK&gN(pAVEZ|nfKrAi1%N(!RG|ouX4W4=;hHEQANF^(pjh;Xx@fdsb zmhV^)uT8A2R#hyhj&(GcsT%LKM6!v9UI!`*~1tiF+6ud6N?~xHW%w; z8!PoMt_=XpJ`_m<909e9iO1<^|F96zhRXwtQcBkZljX_SFdx3x9k{kyl(1KHOFa!BM3EyIz1nhnmpL18ue(@oLPiE~#xRJ_9@;vl);ovy} z1(~z)cqMBQlU|?)$&M!XpuC*hY7bOkHJ^IqyB$C~E4sdeXX8!7q~Z;aELu*WnLHCW zX~Cd_pF0KJ*)?ReRUNkc_DZ`5{Ipm7$u-_H3+|@Y7x?~X)YvnpuEh8iMlk24cp*lD zqz-9Y)omF+EN%Se@gwy@(H$PL_DA-EYC=8mm0-K?uI$Y<9Tz)E1ol}iq|(p?SyzzI zlX4*pYP_cl;u0gUkf@*ZDmEPgOr~N#YcXUCs-%GLPo)(gcvJ#2`3sZgdXmEDW3^9@ z6ZaOxI$`LGELkXPJ-CchTy!(sUT6e&?lIF9Y*j9TLetnR1n?&0qY8=3&Bq$K`(42) z5xf16e6jl4HS^ZN<+<+|M=|5ZrmTarR(5b!Uhl_R>>un>5lIWwr|2G~?7ciGePWTT zY?txI${`yVE%>Z<58#YrvY~DTY8`cRloTvxId$qc~C>JRB~v-!uJ_5 zJ3Z5Vf+Ldbp_M4thTenQTg8QgLdb<1F46!`SPWCdIlZ~#Ie}RWG^BHm6g(|5osrzR zLU5Giqv{WKHUy}a8kb&sLoS4?bS^in^(8rPh%Y%l4IzFkyJP>E?koI7 zGx+of|Ayk*GQ+C<(?iD<0&x#**!z?3xchB}*rK|DT)dOyy+iOVGV4vy#jwH{M9iBk zXwtTRYP3UsS2RZG`?S~NCA@Ei(|Cy~b!FOj)zV)Fe%uP9fU6q}X%(Q?`|e0JUs#K8lMXGRfCp#p50_U30Qus^Ej(qs%oYSFB9(L_mq}Z zEl0TNTn9H`{j29;UM5nJrHCf}aF1uq4tygN#yRq4bk`QtC<`ITEb9U@tobIKDENOw z_@ed21Burc(?`!Mrwzg zz{Q~ogEyaBqeLh3(CO0;fs7CqIy`N&OwP~me9A=Seb>#K-_Rb30P5hSh(C%uU>Bp( zS^M_RxXUb8(4t9ZWpmjry~G|~%W(kWcyC;e&-lG(!5QR)vUsfu9G7DkIDL9%$GgQ;3--tP+wa-F)llH{Uq2S?Dk6JsPBn8?-*M^6p>= zyz8RiZ{$;M_)20J5xguQ28!AUD&y;mjB?fW^Nws(%+=8~j;>1j*^yW@0LoeQeYM?^ z<8l?AEj*an8g*K!G<*g{TGV(I0AbkB4rHTf9qbDEc;f1mct&qO##5!GDq0VxktS*0 zcQa;wFQcn!niH1EAoc?rdwGWSs^+%;u1>&BM6&($2`Q|k@6!2OK3_JLSX&m{`ioN? zlrT`EBVOz$MD}X^Wgm6ShFt#vm6+auN>Wbap-2N>0tcT$e_sY=>kmOW$$L_EBg%67`WcfF zR0nz%ohF=Sa#F8(I2{E}x?W?D=G5in6csT;>bw$Y+MX@@(j5ON((6!;#~az-HQ!J_ z9cl#J(O)UF|2&r1feYb)w7z`VBt>eKuFEpeTxNput&s15=m9c_B~nlKiTvrZ`i?|s zz55aJfcj@7e{3U^D_V}&FL!JRt6ir3x_Yq*uh{UYBn2W5aWOP2G6TH6DLC%y54rdS z7JHmhy4g`lP9dOC)%dzy?rMTSr|wV?>S`qZgLV`FAzRk-85dM}6$O4I#@c)GMzCat za7?QPe(~$53Y4-|HE{_K4lG`rz||ThJ>IqE#r>T$BI|3in<5;3VuFk^kal9vX{n%X z7Pl9T8z-;WtP2D$0yVbv5iNt-mz=J5N_2OiTNyg^4Y}TqP$29k(7EKc#QzT@VF9f- zxjE27s)Uzw((Pc`7vUsf)dHf0U4)$%Nl1z}QD0;SI_?anM#jkMs4fuq%3j+kcI;2l zvIECBlw9hO?He7xS0&i5IUdutV?Zh+fH)mf=B;J(s-9?36!g+$D(bxtXlrd=~x zjFg5Fs`Ir+PN{TDDyp)}G+kZlqO#Sa!b5D}bK&MsUi-&4&^RM#IXKIuUW?5XRW=$P9&3^;@X$D3wDkz>eMG9XK7HdWMN^fwrj8plYJj&Nc=Lnr zhE3~wWB??3`M?wC7YJEY^&@ntS^{Gv+^M#9HjNYAZTo6{=~zCT0W8{N)p#z|`7YHa zOOQbT4chs>9G_)?ml}INVKCe2I*b{$9`GKr{zMl!0L$UKVEu!944FKd@)i3C(nfv? zEZS`%g@rgl0mwKEGqE<#YZTmx)J0pdx5iT262>;|@j zK4wPT4#hx$6Gx?D(>JHBT5YN*lUJ=zS1oK_0BZ1##J^_25{>hOo!AhT5)Xk2C(lRL zs|W(vJ=z!TIhR@HI#_AnMmLgzli)>HGcY3o8V-b5Yd~QAUSB{oE3c|wNG*11(Edf_gLixLKl8?;TBc2*i_fZE7Za1sx2L%M-@qKafbeaIup( z+VZ*5F1RsW4C(V(p;5f3CGt%7aXQR5HOfKwKRxR8PS+_C1!Q|o&D}n)?dq5o8LBh( z?T0wGrJt4c42tX68tRMh2I>Z8dS2(WWCR={H?e(@bL`|=j7d@4)}(uY_p_ohdF?*C&j2nrHs05 z1fJu+RChOt`Y(%U>Fp61th!04(r@p`@uO%A4;o#6u~duL^vOHeit?ZUFMuF25-W;l zF{t{&I}S@7Fr;QR7&3ImlCi^?1w8=aTt}_rh>RThPzu{+N&K-jI$StkFS)K(Idg>s zONem-%WGlRjp?MYD@`2Dizvk_oI`UB8-`j2Dew| zbO*Il{YPd-{_}TrAG43_H)*5jNN?RvW0tL`7S8-UL3ra=^VTtN{e4l|9WmJMOuw`* zZGdpkZ!Z#61i$-~Fb!x@G{3P1VLYh#jWKn2^~ZL3 z+;1l%=1g29iY_qY#HKyR6^f8M;-eXX1NV42ciQ)XUPtE!&(>e>!OK*9#It&-J4k80 zGcoL_B&|;-0RlkvHaTI8M&$LEnYp6v0AySaom#7^F9_(L4VhsA?5K)*YeF0@?N|hxcj7% zk#jdAdbjT5+rZeG(Z@}BQp}va5YV#(_Y3bII7}st+0+&W@@^`+`{HgfHq}7ES10EM zvQS8aTXMCvVbK{N0^pUNLto=AGTNRKnq`<0+nqhUztg;)xg`|NhLq9#2_-LzfhOU& zwqpbJ7{3INe)N;w@lyb9iGJr4r8N6WLOXxf?ylel^J$~hg1(87Tbj1~Ve5tY?CdMH zYJJA4|K#ICSYO%`dObY`*G7p^Dm5(5$#fy&TJIXKTryR`8)}g{KdC0hU{0~~w@h2K zSq~3{CZ^x`I<4S}rG?$}jl8^!T!bsZ&W=q~rJ}4?26&p5ngR5GY&g6RRdn)AHlr^> zIxC6@D2+R$loSEPkFp(sk_U`atK=OMaH(x}c;Z>zieonHIdF@)6tZTK@8c|r!uFa< z^tGa&1BpYQ*bH#(748eX`pUW8uC`<)>3e(DD44YQX(D^}Cd(eImSaYQ$0Q=#Ds3{& zbKq5cAOQ2OoY38mTJ>qwXgeCT0c7$Ym0a}pv45JhwAl!r?=?3*;0-sc=@y^QR`*BG zv|ec$ZWr3Ud{kcccEtw@A^*($;=I5d2n?q&RP&^ANCS8gkHd%R>fZV{R3vqFdd(Z7 zseo6U6C8r#?Att)*u_@dgC^D!&-T5+Wp|90V)cE5 zp4JFLzwFA}s{OyON)g(jgxE%fH-u3+EdNtf_a8+vEMmk^-2LalaH-p%X2axHWfg=D zAq<``rBf!PbY2cscTSMY<9HiV23g6xsyv&gZCM@hhmd!<+Ct9KD7^USOWq+p@DYn5cmS#PrHrqZ)% zmOcN0A=K`+pK!Fu%gC_?pUbp--yDXfueHMi%-n(kUK;;xXsk}dsO*1B5&K6r`L9|5 zBDv}%6CuGUtbf-E{5!|Z>h3={Zsj@@kK&=Gc@f{v79z?~m>U~s9zs17`|s*<4BJJZ z35B_Nta^{RNj!0{JGLwxL49F?Yq$+Lm8&Z@Bs0|01KW27=ZQQ}0Lj1Le^~z){?~(o z|3$YwO5rx-2=8+_^|rXz3J~k14E`I(t?K`k<0gDNHPDJOpv>QU%|F7HS;Q!#uv}zc zb8^0j450{;yfA$0%x+1=(lDoQ^p_{8l|kW3HCJ0%b8~4kwcuDvAq+c%IhQph+0T}5 zgK*jBTkOr)!Y=fylc#DGNtA39rjxARzs)H@DV8mKVJ;1)Y)cn{tMBpX3Wy8G`6utb zU4D%?S8>}pGs#CJ^uHnGndxPbW9x~k)~wEKkn-X84=-NBNAQmdIA>SXzA}?3zRulh zZQ`-dbuj4;AiVD2M^OQm|JHZde10$eZ^7q(WSRf;oxd1>{L$-8U9Ole5C10yAj)?b zV3KZB-`LBOF~esSB~GV*E$n@q`EKUA*eajO_OlaYD2mdV+}8oI_@S8h9i=mAb0+~c zc(eRuu}77#kxjAu)*|loY$?fGc%^hUy9_2!EIQK6px0FB4k0JJiTVB>&d`gaE9&THfnH+0X3nUFRPW%Pe9Q zQSecsuPCD1g#kT%+{F8D6_5GNUeZs?C>G0Idn*A5WBNa44x}|tris&vqY0>c3L4Bh zZ^-=0j-=5t*yXLG<|2(T&Rs#}Jke^3oXx^UgQU~kGc2iK>_p&; zMNK(URYOC)Up-FtDWs}RztuI)d3+HA@FT}SRP~R)M~`YP6$|`tPV|p#^q&fb%ljNv zizPdKl!D>iam)UfnOKlru8(SZ6I43H?ISoaZyx2)S}|&ji&ozGFN*q zu%5rv+db(1dQS!9TrL%N@S}7L6vbz{NkA>eEX?yJ?GmH2-9acj@t^cG>P+iJW{% zxE>To7<`r1OC(rQg3Mnm|Tkz;@JCQOvO6OHmo?rPa z;F`tVIJ6JF9gx3XQt*C$qkL&hdwbm#3;5gd=nx}HfrtLE{p#b9rk4q^)8$Jc=^lDk12)Tm zeteqD8Nxos-M)J-I?jW5+%Qef+ME62nfoKq%eY*xJC?u(XIZ(QpqRiE^23Cbl^diWu(vES_b&zw;lMv8S`nPu#i}b z23s%SNog)v`+2qem9y5nZ{ZC;S>{&*pCosu^$#>}W^lV%M!Rl2+tS$J%$_?F$1sA^ zkT^DtP{L0a!+S6Jxk0)<%bF?SRu>JcE+j$N+@~2HfS1c z4<}#wHPA;GkR|LyHe#}VZ8nh~K`hxJoqA0AR~e4mg*?7J%MzL4S01gV-X7!Yv1{Vj zs$*{E_lyY*_O_dS2@kdY*h&+2EMwC&pg+yS;$Z$Dq5-SJtETO4X(6~$=tAN#@LH`a zMxs4e^>3dXIouMZ|Lw{7M}F~NpPc>f*C-;7`p}nuFDUZwmqzDKimx!o&9Ek!ADj5A6XJvRxw56ZsfDS#DW{UD znWclglNI2;ZlWe?h(&!`y#w~xa1NGC(AFA+~@b-ayHV;iH>og7m~9woKfd8J^v z33_b}$zhM6U#z+5VFE-Z-g3_&-SzuLgjwV@KG2s*sr-ypW!k72W!Qf6xbUSxK-Ui` z^|WZ$my~M(X630kc`T0SR$zJ&2jyrs5h%`^@v!K3zz&+PI&UqBSx!k8yjx>AXRr#h zeI+-?vTQjE3g%r^B<+1D`ZO2|5aN+ZxF7HYZC|Y<+xuT7Ejv!bF*z|DpF1V0&nR2> z*@Bbu>2%VciI6S0IC)5DrVl)Qxmw#-6N`+YHVdRWPoER6y<3<;X^{WMR#NM>Nk%9; zMW6(>_zy7AP`3JunaODmaJ9U*(TluCXiVQ9picS!_utp}afRP+h=PwELvlAj$}OWM zxqEN>IJ&z!!`BSok2aWOB)+cAINH#-H2bln%}VH*mU-t7y;F@>X|Tli|5UAB#uZNY z<>3bdtP*YW^GxtBN+R99M3ZmYZ)8P&+Qb_g6}06UQ0kHyes&>nSdkx8H;NjcZw@ze zKu{=H(N%o_HBJ4n7^NL~rW4swOT2>ilFs0Z`4^#JN)ufV8TYr(mS2`dG3$L=A$!Io zDHO5J)Z3wl@uTjJzb+}eCecX;p@h*I(6Dl4R$uTW0F!f0@J}C_+JE>zOR%bfNmr+&?y81qH-i|loM~>`8azddsD~1 zj=@Om<_+`frhB1yG5{a=`&VC67`EIA=7R^;sDdMmD7Qn^JN>INyR@mfjpe^>%2-<2 zI@!A00-XLD^)@K&0SkhsR}bN|j{ez$m_ zbbEfHO+KVf_Hst50lJoU9Vv}ix~7#-3OL<($7*qSOaTa0eD(GP8n-~^Kr7Q}m0$aF z25KTBA8}7ptM$jY;VafZ555I{iX%RJ6HV1x1iO+2OLiv_V$VpDQY~9aE45t=&vrQ_ zzIggGiiv(T`qDIbgsb(t+lOPm3*t#P|F{VuLWeO zgrt5Z_08CR_8dk)V82-E%h{>=b&#qcBKw%)oee|KK6=~JH=#Xx;@}OwE`3$x0G1b5 zy!iJQNC?pI8n9!%W`^Zrk4Diy5rXV*qKJlp#3w?6)QnRKrQqBB9*~ASNBMqlqG!zQ)6?#DFwIbJgpU>kIhAX5*s;ZOq9?8Lg4ApDqLMa7_?5eQ>OV z3e3AEq}a_-z`p3(_X|qUSAS$$nt>jZqSOAOF#e6O4M5KM(?d6mFZ>n*y{f4vqB+4L zL?(M2zf>fN#)uSDA7B8PR>hp~ugx5Ie0{R#ZSF9CF*8|r?7B~`T9rzwk65(g?~ffX zyAk@K2TEQ$?7w`L+OZOx%hJsi00iT!DmD|P7Viy zzPN!yK{8&7=os}^LyRI+ak;Y&MTQY&-h>B%H&;6v8~QqYwIg!7{29u8X99@q>i}%b z8V$qo6&$2q@5@J9Z>}FTj}6uq14?mR{I#L!veW4^?I!5pblp6*K1~p+yg! zDn-D_jZ*pDe$}(Y415Zeq}+GH7O-o{yrNmZjvtFWhM9tN1b!w2}X=V>y;U6 zZ70d|?_a-yqOt*E3%_DZCjIFZKT^vsSzGk6!BtKbl7b^<1C%l)6nARA*5vya&t96K z-lzuR*!nt%L=xk0|L_C6UUUh95Vd6yhw|3gZl;WaDUco;1MZgo?1!lCQhc>$YU}rA ziCLCYU5TKS$hz)m8F4`v$S_N7b;TzU!&39r3;lr3XkO>1RYwta*iZN0`{hzw8Z`R8 z=0YQ-&rhZUp5b?ty{m^XVg?ytJg;_i`83i{*fpZnCn%8PG@CR~^xV;fgwfWsGdN-V zMoC-K_X|r5eF`a+x99ATxfMNH$p)Dex#k*^*TxYIGX=hY<7vkz>><5d z(rXb8O}?*)8SN@UW*=>=InJ7pIz#JMRYDdt{IP)9hx>+hZ%L~tJ#8mNs+^*mI7Qw` zC$+YWDiCxTwq?&AT&2OLe8U35t!i3NM_HKB4B9w!Q^iv_;#u9bwb#K7i^o{z+%ZiW zN+f6oW=fSa%(z;wjmUD|J&sdRYau^gbJQ2%(#GQ8oji|kJajK^wQT(ESaX2;!pw2% zK}Qeb^!T0gP&+{9>dY>41G5?QRu2oE+()1c$bb>6T_DeqmbHtuK>=O42;VZhCLg%l~AAd+;|7B;`ULP75F1Yvj`tYjt z=|$9|s*|vRCo@uKn?r!3j-Oj^OWYN+yvClAj_s-ad6+mATb8uoek!+Zd2a3cIi+gn zF!XUB#WUb{J5~mMu(+nUk#jc*R`jc64Ay63&{xTSl4auAT}x8%v4jriLfO6WLwDFK zgu*wTZOj#uP}RtMspJp|zYsny*?{=X$v(4XeBwyVp&x3}g%+<$$9ym|MDRl8YBNnI zcESHy)~}=Ap*O5OXrC+BH!a-lQE9A}LQ}l&XqQzIH+^$iN*g9Z_Rx6gRln~EI!Z&z ze(OQK8=o8ns%j-fUm%En8q^;4<%Kxk_P``zU{H-sL9A0n?Fg{JKdSWgX2vKRM7PfV6*pHfZkfm z6#8T(;sfNEy$lZ*StoJ*2{~B#+?NbGStULoLQWnnIx`xA^Yh%F*AZU1fyI6kje`*t zJE7k*XzfFvxKdKqO=kV!4~%-`tJo)vO!(3`gl$u+B-Qh7)P!xHM3gjq@I^#veoejAAlG0_CjcuK zvMOlH%{#l~vpXe*iK`I@T!$tVHcS!UJeknF@#Nc%@!PkTI-Kp0nZQ*A}!STDiZkNY8>8X3`--O91gC_(c!}9F0 zq{(9E>Dn&E9giRSoR{4-J?A^*(r zbxWWAaH&-Bt2nFgq>o>|{`++mhil*j&eI1E^#4E4n*Kr(PU-JNF9;Icc65S*zTesD z*ZA`};Q7~C`^EBF6(yKFk$nD>ex4-H-h+3sHB~OXXqGhNl}8+E)+EPxc)gQqkyIMq zQyOF8ayp5cHCa=AO@^vi!hWzS&hm*)x;APc)bTEFwP&QA67wV)r~w5y%(__x=ZIr#g( zLePh@7v)2$*c~!nx@+KT@tI36(31*vZk~aUww_Sq2R0)zZ{aUJvz4>fZFr|ybod_~Qi&cuJIyd>%;QUJfjxC>pOwt9Y@ zXQ$!wF)Q8T?m;i}>!OZQ*Mu$Kk}h?aSu1||*m0K|AxgW~bzOJB^~|QtB%K5`bE3aZ zR(ZI+M^(1vhnn$_JSv8f-OqSPFv%z{vGU0w8daH3va?6!RVi_U+ZrvBD*{i^iz2so1pI=VuW(RHw}VoVWbcb;6Ul z=(-}wJ_ai1RpNn1*>8HV?-bC&zPT-qPjbIW^Z>oDwnuaIdvAijSMd5oUH?sK0;J~a ztA2zk7h3j8DZ~BrY1#Zswh0&2$`j|IhL_*y7MvtzhedyWe)PIp3L?vC59a6k?)F8E zJ9YQNj`&NFAKoHe@pgD-e*5C|KfnBH!j@^M!{egFlIuU3Jdkd#ug4R()Z70*)V))5 zrQN>mT}djoZQH8Ywko!bifvbH+eyW?jf!pC{^nb2?{(Hb``xFl^R@O}d{^^gw%O** z|9O7B_c2BvN;E!pcu%okVZ6_$8y`fG>MH6KZ_R$CVx(Pe3!x&8$qJu2XAp;}H#RCj ztGy_&%_8w34Q#QzG{TCufZ>b-K@IxqU66SsmbwsyC_%$-GE-io z(8t#0t+~07pEiXMC{YC(wqygN-(hQRr!mhoH9>~$E`7r&teLSd;SXo#INO>%8ZOB; z>Z$3V*Arv9n#FCJ^hF%f5W-r1G=Kb{$*ZUYAj^i~kun(3eQD?dIVFoh&e_7qpY7bl zsK6{>Z&<3|sc*J{c%0fQ;G0&~vXC{G-kna56bV~jo&={3z9na-6U#w7 z&1k=K-|Onbvf^oFGczwgyPi^RLsWUwnWc69PLqI(KUTqNYcfug8y}(BRpnF{wu|Cy zaX0Wevij(MqiMx5ODsHvtlnt4XWot6s-X``u5c-qIp=Bfv(B__B0!uH4Z89;qld@; z%AWDscz?-OJYfKCE9cfI(>2v;;pxUl?|if$pw)RuQ%&!+2XR=P>q&fDnAL`e=2~;r zn%ZK@Yp9M|@iQftYNi~N;(Q6PA1_g>fuEqGj%%zhf@@_Vw?x`u-eky>Bb-}Em^ zEn8z7#}_onjjVwm-IbN!mvFpFti}xkX~A$vX{1!O_;n?}J2a8hTKN^qBBL=}3+YAiGw9LuA*)Y?&W|WaMVhj1{m?AxBM)mK!5p6?pl!r1~AJ%*^ZQ zuiEbufLz#O|D$XX|77i87+~*tPS=m>9;LC z50|s}o>VUf1eA+i>XHPd{McA?Jhe`>!HwAryU*EkFd2Qzk!$7%HPEz^LM_J|>JFMV z6QC`hWQZ2Mfj3|(wO|NbxD~v4dPhHCef8R7$s|_t7$oU1ALBQ}B-y4Xb+u6ew?joH zJ3K+>VWqi>4|L^7C|E0RO*NujwFNcBQUlGU=-5hkpW&X3&;$HJxoK=k&~(0 zILr%T@nX#CRTLvB#R!9*&+>kr^IDS<%U}Db3i@NA=zYb=MzZ{EupNqz;up!KLzd_r zDu!O6Jq7s3^xw{YAn*;zD1Wt5E1^I_l($dMjttLc1xozFXk0Hy?T`eL8JoRoD}5I7 z24h;}!NgHDMk|LWfgq#;7JIW*;l#dPq5|&6nj#Q}NtLlR0mU3j_CZD75heXb(CWtB zUn)wLr9_-u~%0tJv%yVO7EVy*d~*+I9SSNWK&gV0$<&RJleK#LZ{92?lN zU=l9$7*w6CdF4g>dLW$6VS{&j-fZg6P+Kp&pr4XAk{Si)HJXG_J+HDF==Sh@7Xp_n z_n#V#zsont{v^bUcZp>FF>8KSO+puYZ{qW}H=#YYa!8&5a;Ua%|85TTr>6JppNgve zzbdNOKZ**ihe%JVo>qAA#H`tc;U|k6BYmUD2@$DelIBGih}B1dOl`P|E^35GEz9fm z(b6n4oZy(_VXgZdAc?}tGH-cpdAsgYO&$I#i4q1RQ7v!&LeE13@IL9!3w7v~vG(2A z?R8qzz+gxWj(shjp+ujJi_p1q0^3oChUo6jI$Jpq-e9jfN8lK#+d#X+zdSU$_)a*7 z9rgqJtfzxRnpV}pHe5x|^w=d+zAlLh$6e_?>km#auGIV^it2Op)VnrXR=pEU9gQr3j%NVae=l%%h)?%XeOI?{fXry+_863#9*_`N0?!|KIn1Qny8X-{j*mc1fD^; z&k<9J)ucay%H}UYbvLxd);Qksw(9QMq;2yGV%&@ghvM~3ow9tysnkk!cSIhyYH)Y^ z$i*zzV{82C4u+1P>~>CV7FGEFqJaV z>#lr(tv1A#C zr)1h;e}mqcuNtCEoAt0%TJ3qutkE_Am7Hn`j=^sM2PNI9sYuOgRg*pmb=Y_MrIm98 zqT&YQ6NVz`YI%?;#C{ANiFzj|xJ#jX{8YdYq5+n`GZedVo&||s0N=ad?4o*{@2iq= zTmoNlWjRo@JXoGLSA)nHL6Av%V3CIGp&cmEm!v~j>pM8yvYJevdb1tG(Gu%`2>MC_ zb?rx>&Aaq#LsQHOsXAyPUR`veJc_3Hwyz&6?{foMCtM_uplv>8+S5@}EfXG1w?`GZ@&t23`*ALi z_GNTur36mI4cq#jCoU=3SpPZ%bLqoFu!-rC{@kV1s4)YGy9=Z9BhrhMZxRV9j$C zql|250-D3TsHp5!C5Pi;_Ag!IpErIwICI#SUy$O;n?_0uZwNK; zD=)xWE07<)<=tzPB4~G5A6YLJE=ak9dkq$fqC+RrDQjR$2)o=nr?vNBS+o~i7^I%j zwKqs`_?I^YIZJ4+wUKcn%{B=?DZ+-`E+{zG7I!>i}!~(cD0QNUTa&!3Ux>2@g7pwurQ^ z#@Jbm99}3f`K2!ShO0-}=`@R*t-$5d`muzp&$#Jr=dO)s|A!%!C(#5pmz!zN3(Qaj zQU@lW6FKX%U%RgRz`uCoEvhL18LhgdvZETHoND$}b*erGI!uhPAr+6=FC}D}gsh}Z)pym|E#n5eFtkBuxhrMiL&=}wH zp@gF;0oRckTAeXzS5Os_QM%i9E~{XZQc-AV;9Y|WHuPHgL3Tc4L;5&M;duSH@dt8(?HONBG~Gyv z_hS$H+-@OuJT}sjtdnnog5AXi&A1VVH4jEj+;F7qHU3DYk@OVIrIlYzq@o(z5 znR()SQpv=!JTbl$mB110_oyG+xXYKr0kfnC+!e=9eIu*6L8;_bM)k4>Nlk5CNd1Cql=I@ub0p_PHuYOK z+4P~f!#vjHq^Y->R0@BxXAv*Ef$u~&^)LI4i-Nkq0% zF6l&%35)W5#;ojU#i2lYFdy>h8%9)d{{FfVpb~@U1?`I7t8JO8eBp(sY%Acg;$HvK z?{^wQTLaE!BMkJ(!m<7{=pEtvik zT_e<>#30BycIkjQbnpZ0r8UOyP7U*T%CIJfPv>$kUgc>XuVWM})o6cf*bNATfO z_s&dht=8N3xlW>0k>I2sUjne*&}o&xs=c# ztSR$LKFwAiDpOtn;iK`zFEjKS|G8+TrOMSgG~@nrOW9$bRu-iWY^Gy;FK$I3 zoa{Up&XesRi@K;{-wUu?<1l8*>uZ4gkf3a22y90MynK5+{rCEGJrC zQK5r=PaBm~o<~+z5=1p3r-Q1YS{?q-r4)o|rQgc`Nvr)%n?Zjg#2Ud}JBm)}ObZcz z5sx9vaj$mZiP8i0iV;r%Zz7M(mkU^-(?=@nPO}fh?q_R+MP{o#e~6kGAHWjlN20#7 zzN@{rLKdQsCIZH?^ONFKZmk}UHn&UvYBP#3D09Y3b_x-didILCRqh2j1BZTRZm;N` zGR6~Bfm&~_Bih%&E0iVkM>OH|07R4a(lC4XgX9@yQ{$3jRGU6LMAHCo1YqNf688ke zVNxT({DhVPytNH&a9FOJbHIX2nitcd%&RD)ImDPIBmqW+d;DF$lfS|^U z70+-&t!K@cPVT|%ThoXMMJz{HxCEL! z3;{NeFbuna#nhdH98e@D_f;2qmSsTAY$Z>IJzn-$Wi1=ATc+&dc(ajnTTeMyj9bff za86tv;euWu=P*e;GI%OYbo?MTod8ZZU91{MW1v0xs%@XXy7D?oq6VwEuFdHqv7wLR zhzpQR;vf8?k9gcQ377Il0vUbq>I|doPWJ&j@BG6BjR|U&4;RcM*2i0k#wINx4L}Vv zdjlOxc8Kmq{zh>IonEhtL$)lhvO91_w3z@NuXaGTei|Sk7w`L zkQ>*p5ed^DCF$EViO1qHWxn%9@YB#Q9*}rS zC78x*)MO(7Y1=r*ovG|p?Eu#8_@N}oz(xl4d4#98LWkFdcWy6Fm~ZKPR}H{QoALWX zKN5Gk{p&a8o!aNwcV%o@6;z`aBy z6bI4k0+?D0TWm#$KvvFy+lk#KEvKS!naoLx-3S;8!i)^a)wyYJMX+v=KuZqwXFs_v zM$8|L?a+(!ZgMXm$8_ebfU5D$*x0mrA5|Lxm%Js5%MxUlvy|cKcIM~C8`Wma2Ua?U zRrh+Xc(CDH4N5p)A>Ljq5$-Y2nQVGdPXQ99n{^GHih$z7LUUjjN*%Ld7o(;JD>&}h zrt!omK*qFF6KB5B5980y$V_);=+6ek%=Y~tB`n{uh;u0N$K76#WaCzX(fA@ESZ8}F zf9FZXpu{ptu!?vXF{;iNxo>eipzCaVvW!HwJSkAWboYMYUD8hn_$EbM*A;WLN2Ql^ zkGr|FGlD9w9gv?!G^P1U);Js03!-rD@tf`)KFL4=R_=Djo#eng(s0~v7<|8|mOlKb4cwHtA8g|NO6S8s75B z`0h&9Wq0)>#21yn6Bp)q`7z3^7q8G{4EiqI^mw| zmUg}|sKY~R!*_zdNx^e!1|6K_$f34BX3Yat@E~L(n=~cut|sXVYt zPVVk~$X$FTMm zV^(Yo$reAbsXliMx&%_D%Qr?8Fbdv$M7UfdQFUJ=fL6}rFu-uT2HqvP;%Y5R%lr~6 zKgp9(N5*?(C91_;WP`QEFp|k|MvN!XPN1OW3cW^l0o;EvCvIg1N-ZZHQ6h zn!nGFhs<3(3(ulcAl@oU^ZZ(k@JaYCE_jx!s9h6W6Pcx-YTD76i^Zcf{}N0qrL?y( zg()L+S&YJLS2_|0y@!0}Me)+Ec~kEV(Sa9pb;ynNu`+)`XPgCM6Hjx*5k)i_x9arr z+L}0Dm;2}|i0)x1>d9yM5t~`uk3H-YeHLbX)bWc6^PY8}`2=%RJgDn##Hb`a_`oT1 z2L1V_cOR>*5Kw2HKtt@R^p>KBMufi+6in#s7SaWptX%?Ye7QsNsw;`<=S*fX#nkp5 zW)SUxJkXs~2xC1VUsVxiaZK#72lJ}Cz*B~)sbT)Rux$O8Bc!elx5c1a2IyJEZoD80 z|B(wc(x>3^d%~>8#_{6szRtCl_9OnS=Pvc9%vsH91Zjwe4h$W)Al%4W$xY;O1V{9* z)zEG3J(Uz%lIG$$E;h9kywS55!hiwOUmMJxK7f+WJzXBKOHu+1wo-tL~PcnIQkKVM`K7d6ja+JJ zF1NHOrwM&LF*?TWv8_-8lrnC)pBCc03`!?mPlr6FT(E~=P1~#kl=g!*JOyQtw#Ilg{ilw(BA)OIYQm8+RzuZ5rEZZCG3qjh@8leV?np^@jP_I9Mk z!z-AKIz>Zhiqf&lIJM?ef%;9v5m$kS8(3wx3aquhSMaOS!|muz^?6AX0zM00%%k1U zYfr856$|A%NQ+`$E(W{J3O~yCOt#)xR2i=ZI^E6swlc&CwEN(d$V=@;@_G|pLzH5> zQYeGxx93Hd>^cvr(wkgsuS?R3?k;~Lx*N-ym;Jf2E3RgfD6pGB+h+|60d9^;yH``X zto|MwHqm{zQk1hI!E(JZlXR|nL(nn4_weB=&4~wusF9?JXf&&PB4r%gLRsog*0FpM z+NI(!{>Ac!aIe*;=_^|^#ux+d)bTouGAKl4SF*i6!B!cNut}00=TeOu;5FeeDB{($ z6hq63NcYw%jE=C%$Uz~Q8KYH6*8q<7aa+r?~-P`rmmCB z!Z;_zK-u*#T*xR3$Dj>bfh#}U%~dr4TRyK&jX!@}EI>O{TTh%E)$wRV7*{V_U8|IC z@bbRT;?>vxRwhsX9O*-JRTES;?;K$+kQ|XqMt?*sJrJ`d4^VfvbuEOiMp>;PJg(py z7!}9IjPVAmt7f!swb-PX_$4L@hI}A7$ZJGj%Y6$!Th8{wl`4IMm3F5~dmd(~0%jLK{5 z3UzjGz6FF32M&K_nu%A#W7@#P(sx*Ax3qn_B&Qgp$^KbTt8{BqWp^2;J%_k^LfR zgNGeDz(GKglX(~+@=OtCzKTy0haDtE7;YoLyDV28Wi+Q90NBxRXUwtj<}F7yFNLkq zbn9zyQ{+_PjUU4?Cjze~K#>K>k7s~694LZaCt5gU%Z=m>fiwaJ zaxt{X=M!~@FA!fMlt;M~dI2GcZ5rm?O3&gZ$CgS+W==#ueC?Gps&@L7vJXXzDsKz; z8N~yCl=o7NyAofp8l2>f>qb*J+(XVfMjj`IIm`)4`wFj?? zo)`yMgn8SgP=c3?aX-+s9&*_dI;3Xbs$&#@&!zYLavvwc3b+Eo3iSJ8DsuBA)CPsw zeqY;JX&xm1_(`>rq^j|wl=}=8`Y+f~t+>U3TUGBO{{wb$Z%8w*<|ylRvR%>KXAvD^ z5qMv9-qJ%h%iHgvdII$}rM42)mU<`vm%jC&D7Xk*wboQ8t&R2;#sqzJKP3CPv&$jH zFD!9`H)wrxe3lQZ?+KhiVL~HD^hygwAw!vJBCVB!4L>D+P`t>IVgMC9<;wMH_RRYv z+_~9VE2c+Lr+*y?DJ&SbBsM0o=Yb(g5HCPEK=AVdPD-Z_pxPalvgo5*AVa!;o0^?uSFyCv{r%971CVez_!$usGN&y znzJW2poyE^x^wLaa#Zvk8mP)EtJCPo`c}?mD-vbv@P!=}4rpju?s`wJkJ1QlhSW4L zNhBm{<_Cy2OOvrv?b}xK{)OmwN}foAhEzHNH)ry(8@S0t9NgNWkeM-DmmXDSjsec8 z09)E;@}!r@Chzt~&nEjdhsISl4i%lHa+vHzre#DzsB(56@{%`YCW4x(W z&aN4Vt63Y!HZJy-`n}|h#!pxtT(b4)bGU~YDxR(*ayQ@#RxGnX2XJEnseroVTNI^@ z#wh##IFpry&mrD>jK5}qjzA%55PgUFYHY>+X5$R%@<$nSC0k;TUPFsNX2L~ zh(}Il1db$|aJyM$WU*FTlWAX@R)#hdU9a9aRt#a!h`Y+x7jwG7h7+;i2Ab{XK#7J< z>Je3|%+kt#+`km9s=(Sdnz8*h_Png+$z^@T$|nhsQb8Cyoa*X)&Dhk0YJj&s^`N%_ zeLy8~QP2utrO#Fk+U#MqX{PFGD`a2%2#UyVOc&mD)(%I@@NU#rbA_%2^ z@(4{tZWV%Tkf|UqO~EP+LSAb3GTpqCjxRR7f<8A3S*sz(tZPnL99s%Z;V(nVxV)8> z?qhfuYYH_aRIpc4DhdZV1-4YEfLjfu9!36J&H=|HLIW{xv>J)AwbYy%S$eZQB9^K- z>bjM18kdkwn%8PacAXdxL(2u>?8}*NG#=+B5!I6SeYrgxRWK+GCkhd?~7us;z=2m1%GqVR1svx%**QqN!H2zRB+v3HfAO0I1B4 zRod72NMfG}pc0}ND#CFD&<^7}f;jCMdq9)Ox9viQ84m#MOrt~oC)%A>$&wG%FaPGm>sU;ypXUE5TU8f2VTEgCeU^sRpOR{ksP2LGbnn+MtFL4oMSZ{7g#z>y85c`cd2Y&eFC3zerltj27{If!6$PN||G;LQR-=49FeozJ!=>2O8l25|0B7i*IP^w%(=VzaxwwWrs4b zVYf%3JY8kN^I4G)d%dy)XTV+(Pont znw#$=gi_k$9XC%10vNoaEk#67^x@*A*P08*%AHcrKi)2x2*i%4j=kqSFP@kW6zmxuM{TsRI*9#yv9F#LJoD5B>3W27?Y1wVQdqvk7tL zgZ+QJow2ujKmcWt-jhGT+cjPW$nCwJQ+s?3X2M3BO5rCV3G=GY5dO>CF=6gWD5->Q%pYcf64&Vsjq7?m_+H6MDSb}d|NKJgDZ+75C2vS!QwQqgJ-Pk6o!A1rE zz9GXjsbWqen7OBU zeS>Dp{OA+bn3*(u95yX&h^mtC`QNRJpvAM+M{3(c97)AO&aU-CsiJ7CTql3rs2{q zy@*ioZD?f5dSWMuMWi`qZTZ=#o}#=qUgvIaik|u<)QlM=4aloO6!$_C;-k%Kqe09_ zZ&@XukXCm`C6_SNf+6=|a?F-gm&I*lf1e%xg({&iUB@^PI86Ifj7wPu$5Dp|dz3Vl5sgs#}XBwe{I1y)U-F>%{(7+}TRrFI*q1 zJ>(=77V$2>$>BwJw;|Jd2I%X>N%NgI|uQAASqCE0e)Z8Z}94tr{Es(kLEv*1AgZ#vccR zy6hCy%Xp(LK0V4_W(=0q(Kz{TJAU0bn;Pj}nIxgm;sV@Ux#(wjYpV`nVv*4^cGySJ)x_JFu&G{Qm}a_5TVx z;{Sx*?!Nf{5q9Pv6Vp>*LNW`+b2xXfGAKpEUMX`F&>h*#(mjQMt-LXEzaI7158uO! zZwT+)`FnN4&6X?|%i9p|t?bed1jyBK#8^7UihL3(E3(u#h@rI4I1`?{H{OtWrb5|~ zJ{?|!`r?Mv;>ygU3zox4)su3iZu&1)g^H^=c6(%%G}387ss9yZ-U5Qmy05|sB!D233=m|l{3q;4{!g$=`oDqQoxYLrHp+7gTB=F< zmCjaQjmmS)=IiZ9N5j5SxhDpGjvWc_WNS7G0{okN8n6bRC4AVW1A5`13a^eD{x51_YWubX09dxI|)N zCxAe+#cHA?B09^^i5s`0qjAj>Q7>Zoq^k*2v!txfxiY6CFU!6YS{)j>vym#et>J!j z4a;&pO{19fC$ul;g>Z$1oqPL64<}{!u7R4uyn3acT;_acQ{Esur|;_ZgAzCA(*F-( zcMb}5cyDWS8UkMGxZ4WSZ=J8UTkQOLCgwWcs3b&O;MjlmpW<2)M@$k!q zmfO`E=lmDgL#*!ng{Hh7$etu@h{0O(F>tKmj}-`NHI|9_R(G$t^Ri%eO&07ErcRgT ztmzkr0EM`oLaNaH+r!N&zQe~P!E+%^x66UbZW|c~^a0lIw>Rc0PiR%@yRpsJnmSTF zk(~s18LBDo(CBh+dhFQwC+*6R&PusTH7a#CI@e}BwQ^nDwZ`SokA(|HN=f4efT6>y3HO;sake)H68Z-Vz?Jd0$91aO`N(L2VLFQO3 zbRVI%+a;xnlrhZX3MP&MFQYOK2&0U`m5N1~UjUQ!(K9R3l2FDtOD@S7<`G#oqJo*U zl=vzIG;xSBr5+rL`>ftgR=GX-HHfJrCpKcbS+;uIg1UAM*SqelYjWLH z?6l^rA)U69az1^iSa&%jxv{LaEyT7d60?9d)i7qVD)LyP?s^QNBn8AreY0qJu0+9p!0yXQC8f7*mHdYbV zd!Rk=g*t#K`eW^k{=?ekB-$#E!EoE&qaZQgzMIBcfLWuy}hu#F#_6oa1g$HLHb8cfuXI9 zjj`chjRcN=m1nFa0~!g~P=dSQmwdJY4M4%B$x7Rh+j8jez(_0?i&jJQDa^v6!^HEX zMoR~7LCrNHqS(lzwF|obDA5@3(`juh#ZX06j`Mc>&vA@t3`9pNv`!{ceJ*c z>8<3%Unz{utB0msZN*{|^w+0V-nAl%JlV1I|J|!qk<>hWuUKzUL^ZE-{|iSMJzsYc z+q%EPUu!WKj6JvQl&i;51;hHj9hbi*H)~3T@N!SQFE=*1j2a;@{fq{u6iE_{ng492 ztnE4dP~e1=aX|kJ`HV4nE07c>-d7YdOgr23nh&lu#$g0-@sULDljv`|>s84#>Ocjm zByANrV`|A6DDcEtG|_wbAz61#=ie5;=}6qY835O9Zi*?&e7*#*p)*&~gTYx;Co%lI zBp^N%1rEA-#J=KpBMXmk%vYN*QBc(yg*mun%D_pkQvzf;**5c>(U{lXu~2 z{zNgz?INqw&XQYv_TDk(3#5#07q^HHp76^UrfhV`s?jBZp~tY<@Or`=3VA8EA^kP+ zxZBY#4FOFk6MN+B5%ln6B$5gd)eMT)MCbUKUH>lss~iVz(aRV4klar3(RJd1-f=l( zc5uZF6b}|iMpK%8fjFe>V*3n-8%RY{Xk%OV8q0Ad?a`AjN}Dx{^t|+m8m!gqNGFj8 zs=_%HUWi_SL(WL`i8r#Ax>G*uC#D?+=8MyTLigxy z6(!A}B9@;lLOM3>8}Gfr)k|99j7h8R%5W>F+dc@@)#t@6H`&S>*i9rLQwGG&Z{m5b zJ}W;ypxAvQ%_fZ()jAYDS1yGw7gT0oI%{n_1lYen_H0Hli<_CU%Y08@X5ZqF%E$3A z|0;tW#Q4x>hxKHCK+f64ekeU(d+c&c4(Vp<_EXpu`?|-qZFlLR2F0TV|JFQE{Y>f1 zn7bQtLQC3Us*n>}8*p<|Gvwk8IQta0Wv9?h0@Klm=}8WKcdE*9REU6B=iZW2DHUt$_K zI&zLodX!b6~jHS)x3X`vW^A*>o>!OX#oz2F~itpzPY$WmAqVw|IsoUGGLI8I( znC|^pSwlza5IA$c?&Zgm!)bZ(g7CI8-}r9SAI#yq#fF5j;8dY3pc+T9a&W zCG)()62@*DTMt5QL3tW4FOrG&J6BAVgU@ASPUCvx&4kh%+Xut1osx3Xh#$7=B^G#> z+Vw7bsGTn8S5>8%xM!oAU%wlul^3z0VwWZpiQX)Gno>I0Rs(l&4p~2SISP8dD2bZBf zVHj=Vv(0g{pmu(>-pOrsCRO54a!rQP*NmX}I!{EAbG>feaI4B*$xi3)^U4=4eGy$r zXx(=DLYS5iz3d$-2bVJg>QF=NVv>cdM){8ut z=ss`zfpF?wxro#XgA8C_9U#qsK(`R6a~w#O{FOynI{CrHs{MwFzFCS&5=B!02NeO! zi;~rVg-i90`9q0pjy6IV&SNSxsOaj7%)uYUF{(?#u*k9IWH1ucDuNI(7L%dBh?69+!_<;ffn-E(;eR%L>bofY0L|_=Jd8tc?#DV} z$uU<)Aka$#7QInUP8q9+$$tJBa;~CQ3twf2L`4qWJ*ov1J_iFqs6@aSNMtm?if($9 zr<=ABB7!*hC>bGr`?%s2ss}36;fwa|Nj~_3;)dZTDH^3niz<{CSo*#tdX@%hs_IVZ zrQG_*7JQ}p9koZ=`j9=JOwX%H$MvoQEORL~`_t}#`L`j!23kZc@})Kt%iclQI%e-5 z?M~6Xj5GPsZP|bO9N0(&TATqIs7e5*wEpHf_;ZXsBYq+}odG52G4Ta1=@AYCf=^*M zls|?jsx>8**B4y6CfwSHi#e>U)5BVv9MgEt8GNxbdx~dBhcDyl%SOqpbU4mV5IhiS zlvOIn-qovAlp;huVIFA!3QLG-*>>N-X>tQ$H3(><<`K@rU?la_oQxdj3^b>rzS_4^ z4#o#HTy7pJNsVEEnPJE9H1|ZYkaCRS%ZQ*y0=#p4ZlHiV7ztr1)e_!_UcLDKz z<^8LIZiyhDE%G1WhZPEnW0N#A4y6xN?Zcmj#0V6PW#}RYe)CMZj zhJ)tX0879y8zaCs@_4Azxtd@-*Z~_rrCBDszCi`CZ6Xsbx?shi?6-R1gK}(rP_8h# zJsboU#SInT*Nw-Zo!Y|7sdvAcK!7DaQwgdc*l4azjPqiSK!!PqYfV@O@dLJ z#>prFgI}%IWeaYH`(3vzc$mX(qV?Ko<31XuGaL)$F)J|;_N(h;>r_Eu_9RQO51bFm zzyB~0k^y<4{TUmA{A9>JFlvvO@hlN`JY$k(>)ND)527@q3`cr2UHJ{1x0H*+G%8NR z*+gHz^X%KgG*=Yi4XT&nWEwTqhn(t7Pi^aW%Z^4>ISVhRO}@S_xd^DNS_|7yd1cai zv4I#D(`EfCm|!zZ@1WcQ&F57H8BoPkz&d}8$6Qkz2w*%=w%twXG0lf_viDvc={L_) ztoJu$1E{deifn9Ah4tD9#fTZPVN^D(ANa!Wnr>|p95@_uJ4EqUg+I>;e_mjs>;E>7Jgw9iJMDeV0E?Nn$R*po@C{%$dN1!DP zw}+YoUaX<3H8Yiw8FPOOJIQcT{uHg~tiQ981zC@f)d9QSX*|dAGz!^hE;fK2ls0E} zacf)|z#GvXj`}ki-o2cTvM-@vYPhSLfBW8uV(G*>1x!Zq-%rM$vj_kB-Wc`(hadw& zVS@5eEKoqdz5Rm6&_mT2Yi$zx*K1?gs7Mms+QqKob$!>d+QkL=G*gWT6_p$GV-y5# zyTOctuW;+R)F068z96abURe_}wsQ zbL~RCxJi-#mnRb2t;hvMikXu{zm_~}a~T`%m*K>{#1%7M`5vEIHnpT{5$yQ;6@Fu; zl}r2{Hi||Cm0pfvb_A6VAW?ms?vfJuSW}(G`?2iq?UdA2_W)o$|=EO*b3 zhhk=l6%?E|66T5e>1H+fo%3JFwkAs^zcW)IV@0Wo9?U#l^}71<(NND>V0Tf6|{QGC~lz=L-Js1 zEfHGGAf7trq%-2Z$PYUAjWtuA6(AJ0#jX&N3D@?Pi(niBM~AzRtV5HIyqQYrlJM_a z$i+6o$1t+aswQ@Lcz&$#q99v|6wZ#FAB0vq|Fk9H0;4_VA3wcL9xXg7bI0d>_MKc7EBv|-o2I|$v<6_OzF~V3V zT7NL4xZsbv-TO}!`wAC`KOkF$7N8sQt<>NxL#@*~bN82_q8q0{9>m2O;Za;IVry@Cr z5-nRYMg;$!;r-ahbNvOsbgy)4RT&dGjs))Xbs4j{ZT|Hr5jPKV`Tls5C1W%5rQo*D z+evBRwIf2Rdk#GM-EmgVe%yTPkfW?B4)*}HVk|GHU;yT(RVZe=46PtmL~Yv1B2i#I5}Woqe;8wLZ6b#{ zUtL$ql6AvsyLn6N;A~@D;3%Afs)IO1mA(w5pZ{Wt+4q1^)SsoE@eIpb2MLqjs4S5 z#6m?S{2by6O3cL73%8jn9dCgB3_94=YJ1!yP#t0XGiw5jiZ2(*gIzGkuUiQizshov zoo9M?@*SCeP7|)#EFC!!7wm$)CB7Dw*$Bq%It57zA_<#g$@*I)BsZ5tIH(7sdinJ{ zyrE0d4(X^*pD47zAo=vYiA`QFGiA|;p--`BC;m9&sXl2Js2`>rg;so~Evl!mTbVwo zJCsYFkiS91iZ#|!Ar+NKOv1wwqo_s-SIjuH54a6y)43^(xn!Kjp9(~x)Ahl$^chF{@;#yb#5nR_pJdSL7Q?&8eD>K^T7sFr)on1KlLc)N?u ztdbS6k+z>OU2o|7uPDEbC;%>)NgopbTu1pK}pxltx8` zg`FsWP^*-`Oq+NV!%0kA)qH6REAoESCzmR3fS=nqgMMp1%ow|$$i3{YV^Fn76!1h9 zBv3AAS3GBW@>i@C^Ah?du@auLRfb?RBps1uUGn*tn}<%UyXJ6wGr}V36~6YguC+_ z=i>U**3qpV-+-{sZukR`_GG}^*sdprfV#IORz6J=lldV|In*A&qJEM`=zQ;_Z@Jd- zC{mA}JEYh6Euvlr%$gt^T2m${5(#M_l3K%UV}P_@jX<&CVQ<-&c-{`Ap|WNV!8Qwr z%eUdvY0=LXz^Rjj2$-CWW$^c#Wa1r=)*LJ}Yf2_`{6TS09Ft*tn;+EztvtJJm^ z^|lVRt*C7sI;gd+cCcct)%IFNJD{yL-`eLS5GL{7@BP2uz4wp)&~S1xoPE}Q_VcW@ z_F7L5V6GbRQ0BPh!X&BTrLAdePW{oJ{py*-wQmhvV9>mpa#<$))BT6En9nafezfrN zLuv8j=KefazbJLJeC@VL%R_Z(&-{=y^9%Ed@#+aX4lcWt+xqb%jVEgs{^0Y`;ozel z%Y#1^?M@w+eQIAE|LnfQk+0_j%nE$x((LG48*i@|oqqa>hm#&kGmi6~7+jy_b0swQ zd++>V4-Gy1{J!Pix&Oww@qxep+t#K{_bO~hCw{X7+9o}`V(Lh3c<2+BrRB{UKA71T zzl?cd@1N_g>gK$(>$?6*zvf2{TnZYOb?lR4n%h@?Oeq;%IokHh(ly^?nP2Um!)ZoX zruu-Po#~##QOPnJvS!ZtTGH>aplh+*cSh|gJ{mM+;>{4|7t*gxH+F=Fde2dx_)~9m2VEb8`CmaHR>GpGgi>E?4h5{(SUEd+h$h?(05(|EqrUpUryxgCBpHwtCv!neP)1 z|MA31a>e+y&wS~#f76ZqY1fmc3*U(oarb_F{RAXZ0fDx5G&7rqG^!lLMeBzUO*-@{R?>_g}xJ^$e zcgS8XTlT6Oi}!oxfIHsf7C-d+NWTS>F5X)f_|dx=8OmQqY#2CZuhsnY*z?OLZW_8^ z{RbAd+4y1drgJav-g9<>(Yj*;WBpF?_ioR}%a(h5W_rG?@U60uZ*9K*LfyyRSH@$X zYTeSmXB(pWR)7te!GG{r{TueYJLd_VXo%Y@KI)fJzgE0_{@a<7Ws$}5uisdHR z_kZ2*_QGqt6T?-~kCJ{94_o|G&|@_thmW3pXQ+Aq*ry*6)XskQ%e0p{Q^Hh5rKi4+ zzN5KN=RV75$kv5C{ZUr>kx}zr^sd=dkn!lwAD&u%H)PtQ7cFm9Y&@*lw5j#TmB!%r z47)w2h8|HTYnwApk93oqxHTo`y-9&Sv6YMBCSQF1>)jKL2MnS*Yqx_EK=goId6>n$=dnBUBJmvU|4;8mB z-A+<|@}X?xa>ROd`il5iapvlEF^7|UQoM%{VVC@_hG$$_{mLG{PpilM_USfBY5xzT zP}E{nMd=e8N_g8UCvp#Q*9?mv!jq0G7?v>X!!Ify@mX=?yA#iz7PL$`aP!RXx2Ju+ zYV5v(a{2nBY2UwS%v?J0&$XL}r4X>Vb9;i{XH~wt zAMG}~!4?}c|1hkEp&%&-L#=dOnbl@4$tfuo=UNQKR!s#$n@aOT9 zhnAC4KD+rq^O&{YZ2Y7`uy(gwy*h3n@s+`G3)uzKYkyOG3udfQr?}vUOFFp z__gcnzsypc%8m?O@$~$l6h`co8=nv8_vBOWYz*7FC`5Mcz~!xDFBZT2(9Q3CU)`D* zC0X{;#xJgo;6FQRobW^a=D^q1%2tk^UjF9LpUP&MZGV--wQ6@Hm_bv`Hbk;9LEw07UIsFk7YxAQ9YKELA|_qXQ!cC_kzw|n*GppENB z1DN!OJQsm$#e8jPXzb68C=Dh|gvV zBhF+@3p&!|)4+des*>MYbmYMI_r^p;zZI82mNbX19kg`L)_g(IvyF2Zd;W3wM3SW> zD(<>*>Z(tyhvx3MGjGZAtqTJ$B<~xV?O!l0DP1^q#gf&3ty7%&<{y7Q`Qy8#i+!U; zx`iq0UX@k$`=;nstK0SRz~N6muleD#@H+ETn;-M}d&3>QyQfdc)5_zThxMmV9~vxp z^vn;U73n!?OMGICzBxC~y!rD8{=(`caiQ?pJZ7k6x9YX|fyJ<{ACE4XbuD1kLr(^7 zwhaDg#2(|5FT7O#Se)`7!MlV1BnN)9I3#n_-F1OMUu9LSnzAdR)i`jn#^>j=k9sbB z_^nUN&&(_SP&4E6wc`px${t&-tJ|!E+Hqq(UijI@A6K+qdcD8f>oZ4cuFOr}b2@kT z#`hoF^px`KjIuw{-fVcK)c1P%jV_Z8U&vUCr#{c?x3Kx-2U(00 zCyq?s@P1(OWpCbY>-6MTpE=aO?uCXY_bvOj-{#*p?R+OB;*jrZ@0|SKN50d)qVew5 znD>8HSrzfQ!y5j+q9O9o;&1lN8n-KZnEuK4)}-Gq`91f;@==p#$hXY8wmbFB#>+py zv|;p@`5tU}`4c~_$r^KR$$=5c^H(4L>W1a_rFZ1bUd`6B%WJ+ZiGKI#^Cfd`=h)u9 za$F2n)78DZ;1}}6Bk;`qP?z%Y_MtAGc8))Qy3pDLP&UjJ-&#m3kF z+%x#MJteti`y=!A$v;>6hhF+@(de0$^o7M|RGb>~_n&yLx$C>-{BuuyH|>!N?uNhZ z4j=q}oM6S-FUDuxV2%CtkLw37dUa<8{PzM@_htr^L$}WioHhXecQ%8y(*JNX7_}wV zw>LAOT(^B@a33@17xf=*1`O_y@x7S=<+KsNna09)UXo`X#3jlZmR_VV{XI26(EbklPF zQB&)uo96DC{A|VV%ce{U9=JZ~(*s{zD{ye}moOL47(KmpPRM7CW#_Nny-;n^?KqPs zs$a@zSeQQi&i?dER|hSuJHT9VOB8>=-TjIBosSyEJ)(ahq#t9JDi^8xH=85;<0`JESC|6{k8FXg`4sP)4&S!kKubXtNWQFIv$fv(s|NgVPKHK%~ zy$KoN{P}Aie>e9huY+@^#O5e7Wv3#;Lnl1Ft?unbC(qohSt+ua$m&e8TXDUoqSqJ)^Z`>`x_MzkAg(r>V4X z$6Q(F2d^;7-unLeyXUr5dU{?swsGi)J0bB0UrV#Oh$60V9WVuo;X~dqm~bk*!{8Z zazZTp>*01d;B*HECm4!`-r#_8_Vt-TcV^&(1IZWv3LM<&-|xxvH8aDuEOM6xF5RAP zU-arTZ@oAE*lRmhpKA(U-TLs~XGk74h3a;!d2ZYrlRx~fY|r(t=YRI~p2tpK{-XNg zC)t!Pu*K1IZLiTeD7vnD>&r3x(<|Y28`_04*EQ{ zE+#-d{Lk~)Zo9u72m+awUhRO&BJINi7h~vR2X#r?E*ZSvUKV-{d+rU}(~VoNemz4K z=Jed3Kk}NXqvw9zFAINTfm-3{le(Ye@Z^z5?$x@7~`kAsl)G7y|DDqn7bp&J%pE6a)18YL;V(Z z@Z7)oeAyIF_W3vexOC_`^ug+i2ho*7e!=|UzUxAtFVV#WI^n_28=02!(JzXE&)f`N zyf>-e?+=fD?z!*Y2upwD*Pr)ZGd{sunRcu-DbO2>H$Cd7mhM43#rfPKYaJ1v|&HLQ4p=&`N*WhIU^XC^Il$C z`PuQeUKli~@u&GO{*udh%P(u=e8!#6qBlpJ%wB!rYX$$?i;KP)o42+q_>BX9&%EvS zOX0TnlJ-<4N}E|n%&$(Lb~*3V%vW;q*y;6iek7Cb;;0W&j+f#(}`%{FXDYh?6|_UH#hpGs8(q&JoeC6@=vCo@X1i`8aYnSSd;pd@nh5By!~4r-!*}K;?TITUmDhw zMUUA!>+|0pzH*Rl6K@;+8~fHP=D3-gUKw_9uTl8+5yt)nO`-P0qVmEmE&YEuIbqq8 z#lO_%H@PppF!k@RoH(@kz|@1PbNAq4x^l%W*JPEw0z#ipv1dbY$@cL+^g^xsg7A$W zO_=-D+7Zj&eaGOE?Q`U{!5uY2?%7MT-JP1j-T!yc46{0FhKXG@!+|foe|zh1(WC8A zSTnp5U6%ox;g4|+&7i6~z*%uC3va0%F~?sZ=2$bfL(Gvy#T*B^Khe1J5t(a{ zVdgVSH07^%1?g-T5O9Ve!Z_lLwZ_je!%VS?_%oN-1vF>MS^OpB~pu>Nxo%oL-hc(}dz z;!dKqE?fF}5*}}-pkIAQ;9e8Z! zL85H_ORMi5Oh3{*Xz=lH;>Ek(Th1Sjzv%PBjdrG3IA_K)3p9J5TKH$l6B_Rz;N4W_9mI1$OPzoHwzo)^Y ziSTIc@JT8WJHc;>8 z`izQtjy_KZpR0#+)Q(TZuj>4a3dX_$fAKd@Xgl8qzm+-Oy}Re}tMC6LBYyt{XBo}q#}SPFlO;e31rCGZ&E1*^-*yIxQ4XRF{n za^dRo!CngBFCJ$bN`-&5)OcFpd&yx;<#0zONI~6$-d~|YiST+G{A9s+&4+hW!)ql- z2JaF>y+_yQ@m)8&Xn0*X zeAgKGk;5Y?{7r&q!jTfriiESmVcZmO9)27T-zWxtBH@^l`mC<+-u?JEzde0bF(|6X zacMuZ^IUMwuFmk)_j}(6^o>B@2=t9W-w5=LK;H=TjX>WB^o>B@2;6T3?0>0HCa5h7 zrB9t273-+(j^m@QN(aBvhKk_qbTpmv9VCH|U^;q)@&M@I*VV^g0+sP4bL3OpQI(6d-=cK3exmF;JAuThoo{b)7kRBr7GR@F8h&Jh+< zBiw!_{_YmI1_Px{dw$mWE$B0_k~hI$TGi72g)A5W3+Q1J_!#K3#NFKC|D5}q2-kw| zjH%62A%*+f-O&fTzdgOuIkI?U+V4xd4+7s`8Ku^{KHGPH|MmIX^?t~@y}$I>_db8S zd%wQ<`~MD~;{n;QcNe1+_BKv|M@9!q_x#+0&E@;Q{y}DRA7W$A>i_JDoK3AicTVj)6b#KLyphTg@?FTlq!*DkM-aFxyj2 zFl+T9X!2mPjtwrd*-A%?#a3OBp+swqC^70R_#Cs$NJ=G=LNX&jX&_sOLNd38 z%njR4UPYh(ZRQI#q}g98na626EUzIm0;Ny5o~gixWNnAc@M0;v$8f3RMe`OMcxO8q zxsH<&xM!ftCq%*PhP(V8jo;@7k;@Tfr!!*gQx6=#XT@~*w6g;<2Flo@952M5FTh#PXKRf$>)mqbveP-``) zRTH%(26g)TtlX?g6S68;21~BySJqr~lcf?*CRF&{(h}8DolGh(&>6y&I=v!Xp_J*v zwK}~nTp6t}=tX24Dv;~svI2uj97m`UEC#L3pwBjz7>bxBrD`Ep5iW@iAIe2YBF~me zM@wTyN6I1;F;P)b(JFBv(W;uDwc4!gDW&>zsFh$Mq&!?mq`b|UYOq+ha3m^m4Z4ez zEM<~RqD+d8375tv#e^#~$(rzET7+WcGHH0SR2HL2P|6hX@~EGQUF-~t-q^xjO=cri z<}0MtHbJCBfo7dH!2KLrhoV$jl~yQIr7qAGTM@4q<@1w`#fAwvgjy1jU?G`YR9R{p zZ>WsOH=0!9D@c`Su<9(vQX?r=t28E)+4d=EwZosnvG(Nhc*VL2_OaV1$@fmRtB%f4 zoXxYVt{4=pv+ZNe7I{#)J>2}zfEuwqAe!a&GDAti6{4=Qz%c{V9&REIdPb!Yp*(~? zNsDjW4Rjk(w<@97XfW9l%q69%M82`uXlr6Op~?w{d4^(@_!c@!yf9T;TxL+qB`|JT z=n6x8gCQobAgdaWavYSZv}Ib%b!@9aua-$<)UCm{MK)R@6`%;24DJeol1^}EGKj}j zFd3B+$>_xVDJJ9GGDDhPov4u~Yh+20;R4ufriqGChAZUBQQ=BSq$WIG5)~b#iK^u# zD^%ixgi2FbxP%Z0EQZ46%uEZ|V1;-;(^OcdEi|a561n^$!-iA|=HlYXgoq%T4sXsO z71K#Wfwrtz>Gl!A_y06UI)oQQ)U#DnjaDOceNfvhWrjL8cL}O1Mym88j=_=$(d8_2 znMG$vORQl0$}yS>Gc885rPM>sWi&$F>+Dm>x4XJNFekxHY}nafNzBUfv+mYXelb%KV4;w|Rsb4=sQi|6U4#ogs2W#ME) znmo#2h!MGocm@K@pDAWuMCbYE+{z)M4RbP-DW>ME-Ofq0#j#-8j`mZDG0Lh#wBHrf zp*pnw?IAP6pZZ~9!{t-T9mf+j*q$WtlZkH}{6M}Af}O#Tv}3o!e~5rP#VCLWFCmnX z@%KX$WYSeXeeuMyu~vn0g?7)agG{Xj@Pl3z@LGV^0enxbFn8{U z^9cDOgT4*tYY2@>oJ)>Dt}9DIS-yd6CXsVh!TBF5@xw^fOgxIDq|3q($|`~7Kvb$e zM=uWT3xhmDu5>O8(EwQqLNwHBlXD!41BR*55=n$oC5|Oh9%o^QFtVgED)CCh#CBgT zWF;t*mD2bGWq4w8ygXbXg>^zHgB2q_DG}C)m{O51KPf>LbB;NWP~ml=)=Mqf3`Ehf zQot(l6StC4kABCiMBe6R6mj564O&E=Ba3u#6}|)RF+R?cgoKDju608*f+S zP8e&RWS3V>Rjr(1SJdaJ8Vz>E!P#S@Eq3{pdEwCy*#~5ZVMXxrMuO)V2xgWGBkH^s zIM#tYnCC8Q0gOE$r7hi{wU$|6@!g8b9q^BenS?qwccNKTGKa8=^oD|~482Nx3577l zVrKh#fY$=JvDK%j^*|aG1B`=?t~CP`$tez6lm|pi=h{% z8o3~IHKzoiu#m-!=M@6%?;tWQ``8tk1jgNJ5@V)lo;L?`MOax*xdSA#1w0h2c4Dzg zJdK#7Rs{m?70ySK4TWXJS_`ZtD3(~2SSM`PRH#Ze!x}W%kY8pj)^8^+pi#UPL0namNn0w=Q(U8gTZUQ%k8@AD*IhuW z3=`MQDo86SG3bq%Y?ZhXX}OOht_s#N#1vInjiYUqrG~M=dts?6GFb!3t%?+9d-9S&aaK|y?&{00MgjGTBhZ+7>t-rBE=(iwn z7EDl>>?so*OO{myw)~GF+Yz}KZ70?d!w;ep)xv78z`s(B28-6BE2^Awn6-$^vQ-{~ z^-ot^rZ)^GkAr!X6G*i_FrRUoKgwX)i$0hb%9*#1xB(VWT>K$2d)}O4o$kpGR(kmn zDAsL&#%8k^^UG`orQ0mTy=A{L4TW;Q;Z7`DM4lthq9KL8e$06%86OY}xf}cc;$}zn z#987b|5rPL|9KguLXmO4L7!C{VNfSO71<8l2tVRxJ&*f`*Git<9!#9_ zHrfjlO+jawPv03}kuJ9eh#AbzJi=@`;w9uxv1$uL zIW(B;++xt+1s>o(YSrknmF zxL0tC(zf$&^s{TrdE^1Fa_UaN{F+!csecu({6)=Ot9u6Z#)a=srU-H z9oUnnurU`r^{nhLAn*l>a##~VKO2tt!Eo#Tt|M-4vBaVG>R{ZA%n zY)8d*I7Z#eA1A_`D95v4CC^Kriz=pKD^8nsa+W9;Nr>^K#&J2ijX7CdZsN`-kj@6{ z5-id43AtP)-i|_4m0AeKWb&(E1<@Ak3gOC1prgLO;vhlGL<=(N@bR*J<;HX&42O0CvLt4&QAj&1lZ zR)jP%LT|9)BDG_3Cx{}3)kua(WB!IxCMfc(5i$>9XiJ#$kx8GR zZQ{LyB!bKUXcPIGcLw33Dnyx87SpN0Jb^Ftr6YvV0gH#XV83-zeoeCFVr`m>z!EYZJO(8#cqiv767%1B9~hb zz@>E=qXs3ak~S>iB1}sY%%%ckVVUI(4!D+fqY1zfY|jxj2t>NM(AyKSoc54C{3D1>}yIFnDk<6+Ynk8nz`wu_@@NaZLOHw~_lZCv)PAEcAb%ju z#lR9M?+eYGwYE~c=2v4qKskY2m@`-pP3o~m051(pu|mwHK|;8YX_`puCNnUTX282q zzAiOQr&Zz`2&U?IpwnIqH8225Y*{BFA%hQ<(Xsn9H#cWOZUXlHh$vE>hOAu1mk5(= zAk{$R5{H&PPSR@eI73{>GbERpDj495olIu%&`~%6*h=+StOiN6tC6I0jHYz zGi1m`EhgI*b~ef~&YyyO2YkdyF4h)WbI@g8EQ?G-#|gFaRRjv1G7xv2H!IU!Q)V;Q zGL5=Wx09%!sWf7iDvw#b)#F{(yNp%=Sapg(kiDy4le-F#;t6E-NJK6H+` z)_Ylc|JL%!FaN?uKhx%R6D{ZZ-9ajCxX(h%++DMcw^T%+ykkQDB)(2NM8 z-rkThjcfPM$Os+JEX)YqK4W2qj@ZlfQHeJpb7qaZmwPU1LO7Hmkx+ieT7jV;V^HA^ zq%Zci4^fFz2rsS*)`CWq!Zut$O>TI@!sKdZ?9_9!%5=8OYyjZdL`)H<9*s}|=pdgGoa@t6WGplVAr9f-Kt?ZE#%#vp zXd^OnF$*fSP%J2~B!%ECo%!92Qe^iMAlf%X`E|w-YKQCbAKyMFMuJ^^WaYou#aG># ztW3fN>Pl8<@B@btX`m)@1(4=;Cj!h`aAzypeS)>9IMi&)XW6o;*hL}u7gSyh!)|6f zWoh65Wyx^|$|5|3P;^Ji5>v}cq3OyR9z|Eq5>}up%>p)}oq$rOr;thUl~pWhBz6R5 zGYJtZQX)%^#L7Kd85yorCP2hUE>D0Eg>J}3%kK?5_BXo(#0KW=FafUD<42KDUnEGvs81AgX0nh zkOV9$fJ6t6ARZHWiVM8p84?zHFVB6k21}{eS<>!XPk8ocEMA zxL0WZgQ#CDTm*RK5UKHNL}`&;gBN>zdT&6J*W{gio8hK_T9gIDjDlj(C?%rUk$(_o zN6(QpD8py6P-q<8!jKf2ej=I}?W=VQqk_!wZwWi>)*_(&Z>c_ekrv}MY8Uo8|YaOWuM|c&gCNZ$j zW#nM+w%eB=XUO*%L`luUSB8y!hWG})JkWb;5x_CU?xXhj94c~upQwEtq+3vtdqagS z_!nX{1f>VK1f`_}9h6>-(5W4yBQWh6l*V)ifB#aJ8qe4&l&=a3d>lrbF? zaDc(2OD;B41QAo#p=;DS=3tZcDt5MZQPVq7QM;JNtCD0ffgpE5CK)Y>ad?}$5z|;mqb6St z6{7l;a0uyTOtox1(;=jzB~b~Q#6)>`Oia8q+#OVqLLr0Dc~WFjczjHJVsw0Bj5Ik( zhK004M6ZH0hGtYMY7bC#(b29Nx=Ap1a}LoVKIN*TdC~}p;vXEbLq$KO&1;Xd%tj*} zN?PYo(wjj^gJ@gfP|;`@HxxoTf{J}kB|V8&(oJ4tgBxinP0MKXC~8rHlvZ|>(rQU6 zuMyq$VEoK;ifJsQ(bA^8;z{1~eD5oy9U?mK6AiOxA$`+>7Se4Z+H1+5=z)Z^tB7t6 zQdQGJ8gyMZN?OuENmDACbLouz0hIK5tfV)GZ^la6p`zCZNRe>ngD7cQMNb-tBl~nn z$)GCZ8YwL;zK@Q^s~V_ek`AZ!prgSf4$B%|0PZiOjixwQEPE5uCL_OzhahRB`=!lQ zNNY=k0}$#Uq-oE69VzXkqzx&}To#p!^B_ukDMF=zOcy0>ZRWK}=^@Oz|5Yt*{#Ug0 zLeF20O18CN}C@F3*x5a^dACZxDv$l z2;rdh{WG}!v4d8E5S}(@U0D2(2*Pd}q$3)+n^5lHn^o?hgj+gD;c9{5I>RFpq%fAj z4i%hv?MrWa3i|>YK}+Fkrg&J{v4=nk#|2YT_*@tef|y7U!ZJz(V-+la!Sh=*K}(hn zP+%ck+no@e7VEP!3WRXG2!;$sPgfzVa0=nfF(8EJjrugKv|R+-?Li`=sa**3HZS4# z31OUn`QMxC@}NSPa1p|7kw#z>orQ2MQ7zoLrDq+y6Sd1=EP<=N`3NUUI>?5+dl`%+ zF!Ibt5lVRn8Ej;#rI3C{(G3wxBafHHM<*tSLqGs2VCQ`1ENux9| zvUo-O&jclbiM&MQtb*Sd;e;3l#o zgqYI5qRmWwX@eJX)xh6DKp@q-qS~Q>4KcL-2#er5{Vg|rog(-{ z5WzM}9wmUiJQ25B5xlca1RE@w?E?7MC5-Dmh+u995j=zz!RMUQmqyQY`y~*Hgaw4q#R0>N^T)`oO^%A~@(Y*|Y zbk$BW7_tL6gd_9WA%lm$`RIH9t}+;A?Ei=izA_*`2?=iY$>9Iu_38f`87zAc84M|a z4jByb1GzGl>2T0y(eY&3K}$JjnN1qL5}Z3J#9f@FnFgy8m8A*MWW-V`k`iT7MPj%- zrkPa4Kg35UNfNHnL`uSy@kz?)=qM$mnJ4{BR8ksvr$F7po&v6`#f+v!R60K-Y36s1 zC0lDDjy$<7j*JrCTjZLfNon9?zTj)U!ND3hx?KZLHYk=ZA{@DfJ!;?yZINU~ooI7~ ziw5?lHE=a(V6&?R#`>3NA(|dc0~brZk&s*x^*|c9z*rr_@$M;@+(iSMr>ObY84nOl zcGbY3f0tCXAP6RRuYm@k|`)WG_5 z5y)V|v5=L33dV6@$gS%VMegX+#kscKM3HIr>r}pYsccKY><~t7cj_XL!99hM+e63* zWU$G0pD=QJ2$=~omTvwMjnzvwNa^lu~bro``ON^RX5w~TaWWIN(o5#>!5-iBKQud zU|IxM6}Olnlzg&7DA|u|r&O@32ySgx!445@2Ng_-;84N3YWun{S_JpQD!8g^Jh-C> zrenbi_SD)t$AiVgTt#p+9S^2tu+$j~rc^N6!1BP`sCrPrq0?erRdBUe^^y+Z;JG+^ z%@GgAGPr{Z1}4SD8_3#K@Hdy0!;s+BK9=!c%rgG3R4|Z<|63KD$K*IwFvT?>HLZaK z9(8Qxf2ZTYtyDZ%IvO=EBk-n>C`>n~STGjBEu=#O$Hz;e712s*c)TV`>I*)>aD_q= zA08u(gpGr+r%-+jCB;h;91^%q{+6N~7neIkf^S1IhD+|6OAr_dVl!d)po`DFEfD+@ zmktEG1cCVp@1@YWt>+wpU>6O%-3_=&)C>F!f{A0m$Gk+Ke|?y1t9yzAJ7d7Lpno9< zyl6-{YTHiHeIU4F5cu990`(XO?lA~lx3ILSw?J^GAaM0fL9wo5Ah?4DhCr}W15^5! zIJ+pwp@Dk}1a}Ss+hh5)|33``gY9=xz}*Cbe_tPT=igNULx%YOhyuR+&i1E};FrF& z>A!ewdT<4dGl1@wR}Gs^;&;z~ zs@0MrIuhKTR!yZ;R}YaiO!7|5>@}^LiUzN@3Sbvg&(UCKTD2n@e56^89x$!ip@eU9 zyqaCos=HUhU82EtCns9D)yC|jvF-+6- zESRED#KJ0K+=SffCT}-MqWU0W)wWeyqa<+y&aGZdR<-9=qxX4FhjJmmdLQIh zJ7lqtuP%5JGOM4!nbo&lGpnn5{$KV(*G4?QZNva21L)&1SNW>)XS znbp;f%xd!h895b{&GO>b)R` zTcEN6Na4l~Qn;04M=`#wobPV;r*pL-9^9HDbOwY+JVO3uKNpw-F=4yEJrLxu-=G|G zSn{9+#8ECt;poBZx=P{o0z<^0{!~2p>)^iB}P{`5~D-QV>i?B;73s)6N-Kq ztnP-p`nnLuW_{J8N6tp;%6AfDnZB=Iqn=iTXcSNf>ro)X9I)M5PCp!NBG3 zD}(Xwc-UUd$E6kgSv-K*-AGjdMLCK-bfkdjIvCYRkfUl3M1WI>N2!HL%ceK$Ks;E)N`S&VNl>@va2%@MOiB{N6_N7D@OVYC zB3v$$Gz?A9Bt*$zZ!s-|CEn^l`%%^1T>P^|h>8cN z(n1*G!BVR1kURIE-(h^MEiNqdZr@?N%OQqi3cPZt9mWs`?sZt!fuxb++%#`F(lFG+R~$YPmT5(+*AYmj5~#fdkhO>F?{pKs+RVR#t*v57!3n4 z3?+G2{A~%f(fC0(8G{5CI!f-~O~y!&#z57OdemvtkLCaUo*xv_>z*ISCOb&5GElpW zJ1Jq;0w{??`{fB?FO8DHBk*oxC_S^eO$~=J#YZVMd=9JO-DD#V#ocUffZfLaWOfeL z!dKh1a4P>DP{MCwB^=6b+hg1>4-xb}V^<|y*Nqa+kp#VW+PTlzp@fsVQNqnw3Gc*8 z_|X1}bZVb*j#CMfo_LS(G^~WTgA(@cZ{&{w=KKUY*{+2B`O1B;&-ibkgi{|#32&&4 z9^Agq_#6|qD=GxAWhlVy-GC?E`Uip%uA!804k+O;P{LaqVa+Pnu96O5y%Pmcq6F0JT*FEK^|+H~yi#bGK`T+sP2F$tHv7@g=nY z>Z?o>`~(||uaq^BS4r&1;Dr6KGlf#o7HW_2xn#V@czE+KRh22+5w!v#wZ-`0L{QOZ zCswA+7@V<&xI%9+_R8GbRY&g=7^22rWW>HlZ8OG5>)c{o&Yt5%h}=t1NcP>yh601d zaGMCq4tt%q(#M`~Hee7&js^l!om&nD*i)0Z&4o9Do%^Pd;4z$5f#{MuE~SrfNgbCu z49q4Zu&Bhdsaj6uDpW(|NL(*Ajsd2N7{%0vJ*YfJ?|F|yI9olCL_g3O>zmc8X(*55*p-?9 z<(KGf-gdmtTUW?!xyXc@02eoosO9US6dvB~4V%3;2%z*&y}*76tgr2!XwpjE3k}iS zyNYNonba>138{e!;@bJnJQ18D!evn9%p6<22Xo?$O^7Kr=>=qPJ|2=n3-TqBiE!r;YojYNU>izJcax$mr$jjLp-K& z{#)F=9(gbduX0D1yPe8HqR)0#hz!-f(7XAi^KgnYW2;cItmk+Jj?LnhVcM=B!? z;RP{z#Y^A_4_8QHbm3ZqA~IZ(ADJ)JMQRJQ(Yoi!3xrX1kef2$HI7yFHkUa|T+j0p zo6uG7DX7ZJVKDAAF6Ho`CP^|8+~{{Y$FopaN=OqBaW~eiuM!Qs;9f7XKT;_4tr6LW z`g7|;Z>$To+n*#B5`lwGhAyoRl_{bO;fnld$+1vnez;PfuM4-^N0U-*RFphQ6sCxl zpA7X9oaLMhwQFT3Lw|xFucalt7RmsjgoV>Ez$mB+bRA5g8imH&z#JgKqX~hv<)W?D zJk(aH3)=;lEWW)6s?Om;1C~N!$WF&jTY5w5Dd^kRR;9vb5h}UvW#CAKw2_sJ45pMe zTUetEg#_bi^c8Km3Wwp6TvSuYq32Q~df$)RvyHG(^AiKWPAD5$$MXUsX+jPg0h8@y zBuBWuQ1`B_>=kV%v0x}|c4BwGwUCfO#iu;?b%a}H!YguYG8!k>-7GxlesiU8 z1Wf+@{3_ucNtG~So#^0Dn0|JSS!55tz!^l(c<@qNaajkBJ#}TMeJv4RmdB~(VC1Y1 zwLe)9B~uy-Bv6i68wFJ!^J8S;`%M5-N*$!o>!YI-`sm1l=mKedsNf3cmUV9^I~SD- zJ+k+4t>2Ja1abX!wtb4yY=>+>u2`4uf_4bkRTbdtZDjEhh^m;*oSm}@&1Tv+XNEUqI# z#F-g$;#utl7nEF(a96Qo5jL5$6;+<-BV4I@dHCNUbTg)`Ej^vY>nCq8A%dUT)zu8^kPxG#kjS0ovfQ(?rq?X*Nfo z-U6LwQ-Pg}jo@6AMm4&j41yaGS!Mhmg^_#=Fh_{*C3Zhn=23%`lpL3fD(N=3=ScZ?F zJ;kQ;Hj_+$(a?^y7B17p7TR)b>~YS0CUmV+mtqTa;nRG=3yLkkW)7+VDqbcnP-IKp zwxBw~l2F_fPU}+&dS>dgajVhB0?4Z4TM0=JlWaz@iSAnx~YKLM^ z9RiX}4{nBQv8PfFE)#o-*;D0(AZ8PkFYJ_b)2Z^p>>c7UYl*M%m;B$Xyzuw~R9=92 zTMmU6CdVqdM303R0=gDnSj_;r{h_1qLNZ@HdCd{naWbiIt@G&*Wy zHq*Te7J{0ek5tc*^(b!~16qS5qPA8MaoDxk!ovYChg%W1iGcK)^+Vs-<){U|xl75y$-E7)>!efJLTd%&*u=MOHNo3VZt-e~*{DE^MAg!= z;#2G$?x24)p7m%bNR^Tjtw|5w98k! zj7TN^iB&5oVee&!hl`RbbcW*dgh({#CK3q{fkO3Wk;!Zmm6-L$f=bbPRHiL1t_%}} zhr79XaqBc$Qznb52|zd=(OsLWPF`b(6!S&KjNV%^GxzAOQ9PnH;3 zv)n?9(0kL!VM)+)#i({EZ!_Id-sV%%Sa1Zr{V0C&^8-KSIR1+Y8NU_JO$OaZQ>VZDybxZQ76- zZC?(an@N2mY9#P|#M_1(-B_&c))+}yQJY1=z#!N5N8J@sIxrBSw)RI-xx*sG_(FrX zlfTec)Zt3Mxv{X-c}4hYySq|2E^{20(DvLmI#T*L7&)tU1$a_O5d1fC)rh!min~1a^8;wBMwSZ z8`LmIRbqP9Q_X(vfmgMy(@!+P5EFJjQ5{n4fD3vqtHc&mLogYv92UM}x^%Yz%=9Eo zcYgH{F24S~j_ZG^yV-5hXP}*%p)gs*B9dFID=YTF)#pl~&aBa}7gcUY3AFnLs&dV! zcc0k|g{((jA+ot#33Nk(CQ(%Fb2DLmt1ZN^2!S6KcYnxngUw~}c}P-ht#vEImDn8h zNP&i9H-`b&BempErAcR^WF}fHG@EQ;d`DqYN5BBOG$fUj+A8A>McR4Bt%Syk=bY87 zgNkbgJ?&GX3lF9x;wTIe& zPi=2euN`r&l2m60A_BqY9ctxwEtd&3$0X!-WO=2nG0r(c1hs27vw#U_c4fkHDyxgy z{^ZR-E1slV;<)U%j*je52V^x1qV3?B0W52}i-fEg8F1jl7#voYVAqTc($3={$}UgT zNR>%YvYR1SL`KI$`?OWmrfbxN3g`21^EB82H6pPTwe?Rs1zmBTcXq{5%OmVO6am%x zD)lb`n*2+&ao;*Za=qFmnaN_wrWyiiwr%QA7}NQ~n9-v+gawoK!3#RCqq6zp<_*i8o7*e)iKpq7P@2(?v5jYtICrDIVM^k69PU`zlB zuz5H!ERiyg_7Ryz+;uHmY>4;>aZgGJBaxPPkYxVAfN#uBL^z_glJLZ(5lwWPxLl^4 zlLakIaydSUD7zAto4C>pP6{-_0CwZ3fMkQVPjoG64HMuS+}i>$5!?v~2i>}F3kO{q z3X-L<&_p?6fc;ZWAh`IA2;~5#tWCee*TMRvh)r zVJ#6rjZ6r^(B(@V4T0zgTCf_Ipl%?Ix`}0($dg|T<+oQ7B8I*q9Xdy97|YRIMtgUS z8|Y8fRT85-_VR$=tqI}!sC0=_A*0jIHi@eFuhJqhUFY{!2iVX}6vN)@_kMvXH&BTs6?&>_IqmcW}ezygEWFYJ|5DuiOxK|9^>weP{O1NnJ$^!z^PW#sl$6b}ws=?mipcG&SCA1%+ zorrwy_vd_$dx1x7ngkiBo%ES(hnub*$uozS8bG&Zm>^==vY@3|!o12J8B8s+)eM2( zkztNbP{CXg5i-Pkq6)+A{JkiLV{31>B=MnY%+u+Obho9r z=0zTK$0c0z)ysqR1D`GdU~y*(_VO+u9$hqks5f0O-YuTIn8|K|%_pv%mQG156=k{SN85&rZytRZ7T(Sc-v z7Ofcp_^7?=-tSob(9cM?toi{N0WRl@+s_|fJ6K4aiI43QVXeqRf)$i+QfKK-jI|4~ zYSFUH((fcK=hP3B;MII7zlDGvVC|a0(IX_Q2w;Tr3^Xl6 zOj8=<1VCmvEi^PB@e!pqz*$Ca@gq2d59of7X(&$sr57Cqov8#4+`kCw>_Q~m*(VK} z8xTk04Yne)UJc|O1RpfRB&wIx5WmHj>E;+3IM>K4 z&=Lc10Aqj};8GVOsu@s9 zIxTTCYH$Zdk!=9>F5*-pD`A~xv=!mS?Itk=in&iS=zes0j38n=F(N@*>diEf zr#m?jwWC` zagV08>&Rx`1}~gh)xgN}NDacPR|;_(mf-b+t#RHn$VbtB#zq1yswV_0s?s`ib)ZC% z*`iK@egH&aXkJQ^##H3Ys!s*dBPVBX-dc)gwG5f}C%IsE+Uy?*dN}E^6)wQ9Z+x2>ioz zD@UsTN>A{Fnhrs^Tqi``7oJcPQQZzv_kpJ-f*scmQTKx<=Fvq07l`Two)|(DRcv*E zsQbZ_-4A)VLevAp)5R9XA{U5y5O_k>O@19As%Ln*^0fVvE)eyA@YKX$GzXO%{6nsK z97QZh`4a^E9mCUlfTvykKL&WJWghoi*Bw0l{nXHD*{Kvn)nJH`)bPE&f} z-jIl;+s_*f5OomMBD39ozHWGFsPXcUpa>#Y5m^B+)e10$CjhiC7B~sYA1J920`h;m$}3 z2B&VQ(g7J8*-BlY2|lZTAz%^(-nsr1Kyg`;4gl41pz0uIeLZm~=Ro$xpAdTO0tQ{6 zi4P7?TmW3~&GrCL2@Zf_6KDem2OK+as2%_c?~QilP(AP`q!gkK9I9u4LP{j)z@d5q zC}k7kcHmGw0#vh7Kz8I%_W>xxXj(S2Pb)iO9aBKuorHEV)5ap+$Au5D|s8$N1{8SxTRD%Nyx@$X<&ti+UKgAK`UJg~yJ)>`aSHeo>ZV2jr;GQ|dR=h}_!H_;>)i*ZfH_@p)q4K~P8}OM zjnP5t^^8-yoH&&Q_~Z?4=voX{6(e*2RaekX)I7W?)EF6TjvyKpk;ee4QXEhy;K1HZskr_W+xozQ5*c*L#VH_QtBW zUE#{FnAUtL4+d3`=t?=3n8h(NS0E90iT`6vis+V0wezT-b`TN+?ZIpJI$`GN^o8XP z$HKDpiXj;dOflz0YXb~ zxS%^vR0nhld_nxRu=#&Q;s@;2{I-pY^mk8|H6V(Zwh`fZ-`+A~W z(TO-EslJ~l%9TaM3T{_Ds3)o$bmBhh?b(Ybsv|nxzQIQjp6}Tc)g3zhHMjhFH=d{m zL?@Lc5_R!J^^8v7>(uD%_Uq4KCbf(m?(jsF4$llVzCXksPQ)rAa{!di{vY<w@TZqT`O{N* z=)9AeLWl~2(rSjoUw^lqJnok?$;USRVaGr{y`t1Nc<1*LU~Xp=fBQ#r{EQj|2l|JvrU`^ zMgFGK$>fAOp{M0}L79AQ0G#5;9Z!cB%ZNRW-*ZGr8cYf2!Rd~1Iyph7SR@8hC5*eK zmdWpIf_f|mHPrZImqOf33sA0`DLP$Q<+>D6rtpC zU|MWN{a>pcwK2Ch;TGnR$z<~J5>z86kvBSF);*<6&a33@5)BS2l$Q@kIU$j@#p`~;whBGWK6 zx(evh#VP%Ny!Y=nt6BWYF9hSeT!1EuOd+#4%|ids3~9ek(1>2N(#(R3)_8tI4(WB! z$ob{pVl{_G0;%ac!HFPX(xkw&zy5naYGVB0bd$hz?c;iulh5f}@(%$M{9VgXkvZvlCG2EHJ223q2CfEP_&57K&1(7JiJ!Bh&?sJ;lEl zicl9g@)VDDpT71>okV~Ip+vqJ^rwIeKR2mh zZ`uXmPMY|%G#EQ;MPek*gVjKSB;Y&{KuPFU0YRklN=LQbGqo1JrTs~?*9DF#FkqxG zj+(DBPUaGUIWSO|o0vRvh+{#3Pk(&krN8AQYYoCxIv5N|53L+$qqmGJ!WCEJxt)6%6nugC{Wx zm+}^a>%$X+!V%{&m>!-`xCwc^buMB_niihsW`{rIw;0R-o?^Suv2G;fPE+%yt6+Sf z7J~qHnlU`doAmN8J1RDT$6#jgBt_y^1Qvtq!P71ESL?xJFe!PuK0L)E_Bi+~CYj$& z3r{~(C!PR{L6cz|dE$r@jpuOb=Kw6VB7?bXPX2bzV8F8NhtA0id$Ea_2}K$>ib*ym zEA?XhB3&wLVqO>PQ#I^Sd_mR1900o&Bt(D_62`KW+tW-32jrIsQyq{L`Mw06iO}SU zpm_qUHZ+X{VFRiWB$5cWQw7-|mCvC(_(QD-1dQe|D|F%S&A;DP;utP{=d zAki0GCW=8^R_whKIt6;s&hrWx28U21Qx~ZuUE40mZK1^ttL=4i8Cd4M`;fRR)>>Sn z#Z4&5Qe5l8)LS$i~4%P+F4lG;kxqz*Zxz~zh-z+K0--9w=E@?uR!Ym!GZ$(3j z^2%o!Ic`J`#)}|ZRwbf&5P1ewnfEs(m0N^s=A(B+!dx&5TS^>t)vjZk-8IB;>w_ga zh?u=&vyrC0{F*UBMSEaj;Ie|>7=Q^!qc!544<1L_Kf;F-uB}{1%zsBsyBtqn)4p3` zg>3$M6bZg9^*R&_MeG9zUJ+n>*IT_g*Y1yyBAJ%Z2_y^*@K`GFisKoB=()b!H{~c{aPokaTr_d|n z$3%~YSu@gdG9ZRMEhp10{yqA$q7wZz$_G(;>+KC&8@ueYV0W($83&b2zN7YvXf?8c z+dL=oXKL7WEwp zNCe{}|I0buO9}5QMh)3@70=0>h5_LEntmEV*r7x#Wvw911y#yOR)s7ku907Vdc7*+X-eEKg!GA2#A`yZ*OMDlS zA@`kqqG#{_LgC7$u#qhP?;9U4|DZI?|AM4poU;R2NK%37!znFnx4!?@_n*Kg;nm~*Ih}ZT@pONZ z>3$4pW2s1I*|weo0#5CpAk~rIsoFKIXVsPWgSpD;ovx%`;}zS%l3~&@HXYe|;$8)C@i#0vi+t0T!!US;=OP;A2>O|9qF zq{w2~QB(uZrCXE8&H|sU<$k)~vXTt&aoh{ffjYod@}AwAWCD-s5xAS?q1Bk| zm;o1j9k!#zE4=$^Yng263RjIc$qKzCe}|#wCWqI%4KZ@CcY1R1PpjND&Lk_8VqSwE z+gP;K<%TEiF}%7++>GIfq@sh5Jf;z?P9ay@Sj77J}tZ?q(Bjbf*MavAwA~lNI z*?7&+f(ZF;SOLq!YZ?|-d2i`Jw$<*H%7&symDjaOY;97oN()mgXRe?^Iehr*&h>Zh zt|-8r=o4hcfaia}&Di`6T!2ej6{jM~;~pMa>#&VHDZ|$?a|+f z%B!8YM}Byty?!=+V>WEZkR_R-{9=W7R@6HyHjX7MRfEB~l(!WL{-$}B{ zQCt@*UbXKEm@d~rKVns{8vPAk7oZuiPynRGCm@9)f_MmFa)cL@*DBzY5kGcPzkm- zlw!#>bVB8F9+g*J!1w8T@SwOJZ!@f0vkAP&E5hOZez_xT_Ocv9GCqXe$7U5Qaf`0P zp9;W{@TyY9PPe+p*xClYqbH6NgU<}VK}imR@L<&UCBH?}cG+<`AOB-yK*6L2p6 z4M`$_C)UBl!n2H9q{HvhuE3$Ijl(O#x-|`0gNGm`tW4=>#8N$u>@&2&ijfi5FJ;qy zkv*uF--1~^t7KP*+&TR@iJp7wW$z<)0UIvW6xHkk6PeRzG&5^9xHrKjx3?L8x+p(A zO|x2c)X)@h?G$Rs)wL-vjVuYX;bG&_WUDG`Da(Evvx$*|Xn0@_yAYhA%PGbH5OS}y z0j|5`w7|iGQ_P(g;3|M%dF#o+D6WIx4)A9Ic=Dfo?)8TwL*IagSlDlvIO%Hb)@zbT$#9P+OC-;q5v@WS*kVzKWe_qM=EcjH`mW8ffi zPa`~$TNZ#{)wqg@A( zA2>=y8_7YeFiQUZzVZ_M`PSP#_m)cEM;hr9yCk1VV4Y6el?R3`SX`%XxR|^L7UK)Z zD24chzRmx6Dbeoc%-(E>Gwqdt~C7*n+tET+R z*wGS!jQEpync?lRPn#3qLp~ffFejH?Coz^pR28CwS|{44)hg4m6aAz#&VES#cvOiU zi7&%J9!fIQq(tAE1nX`xRLF3M`M!eS<%T^^icP z?Sie|(FA9EMCLn^EAXv6O3XPb*WoYYDtm;&csU^iAsYK(1uKiWo5DowoB&D?gfPW$ z`0%v49)C8H8vbrFo5HHQQakAAHDr(wcF34RI_ zd@%73CGLX;n>hSoOJXp%tI2`mjtra_cnr`FU@~3;PoMYUzlhUXQA~~ckt~(`b zkuJkvl064F&4GhPPQH#g@_s+ zZ0I6=?>9QC?7I;OQ=~0YEm+F38ngw>X#VTxA#od??L=;|=+WKHhmbbm{}2--msbCV z>x5(HKXTfx65xYDE_jG?K_64db3u4FI4-yo$1+|(;s6(11)(t^L~uJt1PKWQGB}qb zg4H|wxwBX~feMC4=_wWb!(>$O4xoZbek#~QsbG4MoFjwTqwWNF4oyJ@&j!ihs}srK zEt*z!!lF3_h!go|F2HK4fqDhAd>gj z03n<)8EhTCB&97@(~-e5DVrx{gU5ZB`w1hwQ8s8{Z5F39#-6b_KaTbI-HYDUslr+&7*MHb$$oq7{u#!xODTtIXI&>ELh0EgT(8h%^En z1iA%uuusKw5IQJZ+$!6z{BtNBH2rGc5{Fkl$Jsdz9aPK_(!tzXWUdO(!IV%sm?xxz zGGqApWX&R0-J7!HGJED~W9BZ9>wyfBH-gTO^>YF@}-A3TeI z8(xnWVl4Jk3yv2qo^WmX{{<<0N)$Xq*CT})sR*VWA*9fMh(dYcx#mk>+0_``4kwA6 zBJL2K!Q>PXoFs>6F@K8sR7N;OPBg4nGr;67CK4L=sG4m=vB2cMt#84S@f7ZMo5n3h zAGW^n!E{33Arv`5s??N^{rm?nnIJd@KDSFS+~XMwtVbgW$m!CsipCrxSH? zIySkRvPlUt=Np5vVt`HhCa}qcQ7_MDPG(U?IYC%-0h?Sg37eF$Uw@F37pG#ALqRtA zyK!uC;G9Oy%ZoR}CeJdlo`Ae4V3QwB$0m__;iy1fye^wuFovX5Uc50jd0&pM-!CuT z2%7}WK8%wWXT~Pe_x~sIPf>1+P3lbgt3iG7hS=l)`!yNW7pHxIT~}LVb43qv`r<#r zCg(EbNr|*;D5C@ocUn?ug7mv2G8DZYsbr)EM1|h#l1eG00&zOybu>ok*s$C_lpKjQ(f+I8yoHcupxVGob33D2%G?Y|Sk2Gt*A#v73s+1w#ERQ1;btt`z<=4hp^NTc7P0b0pP+XoeQ zQ)(%c^d=J?K~hJPO~gV7W*$85g5u*8!lM{Hd@xjeoRVMyvy^j6xPQiIl-?l_9El=M zKdUxnKyVD`javeOW1DiA7so*xA9YJ6=#A@$;26{!KMx9yljx0uyxpyRpNR zr8WY+RO&Z6Kogu-W&e&E*yWFaU3N~Om-QO4Tb#4?uf5X}zL@_*gbz-D7F<}PXvz^X zIWS0kXcjj@t_7lZ2;Z8N5<>I>B=6uh^e{g{o**0M1Z6{BGJHUVcKT(*!U;t0<49Ic zCdfR=lhqfAgA-&k5ItrRqBoA@#fFc~9ydci9wd6-8AtSlB=0Y8zox(888T1uhF+AI z$PD?X(-FOKBu|ZE*Ij>x%#*yX+pppqoFNmEH+!@Wat?1~hU_PK7%|6ZFhi!(%AuaC zKc9Mr%*lpxmrpW7<~UyBU0wIx$P78i@wCsf#+#oZ^BfPjn);?@$SI&2=1`6|onlCQ zM`VWFK&FJ(5e@6Um?3}qUpzx@zA@cUgGxd;-sa=d@tUD6S~bM{3AJdI7vS-fkxj|n zPsQ~dxw{&n36Q%^71Kh<-2jY`?^eDMsu?=GT}zvPa3R6jIt{t|Fm#0MV7u_^{t>b~ zl-wBtGDzCz8w=5{I>dK8-|uOnrJyrE)J^#K@LsQNH|giKi6T+j@! zJ3^)`4uNWToe?q_A4h-&dA$)bH$GNnUvLB{U4YR^s>b;p1T$nhKenQmyKZEL%*~In z`Z(qHIji8)9FDmY<-xWWo&DKR+gtJ3m7fQo8HQg&-B)8lt(Avm@YggvZ%H zCgcteoSVmnx-WzM;tVE-hunV2+3`z-ogfvq5UG$=5vlN9Diz*Ch}>RICS+M~K!;3w zZ_g!C;q1o}I&V_hn@(Yz?#Gb!<$nr-2+VIXn_n8O9I@Qa%;vN4}!h@A{n zgl+7Q69Yk|%mDVGOP|QYnV})J#xo+ve`3rX@}97lr9B$6A^Z|bmMl0D{e4jh(o3A^ z4kKQmacVBT6hm%iZYe`thf?KlWP~&3oo2fV)WT8o`B>sR?36LPP&c>}lDC zJtvjjvVGxSS!y^lfjMMk>E>p_06}k$91u3u5!PJVqdE&7suddRCj&@!HBia zP_C32iq$(b34JOz9yZ)s=S@<$BgasEbf1263SMtNEQjh$=uTCaii+`vA8AV5o^Qsa zaeAX|u5n25u@nDo4s$O``v^v9PJ9K{LR_APS>@i>(8v;$g(X8WPYNVTTMOq88s-;- ziO$Nhux4Sd;`q}eW66sBt1f@!i;Rvng%e*>n;?<)G%jPX86;=;K+ z$K^Z|4@Sv+QxC=o8I7tY|K$O8PKL-hd~jt8@x z%vd&7sRt_@{#}9*r+45(nfB_o#A2{W@(#&<6Lm-~J`Bz=s$t$1)~g9Kh-$;xuW8^b zrM1K(X#|s`F@3ldgGcg{;x%cTbzqNF+=7!gr4h4Uy=?4#q}v&`XXk0LOsaoY6V16K zyL{b6xqh2u-p*!B=#|;pA!U`v7mh5(J!VZjI3X!~1)sxIi?A4})5foBcnu&_qH-`S z2S$80oIml24Y5h$fE$@djG)ucuf4!(Ak6-R`U^mT5&pLDOyxc;5GdlR=@OYlU|Xi@ zXuts*q|uzcikM(I6DC&2O2G-s`Ky+Ub6;xYLBWGO9kZuHw`$YXE39?T z&TbVO=G2Ij)$K}cVzNH{wj`s@on>6qyqJCD7J2hx^&J@g^-&l6@4eaL=Eb?oCfYE& z7u!8z?SaBd1?XA~pCO8j9~Nswl=EAj52J82I1&7VdI}XTo3GxxYb7f`s>gYZ?J$R^r+C z{rHch#E{(*{=6g$f6^AtG^#K5sU;ijwb8o`CH8D)m;qbpT9$pVQ>~=&|1IkFoLyqL ze#efX#I)7~;20&bI^3qvhdYV!RHJ0}D8dwFs7Jot+#`qi)xkw=nrr6SyH3Ob++LPM z!JlQdC^-UWC(Vhb_RbuI@wr7N0pK>ql>Std{*I2pU7Cchl2vCH1q_}hc>RZxID_XO zz~H&HS!FA{+K)>h+l@f&6QxH)b#}6cn7f{d#$OFV+bs3)4o$Q&*Od4~l+IM-fhF*U zJV*Q7ts`%U-e408$O}l2_h>dLEp~nR1&X{UeoK(|C0$xm)>g9sanqbwg|6zxa`OOg z(`|saL$ViB6eR?18{Xp6XiX8AL^G_P+LEH!r7oh<#Pb^0PhbJ6#;_xi?TUbQYB+VK4?XMd0 z95%d#E-O%dRs{>01S~)Bo_yd}_MG0^!)}faS+{tjd_X3p*6ik}L9!n~jj_ZEpDg=yzcfsCNx~sM0RAvRAEOil z%GBN`WFi~fVTXaJ%-_-18*PZV-NVe|J?;f* z#kZoXb4Kxkf;4tM8)=JD>f&0%IpB;H>*4?}v*HJ3x$%8-))k9-=QJ|SVp(htAfz81 z&q?L^fRGd*cX9}+z10tp&K2Ls6dXVEqa#9Nq9Fp1pN1mju^cuE&gbWY^K?gz1Q=Tv zIgL7YR`cSqz-M0j2%DXe-M5(CIYsfO^MP(ir>@|q(*Kq&sG3Lvj@!PXJ=GHh}Zv~vU68UAv0D1X5` zd?Id#jKG~SjKW=R7^72NtXBctp;>q6`ymyc!W}^F1p|fL&)Eai_mmUufgY3-b2;yB zlR9Usc+dqd_m55b+4tbHG2m%xQ2_p}G(rq_E8|cUovEq*RP%3$RJhn-7p_lk?vwu( zz_2oLK=mCcTWl6AW-22I(%o9y+~m+)?$E!*DmvmFpV*E^&c+nAy0R+DIJb8 z-IQ_gWE4VnkbhGK%xnR?_*Rgb)_8q$$#fJTqn<7x1@<1w=ri~Qup97a4EfL@V6Uz` zCdghb##d30zR&{)l|OQ_5D^3C4fbqrO$snuH_;&s{GP1Amxs7lVMmg|Am&!BE{Fog zr5-UEi5H_hLsgv|%Vb+zuS>}dmf|xlc5w!`Iw;rIp7-Sg-{;ZV&y(%m6ft4S+X25` zk^*GA_94QS??XS+!{AuPTnUrI+StoHW7ad~Iq;wG3i6B!SaZGhW1NLEhh+AhugDOp z;#Ncf&x6-GpwWay=k-Jww*Y(jb3}6FrLRaf9XRm|4cVv~jKHvp)T;Fp>a~PXQ$kIJ zV>t8UsMnczDelSx1mI+w)5;$F*T7-PfMwBcfJ#`3Y15^qhc6qr)%QVmIKKw-VpzLI zNWPFG+c{JYekY`bY8Yz~LLLgwq0oFlKh{X#`PjnTB`nsZB|fDrPSeBUQd1h6yj<0sw(k_qO=Iua zZOl#6l3NLYr*#V89FlbP%>+CNaB6qzvHkd6+e$dt)cg9v2)7J@&Y?SdU^n$Ts7bWF zP~_C_&;U26pxhv2sVX2w(KA6wgTV*;0##KoY=Tb=PaNv;Mb7mX<4)APS)ai*eAJLw$_k+P(LZi*B6EXECpCCfR?@5Ag0V37I9E{Ia#9cKm}O2 znka8#&{v^D}y81)08($#!-^Sy=M%fAkc(cO4QZOht4+8QZ z{*Sj}!OC?uW+Va7KMv3z7S}`t5sf(ece6Pfyj@`|Gt>!qus+*RWp9lEDtuJU$qp|@ z@!ODu20M<<<#_N_;KA*x?|nS?{v_spv~5F|!rG7JdX5ltWY`yf5*g=4vc&5PVSf+@ar3C5 z8-Hn4hc0z>_*1t&UB9f5!_1?}ElWmU(U4jF6KiyFlJ2$c^#l>?lO-7x4_^d4gzd}# zARga2HcCK|U}6!$#4f-@H{>n=AQG=emc5!y0H3&te7-(AGj6bxQ z+ik3hpdTR;tS*hE2nYZ;+>}NEkfjJn0g%-`eNRE!Eg;S9>sxAz(#469_9==pz{yxVgZ3Ao?y1Rr(q zjz55(2p}sBFo%bZFneaLrlh68weK31xua?(--u? z>gpDcsl1qjNPLNX>&4!-BY^fd4@iq<}4+A=arXF07s5P^l4YdM@bUG)6$8H`T zodA!mo7|f(eyiqoU7J&dw6}?2q5{@N$X}Q`wxP}oKL`4*2o0k5{os8_Ad+@zBjna8 zH)KOhY6u-d(0#m)o7`AmFOuuY6a| ziN^#w+^{%XE4QYV!Ro9{V!Q@plRXl@uHf~sDmI)`7SJt2OkmU7re0@KO(iY(g_nuaC@1>6=<$Fy%ZU+FBOQlwSBG$Ss2*`$ zr1PWP5ryGxB1lY&bfYQdLx6RFb8D}#GKzJb>YQ&7tkdeo&_Z)5V4YS6Sl7d2T^3;7 zGl~qw=4^3~9HdzyM;uClab4Ewi$ZC(7?3WOM>>#ZpASL0HY&{?1eDvh66v#jheDC= z7>{&Bn*FT60W&adfQOdeeIT3&vjyw)lPI$w%nm9?QlE(GNwrg;^W{2v=e831*=bBn zfnkn#{qeYnzlj_01;gnJg`4!wpt(h!^L8=`Ztb14xN=h~9y^C>W! zk@klWR0O&S>3b(pG5l>`AWVAb7B#Hii)r)~H>`kUC(Er|D>84LB@cEB%4155k0Q$x z{_7B2g_7~yB*PHIL>nj*i$w`MdQhs!sTovrfDZ_ zid_Lx1m~qv!xM&j{2F6W`K5;a>GS$Ixj`s3Q0W=81{!@L;MM`L!HP|z$gep+2lRR} z#W|=pk6b!`(k=2U&H~M0hI+%f(S*?{H3z@mkSxpGFD+fjOAbN4ZNpdDJmlxxkd+dg z0aDg|J;uGu?&}og65WBy4xg~|L9b;&u$?hn)}50cmWNKXw)3(BCpqlm<=P-nLKGC0 zYbUC;WSlh_R_b?*v_%;~lXW7qpY&;#T*3PdkrQ=U4hnfmb`DX0pqd$`P|cCo-qz^H zI9=A&FrtXc_7M?kACq^q^%^QPMSzTFYlm=@^dln=1!WUYaOX3 z!V!o=W?GJbL6)Q(f&AisLY!pU4~j$}um(Q3ATS?`^&LF};tuvYiN%84kNubb$Kmq7 z7!D5%Kl*W}_;Dk!f(V3icivMdD?yM$55oVy2%}@bi@-q!D8w}tm7=71;!6842gh6d zt6qH)aw_{Jf@v8wD9p+3Vxr)pLpkUwE;dO>LaQ7dq8;f3nmJK8HoOdIus|>fxD@!o z8M%M)sxNaZ`tA`T8%z{^n^bWz~^aB)dR0iwFt@vb8%nN%mh96C~O9 z=lrn@J~_@~L{q33rzuo|ra&RIMVC4+d|3)7DHJC6@6+^WEvbB#$_hMfYEz8Fa#Cz| zQvEn7mdD1c!&zT(W+iX^UOH7C9-l&qT|`ueBUE*W1X`WmfrpmctBv6E?MoCG9}uTJ zOpA)8)bh}sGsME2wn-06?dQum3HB0)hZFS&4h}(ku!U$3tV}BBCS*bV;mo?3f+5VR z&gG`@5(Fp0-V7MNjBLX3enQ5OU5}3jG*|+L^^Pk4Sic|CR~u}v%KC`}`*2-wu1}^` z<8V+@jI;%i+Y4nXaETztI^_9J)X=XBD1i6~+)4btOWyAR(~`FYOuz;+5`#7`xF}E? z9Dw+>4!M{T0to*z&?KkvoFE|M8u8{>i3=YVVV)E;VJbbOZIk-v3qfYUv4U8HyGVS_ zcv1ku0Z7FmssUoM%YbuC#s?@D0M#JC1sd4|5hp)Stso3Vw1r=6i;4(v>vaDUb7Ox~Isgz)C@}0xMhf84K=b(=k0l)U^!6)L-?!PomH}spFW3!j@R#HU) zQ2J1;y$A~ie?YL$f|vjSS92yE{{1cev9}$HD{@E0LyF6bH43waXbRrLDZNxr$f0_| zgQ8Mk*#?efKM-bo5lD8n@2n{pg4a%o_9+g{4~Mesu$e2x^v~?gTDU4=uTpO|X z5C4^u6{3l(up&0Cclq4`S>Yq3A(BEfND3@3^DbKCmw5aBey(#c>CpW8Fu5EIhP@ez z=7P^l3)K1ocF8kgx&kUJ*qt58TOFLX@Xn+lSc@-pe}G&B2>U4zZsdUQ80ZUny#NG# zAs`rjwX=ch3;akbNDq7c-Y?tcSuLC9IX4sewbjXL#tonV{rd2$yJ=ir-?Rg$Lm<9h z$|*CmHY&c-(No(#O(hXwk#-vuRk?e+m*4|Im4G?RKdi-vv476Xon}HdIH`O5X-3!= zNgWNCDlCnBtx>#+QSS9 z_F3VQ|7&hsgfxtpCQdxB_5)Dd&P7f zFEDjT_PWlfw)Tq;qS2@fpXlYSQYR!2wh*JwHSFronL-g zA;^>kuCJ{97J(`p;`|aQzbv@Eijy$79I{~M{nfeq7J|e}_6}`Q<=}1-hHP7OJ~t5_ zxZwX1T*!n5h~C94l^=rY10dvCS<*1)g#g|?E$4P?cyzR^J16>vjHlk!0d(wKFrxlc zFfK!(%zK?S@9E3L50M*Y1V2Q*O2hjh{LmP*L-=*pqMD1WW*s0SU>v&4yCS;581`+D zA7Vj$NHyDLgE1@?agBH)hN(B~ z7Ey5oQzp~n-4Ea@I|vXjrUcBm;0Buw0io?NzYtNPTeebwjM;FPaZqRkSR@p;S@njy z0Q_KG<8iTgon|rxLPiycuSbCy?1_mg1UCdb#>3)w)WxxW^7><4TJv(%Wp-?&G{cRr zEZ`iu$)E;eNhtthHw8u{A5NKD?C6hbS;t2IOMd4Xb<-Ml$s2PU*UUN<*0_e%+<`T< zj~dsovoy7vw|ENetY-A@J<1(4k|rmfv&DMSxut#uMF^9nB>YK{7DNmckEL7TtISkXyQw;u1-HvAnN~zuj0?I-TRJU67f? zJ86BW44#H`k={S!=MaL=qX{I@A=LCBb$HFd-F0j}s3~>OqsLs|-1RgJO05M*Ilx?0PX_ytAt^(%|!mIIhJ|bJvr+xoeevyq%T;a{u3Akw0E` zqVDQ7EPx18fa6Q8^JftWp(B=)5ad1^hoj%)2Xeh}R`;y8^m7K8Pi$gr6pyy)1lBKa zfof@5hNWpX$^+6j!5s@`&!6D*qqBnJGY#s-nJ`_{bREb4Ca}kjX17rq-2&34# zJ&?lQRUb2}cM<#KE%M$)V1$K#1tVg#(fc+~m zz@A$Kwt;n(lHx_yfvA3%CJkyqSvZ&siQ`2TIX1&kQ+U-jdMC@Yo|EbG^vo4w8Mb#0ex3YmkAK*Vbr<^+_3xJXZGW#ooEC)8$+ z$E-}~{Mr}OySZxWd!3Pk2;WN#Hbrhx2EN(_R-gof%W(g9KF4JjZ8HRGQkQ9BQz zybY(&w3-Xqg*FLxq4(96G5;mI&|)2`;CG?-O;~mrw+h`5{_!{E)O2un383-PeoL=J9T*XLR3GaoSTQC?M1F<(ZzY2XJ;Q*xG+|Vj?7IXI)WZuv;?HgT%-U7SOiQu7v6`bkg z6aV{mp*J$*k@>|gH0eCJZl3l(!!Gn!kWY|53TJ1!RcNpr#X^qaO|C*apw9?}@HuW3 zx+C=uf1GX=`k$p9Ws1G!5Q}@!0XROS=M|(X&}>2}osW0#9YNzmu}Qkkq>S#MWSUUy zi=x#BK)V5%irZf9f57lC=|%~J81mUR{ZfB9ijdEp+!1*oq#R`id@lA!>@VSdIKCbw zl+T^jPH0CVJ5F1^NVXyEC^wUAGwQs4vd!f6C^Xszsu!#`RF4t}(~$SDx__V^g^RWU zSdiXaJqn4o;R3P0h_->Z;eTg6$_+-_V5Ah#IhYce!tC4eB$V!%+_wk$gqxd9w=wQ?KlhI%>;rR&a!3Zh0t4|#3y170R zA8KCaGYk7nKAll8A?hl7U}k+L<#(Ugl-*RHiL0x{m4Fue~@xSOYMESsM95A~TCfWEB~A=t1c*J%IxEr--^GM6xOw*_Td;0D2p1$_Cn@yjdk5H7D?sStz6Z-ricv&<-lzUr0 zFwz>WGC{yfFN9Aw(0syA#T{Hep(V07kWUEFYP}?%Fd4$9pH)hffr`7+7f(G(Ywo-$ zbDVwC;)49zDj6Xp{p8^f8DvD`~TMhKrCAsK~(GY_Bs_DZ+E zZt@@Mw`&3~52>6?hVW@yrjZMu))#4#1L4zOQ|zE5F0@aMchGaYc=TZf%Xlc%Fz>Hp z{m+@p2kE3@!^e{7JfiZZ=10jPEsxIv`rFD-B6}nDwEzVO5 z6uPPViy?iwKlPEkY5I%DmDWLF-D@WsKbV5#UBAIthySo|R0KL5++S~SY$@Du`ZUTz^)qcScCe4NW=-EV(DaRUUo;s1 z4>lOzphO36W{5;54D|>U8ADs0h_n6hWyVlsoH1#UF)Ra-UCMDq#?V!_BEa-GmN$bU zW2mbWIK6``Z_*-TXsOGsD0&+FjN{6Tg+<2K8NCkoKYBT|$v9XslDByBQ|UjEU}S0p zryq%}@b`*`mKYamMmD=?3iUp|UF3^0)L$kX@8LxxMr^=DaqbEo5Y(@kin zX(gHd+h&oqp&M>(U zmN@G6y2>3MV;W=?8|z;bV@C}H3_6lj%!-PNsVU~HvK?gA&|ADf&^aeTIe z8NyD+*2LHrwJ{gaZ-2DosV2r9XEyDX1-_i##1to(zbgEh8RSc8fiJn?o6YcREHLxm zwD&77|Duh_Y>^cw{A{-1cUTVJw?OdUS>)IGi$U;}>~TLMhu!+}%j9R}g#2#3vx{e^ zNtf{7NPhn`^82UJ-@lRj;}plon8;6%OPZL*`E_BPum5OS`%JrG1{10 zP`+cA3yiFwv0PwWkZ<8Rh*KZf$ZeVLM{uQu%n1|IhU%VYR@XUTgQQ~fF?2*yU282- zWGpkyD?})3nJIm<*}Njnw8E5=nw^slR~@61+n4&jY)fs$Su}$8qOOQ0Ey_&IT7C&T z@qFo4N8OJlupi!pHeW^Al8lx4S!-6NWiLz1U%qPD(xnJxWSKISty;A@eOYGq+BIpJ z85yHY#z*)?DLB4e2CX$kwgp*APU5ly&odq`NhN$hVLGI2f$qY69vUG=Q{spkFZ=sotGcsb^>1(u>poA6lN;fd{@LqEB_n=q+Kzwxaw2W-(r# z%QVZ2^36;oV_`CKahjx2^p{-R$Yfs8{ZeJgcX-O{T($cY#$QLt)$$0qMhzuG{BLJe z+6t3di&9M)%axybami0&DYn8f&h_pNj6bsW=~GB3o~aM%+dW_TTSd2ziA8zn|#-K{u0TC{pkUBp6-h>dE& zVG_|&%|?vp{YbN)(cra~HFb6Fy4CKQT`uRIx}}EO!3NX4a^H{9I#;#Jn=`iwv4A(u zwMhE`y+gwr2{GxnJND7xVcSY@WthSd|mNAB~ z3oEn;-Y>u{`k_csS(lY;HgEE&JJ2?n*N669LwnFQTx^Pjpl!=B+?C7hA3>J2?z(cv zM#s)QuBwVQ{Ifn}(S%9%oq~nHC3*fc@ag`)s6~RiF8QO z4u{{p2Z{|E0*Qqkik}tXt`cocr2|J)K!Scn14=p?=k~gG70oFTZFZDbk~BXkEv#}K zpXK>a)!3o9K{O=4O_Yba)!75u&2{z~&$l8yrf@cVn+!u>zsH6SOCFCp6k}d}OlFWM zVS&5_nadDT$sg#~(X;K1Sy@x#_CiPneUz>^l#qESAr>4=oW-6Xw$W2w>8Q4QQpsa= zl1J+PdesqMxT`V-9;)VaBRo*MRK_73hmzWuCPu%|$z;eSu?U_{@$^|3hx}hp-}mvz zp#R6{qciwpuP-6rU?PvR;1|u@Pd3Jxvbi77NNn&#GsYXVzGmyJG$TCON*T@kHO#5` zR>9M1JLaBN?=tieHTHR!+upyV9apqN9Bl>8k|eoh!#Qbb@bPvsacK+VxZm`XCI?$@|@+z^Wj=Edhc%#eTce|b2Y z`wPXh?AW!p;gL`Ns@!)BXK_C?FXW5M$rsyJ3clF1@?v2e`PzK?fAqUGD?Ygm{~|)p`58+iT%4!3s98EA1Y!5fMgfm;vBz3vL@26qiS zwCPWA^rAJEcC<>4)M!uny$&zkkFuIt@WKJ)--faRLRyRtWGSi9QIw?(N>qowX>>Bq{nS|;c9zrgt&$=h#Vdok?BC9E-8Hu$1vTP%QXRWrJJc>}XUKmYQdUE%e#ItlUYK<)Ky)iQW@DQ0zqBy@QAaiV*1D^Xips)( zjw11XdAiB8q5zMQhr&@+Uc{ZuedvU!6>BX8b?!a2wP=;2(!Lk4*1D#)>nRdBzK7uV zTfl7ec;rcO+9;zDOEfrsHxvgD!!KaM(b&VJl+RK7;0cknl;mH?6YfXzNxYBoAzzbtG1E`p28Ni-0pg?WR_3TSU$iGCugox?#= z$^v;Aa}jE2I_5j289y&RT(Rt$w_(&vsJl0xAK9Rx}_j^!WG0?F6P190T38T+h0 z%P})dGRy%GAkZ@oj|_>n?7y7o<9=+WuoMDG0QEx)wZ5rv>9N(5;L+zFwZm^Yb4;2N zkNO%r*(T&M|=)Om`7Wv9v>u)}|dK0X+9jRLt zz@$T4{Fs!tW7S>s+5XO5Ke>xY*5|_!vDq_1 zCW1;Q_4@&n#&$pG3B{!@0ByL%UkC%BMj~zePY5y{o|}hWjDCxN(n0Z?x)uN>OI;>Z zc8vq3LJCYx1elfsF!7+o@}RWQ7V%lQyMDtSm;PnZp*i`jD5(;aEHI_GzBl)M8R5g* z^gxHNgabq*bzqU=C(9xiX;N9%#8mnoe(!a$E|vWmE<%w`yP%`J2<{47d6gbv3EXjyoYo9Z53K3soBV;u@VvdUz|}It1qzx%rRP-)m1PS5D%7&G2`TzY&$n>{YSns&~`9liXhZxQ{ zp(8{LfZNsNS`hg;QxR9c7LLC=$qwdL4?ba5M}cco~4gKoJO+o%ak{W|lJ@$U<(TRmHdo9tReSCwk9oV-nzlSABReB4`&IbE8g3K+K>Rmcjow5hc5j!)*I4=QXd`+O?G!(S zUJ*YgdNj@A6X!0qtIQI9ex_^M`y#j!*v=B`>JRQXo_t63(JfjXIT$F{M?4=M9t}b z?CYoiZ9ez>Vg`wjJQn4}B55pQ#R&faVeuM(5E+vF68-V?%P;Ie5(`pVkVy@n8Ayav zzxDmMzW)S1NylE~b96fK@Zv)#lKjDzXyKQG8$Z4azF$*5_VXXSgtXE0$@IT{dJb-_ z$$I$;=Lb%b8B`}IuFTtT428HO-w72<9V zTbmRUC+C8xc^8-^|A3pZ`5U+Zm$WL51nrTJPGXM~SR>6~mAt{pd2nj}0C**znUOs* zXpO7{r{umXeC5eB%gRTSoHY&!%+M=}ZfIAT-&3xKA-X>u3j#Dxs9esYa)^1mPY2QQ zkfF29z-2Q`>Ws{SOPQ4%WuiHiPM(SDcSg!!kUk{yRvN;%e1=j3GyUK^WM~e}u&2il z&VgS{KcjP?bC=oB8D0HSHtiSLgL?Tb7|QLG>~%U+_d##7ca$cDaM2j+UH-_lU!flSQN4dzImU!A z>7AoNM$=g%!4_$T_r?FVOlgfIwn&EQ>hED@VvPh_Ge-U?VnlNf=0@giDyESbBYU8@ zd9Ct?#N<(fLxyzHPH zDxLxk$m!gV$d`vE`5XqH@8zVPa=Tazk3~V>Xm zAyC@_V16cY-MHrF z*~@Sg--$$mV8^HFOxxT%uAGufFo$|LuDV%D&W>_|Hw*L%DBHb9M$`UT#A#(GmGZG9te_XoCdU#x4h~c{wC*!^y-7 zxi;%<4Y>UODG1vXcE=!HBP1;aKCFQvW6x+fu)K<*`=Cg<1N`ieNPNeEaNm$wP^4V1f>_Hvfmllt zX}LhXqjNU&DA##Emun8nKGZ{xa6zKL#`GnaJArfdu-wF8V?xyUkj~Lp3tOhDTuNmemM#rgP%3_ejohM7RwN|N`7`W`F$8Ij#$QmwY`JBx@pDTcHnmHU%EnI}~Xs)Al?$$QaqTHv`%;MrQQ}`xj z4tt>^6R`JDU79TGJwbwS6G;&6grH2(P~&JlUre+;sl(^hcc}pdgfW|(|JGj_cQM$WEH&Z`tL3$oCNx!p^7wpBoQ-^>sgasW zc%1b33zUWVnkMbGNEo6{QJ{R0yLU840Sb|utu`+^*8}0mcasKXVS%!+E<{j;y7WTTv z(0e8si4N|9mbOM3xe0p4fC7N9Hu3nFJ!8Y3H)A^?Ik=M~2b)sdTypS-fQ8?=$0Qom zGTUT&9I>RzZdMpsH(#U-iB4{Naf}R7gMARFj#g#|^VE@+Q^19-$s8I4>N02z4+9j# zVuYC%_!9X}4fqye&@I#`%aI~BSgK(Mod@{qWHrh@nCo-q(ctl$q(&KwlW2^Y0ep}f z_C$!FKpF7`%BO<;0qx?Ah_UmnK5{%Db$xe2fpV~qBS|`+;UfDB;88~E?(Gd6LFNjS z{}u4A7=C2+ze-Dvi?rH6k22_cGUliLWO0kpjRQ%?HYv2eS@Q40qnJ-Qe+@acTQA`Y zP^XOKfvOH;vo_Nhttmm@(++5F7jN=P{&K$_cwW0!52c@t8n^OOG4SVP>1}Gg^qqO6 zIN2-j3G>IGx5Iho6oEr=z@gO*S`mk4Pb+#jF8wjBGsuc*4>t$|0b@9=N$$U|$zN+$ zs`$2!81)Y8D49NE=wYt-;yH4~>$VVc4x{(?x^r)FI(n3W6lO}Q7en%FPGlDTp8f-L zA`TdJc4A>*>FI-#vXtrpX)b=xdbcGTEJj4W1;PWpcYU+`bee2F@pQVhOv&w6T#SpZ zjacq(r|UvZ$G~!^2xZyk zTH2H>#9xyhYh!CdHsV=H&O3y=HdS(bQfuq)@}ZK8lUK=KEW@ zGWm{JTR6I^6#3a>fI0TY{SK0a^>fw@GBz=6=ZM>M!czIGHNIj<7f#FQvL$2t!7r5* z7h3$C^6fc%sxax4@7fOF*NulVF_$RJo@Buz?b+z?xV}tMg{4p_-!hMe3bT+Z457j- zqzXUTey4_YfvgF$#TBCc_|-h{Yw;_>{y=)#VeIcO&LkGgLgZ4QQzlRWP_V-|N>E}9 zT9+V+*aW8@4m^2skvwAfHer?NsA!Z*5iqJv=57`bNzOr5@nkYMoGK00qJM)A@G2T& zT#UC=Z4)I~mysA_@;K#!j2*?8BpE;O;HanyjOOOlqw+a;RMsp`N>&WYE*8syQPvxj ze39{Xc_SVIY_(U*#pz`-h5>8^9kEDiPNk4>Ld|)rOBFe53DqCP<~AI?RXDpM9Cd4o0gShVuUEOjmyUi86mPt3sWp-uAo9W4Dss%*($N&W3$1va1#T> z|B86L8yO&mq1bgZS-mA|w?~tZaacy>r5hU{*7X1C#LVMWLI#LZB=4VL*zv~x)^{%X zhlt|_i0NAm`CNe>eg6D9oT~u{W*vJh$93>MZF zcm@S_{BCf52p6w7u;|>>{4kqZ5Wbinf;x5mbiDte`QaLgv4pfhAA}ZYzt%F<3}m?o z`9kN1fR&C(Cx|Ox0hdk@m-{CnAyW{zKEY#Y+6kfwR&X8OGYQU_PY^@X@n$+fWLx82 z3rrEgli4%tb2&WJDKVTXwlZXh_%)f%G~+`VJdi}w`2X1Z7O*JKGwt{N=6rw|K$sDb z8SnreU=ExH9brTiNK`PIU=qzR!Z=K$3^EunC&r`=CfgR%{afv}4W`@t+H||v^lvqr zwv0IxyW19%9x!dXVC)vtrU5kujLP>v@B4k<95{*D{{L>foC8Y6O$yLf@U9n`yg;aAx4yxCVa5m~`GB zBcWuZ^ZtAEB+ynE9Ov_1;1uzq54WQr1l)>Uaye-zhXPt&Mr78{gYGo}?Vwy4wz}+u z47y|ijG>$*jBqa^#(DxJoJa>#JY;~3^@&B}Pp9`gkdDlnt-vrx_Dfs>Gi8u&$Nf`$ zZp&vr;Yu#jevNAj%q_`|gco=Jr!UDuGwrsPWG(qQxz?$dWCIJO$g(oGFsH~$HbBW5 z?W9fF(t-kWuFXoG=ltx_d{~*y%PY;zwpsIvvey?B*etm=TiIIk8oDZrPB@Yx*JWo| zmDS?U4MwfY7FR4XC_x0bzOBsR_Fl8%R^{ffh?IB^wHR^RvHTM45bmX@Q80wZ5iHVP z5<~sEsvzg_VS7Nw{50fzQ6?&9ev1su=PS$Nmb;p!fMwgS( z^Xa(U+(h7ie@Br|J`qUplFlfEh7q{g1?r11HxYP_@rfeWMB1B zH<3?15g0l*(=xgL<`aQmIr>uGU)Zp2rk#_SeDgl}VB+73uZnffSLJBpw?x&*An~Bh zCcIeV(OmhLB;p_8lQIT8;*lzUDTBNR_x~qf6>=xe`KrwMs_?h`z?`p24W9E=@zoIs z`m6F);dsiNuL{^$&H1VjE2TMKl{sIPIbW5qsZ?kD|4UyL0>5*L73=?JUzM$Kjc?7QW6cyZJGUlF@@(g_Wc{M;WdS}*wsfDrP3HICjWAu{wpTDc zXy4nROj$W|RsvmlE#%4uNUm%|rmQtLC)Xxy!`e64-VMaL{4Ku?1w7o4Kqsd#z<{X?}izC4XJ++CO8Ibmr4s zvTU`sIQJ;p3i&a@uIx(+b1*Vi7NNLQu<$afccVWF(XtRLTd2&Vrd) zqeE!Xo2sw}MIJ6F#GYiP5c`;$m1RqDE&KwEJ9nLwP~)UM3xBjg50QK~kW=&sw{K47obcpTGFtB91Mh#203HpCl>C?YXGCyhdWuR=!0(lb+l?~`-l_#5a z4%OD*R-P=@#)_+EmnVyAv*eYt$&(%WK*FAyH`_efwTEO#^2dbAvKHh(M|CJkE2if; zkIRyMQpl36PR*~5$dWaI3mm#dmaHT8<_Ad*Z&o-O##1_+ZCvSh2mVX_@e353aV*|1fiFj?-SX1Qc|)Y;RO1QEGH%q+y( zhCiPVZsb13Wyw~B!(_RXT|P^;D*5M&S@!1j$lP2$OSX#7jpaU{&ut8U(6ppu4VNWb z#fQm44(1Zg%Hbl-lIwBGKj`;lWVQFbm-7J?fC z&$muYlubu}FRETZG3nx>GnwAiG)(qH%<}>q0s4IU#EfCGBuG{ikfWSB-yV~z(Y1TO z-&;$`ODWNb~9(xA4lv#pF2kV~W&+094DFTxq zOqK@8#`qYV)0&&(YxYEL$!=IX6CiaDjDIY^!;GMGOF$aGIeLAzpd|c>BoTaSKstAV zWx0Us*?^LXq{$LI@-;W?ue_(yQM-@?$@Zzo57tJ6$>M5Alck`9b}(F+?6ceb5GGsg zK8C=o^T)AcBFHpAQ-sJ)2#{4nFyK^i*OLQeQz1)%#B-JIj}DQY6d>z>G}}o5*OS7n zWu-_)1Fns-i6OF+17uMON}ZH%J$1Hq;3=%0ly5yvw)L7It7_OkZN7Cxi0s4w*|GH6 zv8nT|XUevQsp1Lw)-*(Rnr!Q#*dTG_iq5y5KHD02@Qn-7+2zQFGGrID{r*!z!1XP1 zWTP`=uYNb<{h4!Q@AiKOl4Q3ak|n#0iOP}HB_Dl$c3H9$a%3I)@v-PESt$BClV3JJ zY%+i-5^x%+62?580|wyA;y$#$W_aFA?7j;z1stI1|VR?Y>;XOaiD#`rBuTc8Pm*m+Y5w}$itPWe71^29 z!UP)ciV=8Z*&z!YNg%>k8dIPD)0qb8W)c~1F-SMl{zvj(#s0@M`D7J~KuYsALdwV8 zjoub5e3pOFrsL6xvV8JTD0K*7wFLYYi|r6sR!uWy9gKXcOxf49fpm|*1k<>(sWN2` zMP$mJLdLZwnk&0=P_zy_Aooj&AvB2-6hdWx9zVc`$~GM?GrD#=@Hz;VahGQD!BdEIYeYS!4{nGR01BDEetas%-m@ z`%>I?6OAXB#uR#{R9Q%o?OaNd2?lN9WP(|^LPL)1yS`n`RrYxAxsvn+e9P2 zZr>Gp1<<1s>I!{}P}!Csp|+J};he~6Qe{>80D^S5S*6PAkr7T2pU5?Rsw~E}BakdR z+f>;vpn%LY%T(FoCS%|Xp8XDp*sMh)ZRD1zvXa!V%7pOF+e(#v{q3G{NTm2rq{@=K zQ6k1u*sMq?%oAorQ2&h||l{(_q;zifg!F*>~cGL&36LDyEeL z%l1OBY_al%P_XQ-{q^f0ALb1Rh&hw$X`dlj_9x+BSy`-6>Z^0@c0;)ApWxjuy%-%V ziz0(%dvjvhuKiWVo7b0rnRr6? zRA_qnU|Eqzv4t^$DggJuRC#!zTgeNbgUGEkeXMLoaUeZIJF8e(cQFE6i%AdSgjm_t z8SXeOnq{mkM9NB1(O@-tOwuC}Vr9woHbbziA+TfcjKqX*&m0;_-$7gocvbTm*d4w5Z}}*f zwg(_ns`2*N8xl7aHb*b<&KT*@cX7W68q>F6Z&OBkK#0esLL7?qxDE0KAs%**CnDA( zoFH&pjJtd$3uLtZC&=5XIr2tBXJ-@X@n1#WZfAiPK`XRiB6*`z77;tVH}*bG zb4|natzb&}#-(~prf(}c|LNj+xn9vDza9D(#IFahqc*f*HuSB1mzw=5WSxEl6mA;& zcB@p6wC%wgOXo+ixY?$9z}~LOKKWcuU~pW`AGZIzh>$eDcbon z5Ttqn z;)VR+77re&kt^4GoBb`{#NMaHT*bypSaAnNPUfRLv4@H8#CM&PL$~NP_LawWH^_|O z6LjT6c`V}}mE+$tkR;s~^NO@jV==~FL79@przS1Iz7??qYhgvNMK8jJ#JqR)4*VO` zBV#s7%TRv|yCMy@8w{2H26T2YOuU_xCaxdHXs3^l*cCEI<;?d)HS(L|s8Aa_AR8q_ zu~#O7P{S1bhHUMUF@1rr{%B^qtku$?>0NAMAn!WAcd<&eez&U~r?u$}c$M_y#grx5 z1dXp21?2?(O$pmA=G?$i5xn$KQLQ$}kfb`FL*~#l!eZ8T6S6cs2)zmX5b!C!u8o`FWER&&v*&FUJ_*Q)RfB;T4z zvX%uiPsyl4IAr{h2QOeAMAko}&ZY2c8ar>ESJ(0yYG3X|g?L1EJrjoSAmyX^->>(y z8byoZVvfsX*t57q(H(cEgk5fsW@4WfvQZ@@8&$SCCKLaXB%>+{*9pm}WKZ(I0*kE9>F6J4Qc^CS?pL}U|Z;#QkeT~@j@#en?{XJr8<_k1jaE91-Ydp`(VyWmz` zK&O*Ib8JfjZ3(}aYQniE@!34rp4PM~FfJ?RqEH*mG>LB65jjzYi*A_GAolu>n0`$R z2}FeqG@5yBk{a+y>!mI%2HELYnRTlUGEX7-wEZsYMi)t)hO|?kD`p=AoeqjbugauC z*r}|tMBuJRTwGQu37lq?rWqEM^fhfY+8A^=(g3VphQmILR-;X>L-D-IQxsR(xXWiZ zy@<*a?&VTqZ^WTj^^gfmnhY7(7$Ni+@Y|N+;=XyiB)#IbRiYmFq)xF+Pl96+Dnq^p z_qduLEcLb=Q^5siz%Oyx+0YjkqGR1@=+RT%I2R?BW0D>VP&0LQHlQ*~vt!%il)b7e zTgGp)#rt;ls$x7ER-CC;YSS_eALrhYVbT?vmVVSD#huGo-zs_MGWBNi%V)gs{}0;4 zoy$tHCr97)E^{#l9gF-83S8!W7sL3kBAJWQzO(@HSSu1&L(Vn5Y#b?fU%-z$8V@bv z#**v*H_l8PP-TgJk4*6z{ARIz1I$rZ)>q*RXe4=14PnXMOLi5;=9bvMkPq*`pk(j9 zR@{dGKO1lg{$}!@r2vHO5$ z+N16+DuDFY5#2cYk)VG^r7l2rn++9|tUo)6G_ z8lts}?J7}^7TcalO~eo5-7c&!DVCZA@CD%2CDnXSlQZXIh+4 zZgN%ngShUj&aFuweM9tyGYuX9F2MR+VYAn@+xsw&!e1jOe230@vf!1c%pvqGv;g{| z8@h2{$;fLcGZ&yYe?%6SRa8Z=cOadI-I4B%N&mF2e?6=2TE85ib}zf1OIjx>>i`+7 z);P5O@n7f%)@$Y=?J|lTaI?VSY-s=j0mtz!_|M4m?yuJxjfg+*^l)zB?ohXrJL@z> z5blLiWD&cBC_!Iy7PjO9JdnF=+s1OdlYxM%3jo^Osf!If33L3=BJkk{4lyQt5`PyM zf@{yHv={$!C45ap>@@Kcdbe1AN{{RSwG~|eDe_&44TpL7!aZBcDwxk z)sU=w2=A*ko>;V}(T+2WLD56rTJb%DjG0-TVTMZCC%()Pn$85kArgt~HwKy>2dsbK zZImf{TpA<0A|Zeu278m#iSG(46$EZ9ZMe4_0DnLUnCeMAgF54#%9D~VRdxKpfnw5c>{+;{xiQi3iYiEZvy~ zXnQT5yHrJ>619HaFeTbfK-%EI0k+?ae!{$9F1J=G@ZxeS%SCPL=6A&kG26QN0Gx%% z!?Kd(fdw0?MEwie838E?N;U=@;z*?2$swh7wE&c!mEQ`Zs&TYpZ$s(ouWMQ{M!bWv0J=&V3`)ssDD{!v0=xt1XEgHl?Pc) zYvoGfNvT@^Rq-D0r3^;D#ZkI)28ueX6Y|qG3oCZ;zRQN+tZa^){!q)A6moFJqqwSAjUmV!5QRpYQ!-JDNS*K^S}Pnepsmoh5eFPhn7Z0cucFBe zCJs5uHYSl*MvGTx-2Zt5>Rz+4jt-L<>8eYdXh((-2K5dghO2|lh(evmZt-1PXxmhd z1xSO_{^SXUto3`pAtjNM6qaEQ!d>sdk!)XUF~$M6D96upDD7(FxU#DyOI#xY(5u4t z0-F7U6wulmTo4HCM^;Xll`$MSB2>nQuP^54b0#D8;qOuY+%l*Ns=SSaMEghaMO=vQ zMsm0~-CJ6KN}D>hrbJCOdOh3Rc8Rjg!`HjDI1^uL*C?-w36Yj2-Jv!}7h*!C zp(X-SUyWUG=7CCcRO`@uIP(BzwZSL#K>fa|=)->m3~mK*1(+{PitUcg#9^XkiX~qN zZDTyNO1%lzZ)z0Z|B{YS>LWTzsm~hwm_Rbeuqdad42z6LxcihlP85&7O&f@rC%>3x*5mWzx&HrIB7ffPMZ+TwR;BXGq$}vFa=Dp2l^)dcZrN)&ujh39$yG zCu*=js%yzIEFsnN6Pw~n_jlncsR>_59UC)*(>4quSW(`UXkcSsT z(+U-(5#Iea8Y*DbTR0qkZj5dJv?lQqA%G?+wpeqW_-c(*S+S&J8H=5kv{lN(76Vv4 z_F34>Un~19^N#2ATUgCz+;4dXo8Xs^buEf_Ca}trdV+k+V2vII@CbE$f#;6>^NW4+ zer8xO%zWq+W0QF7m=3sNh$oh-QmuonqDS+B&P;spzUrz9y8wXQMZ3O>bC1s}$3PQ< z_x528>c#o^6#mDgO>TF+A1-s*U2ebk;W68>gl^y|hZnNCk(@r2dMJzC-kLP8e<}Or z?)zCUb|xruL;<`|JP*~iz`-P^(cQcr`75A@NpHpX=v7#O;N*BvZWca-0&4Ow6GSYw z{~3qxK$zj(=Z*u`_(#GTmoR_{aBBf~+yGx%98p<}iN*lO$i)aX1qc;V3I#WyF)kcM z_v#FK4hf3DdD7s`#YVIq+e=-3HzAa}w}~=}v$w%>L@rYgblmsVyQ}cxdf&dCyT!6g zGIvI?CFi(&0UnceiZc}%!?G$l!PHix5@t;anY>p{QPs6aF3!z)-{C+Z0p*Oy&+Wp# zsphcNr|2$v0BEN9gp3>n`Nwj^GXcste0UigXPAAYv~x7U#5mEW3I&an-8m2Xj%+*9 z184XL1g%Hu#MWb>4qA`48~1d~G~V_X_Lf81ZJg9K7c)EZKRRX>!{O)mXSb3{qtvx~ zvv>^yi-5>p3&Zzq3ennTx2wfnztzU9LFgco!UFAy2@ABj)*QG!N-(YWF38|X*5BO( zP3J!Bx2`l>R+`N@g*HBqc01Xi{iDPJHE<`|D#m&V(I2b@YYGb2+ty{TDJ#p*&dV)Y zn{6w|U6Wm!x5k=hv8<~-utL3lO+ne8@v~Bxbb{rM;%Ax271~!7=Ci^IEt+>4yZ2B9 zzzi$2ABR?G3vx`#T{*F83l*tJ1qtMU*|jP!=dMLncu{_x&7HR^zbM<4XLZ@6`R?qZ zT=TAM+fHQ=p(0y>)nY9w$j!~E+*G!1+Y0b9eVSXS1;DhV;))W{CdV?EH)&bh;A(`b ze(k+{sBJ~kDkpQe;MXuDRLHEUtMlz^MDcpm65iSUtf)^q-)eE~%(t~kcNLvZG8ffl zyWDyC*@%fn=AHRFEp_>>U9Q5qD)E4vHE0;|t^%vgy~{izauwue=j|-AW{;o7T9>V^ zVP1VA!?K?%avHq#Z3fIr-&0yK@W6JFQ#ue=rTVA~ORVp9EgbK{ zHwWZ~zJ$w8iK0(B(xn%rNMQR{kpe*O!K|`h#(Y~@S@x{#jLav|DF2c1Nu2oFc63-O z0oZg{$&DkT^P+2!_9}f#ef91f_!eX>4894x#ubZ%N6ZE56lDy`KyZyLfbeWE{E({P5~Z zaX)icJ07zZ)#q9B3f%BQ6`Hg2%(k7`Ps4bft$t@+w#8LYkXryRc3vU>)(*%-o22me znIxWqoOV1og4=WYWFzHLd_OwC49k78!!nteRdR1-iwxsq%;>O8)h8PD#fr&Gt-;-5 zk1{jXPTx`%In?kl?P`cM#=`r0CMG{S@-5Ab?UWmsetmBYD|%aOkSUhpLK$oaq2IFx zRoDD4$;5rBSA7!6MwLmU!G)3(teIbBNJ_Mup2uXncms%Wz#X~O>~sl6S_B$0kzSz0 ztvf1n*B4vO*3im3IgwhJl6IgRE1v;Pm$qSHo1AmHvTe!Bx7duh8|7)?$P)<<2-wC` zB;&Y2v~_WT-4k%=sv=bXe z^=%uy{$Pyf@6cXRaT&KyV>b<>>-LLGF8mD{v-wtA+&2Rvbv_gtPAqJ3LqXfmu&~F? zt#LQQIF&}k!X`H?a_4F8!nLu*-`5-npy1<-2Co;^xw%#D6Aa0P53h3<*NO)pKl<|y zh<8Um&!u@|+Rvdi$;riS%tOFgw)#G+fuo3ZBJnrSh_s0ncZ(8xG2PI9M4RTQdrxwg zy9ug{HI4Oe;wSI`a#Z3?zLxdXi|Bs#S;eOqEB-OE|72bOt+^oU`mDrV|D2=?SU>zY z%pr#Gy;gn7NwEwcX-he&x)e*~LS1WeYUP{rea-vrrW))p%8H8ZX>p^tQ`-sbxKDMc zy4mY%J{SKJO*gXFn2~#3BUBL8QbO3>cH5EsT3ENvtzO*ZZmjoLHKr|Jma(D9v@ami z>T+{WFKP*ISZAh#?2+~^DsdMtiSI}HZpkuf(&8SJ2xG`}ODeQhJ(j$4UyB>X3^UcW zVl(4vSul1WnDCH$t*egTs&32qS3{PnIJ_hFe@hSsieS7Voag1=XUh?z#q2ki(GaZZEe?-SoI=Y(##C$bov*wju4-W>=&C@8kXEST=T> z3`4WV??gu=&nCRTUN2$hRhD(4>TSrhdQD>^NWHah+LnKZF&-*z^sfx0<_97-sUx?j zlN<@iM>ZF^t;JK;{eHQvDb~9!yhDA0-=Q8J82{jwD~sC-re0b6KhZnX$Z+KyZXtX6 zJ?e;k#ZwVG)NIchWAwUWBj~$3xQ#^_(mq5<dFet|pY&u&i0<_QSTOIoITFyxS?2gEZwhn~X_a-Qn4eOQ zU?_*k0|Xr$xH3uqRuCOwPqKyU)>PJ$D#A_+t>QIyIT|c8twk|PqYT+i9_D!+mf?8N zS0+QW9{}3y@*G3LHaEd~TD?rzl?gviF%GSg)byKZpZpx=qQC zWxo~mpa!^?cDeRpsRK$u?s70a#jI(G*pxgDa)*aslI%U84c>ZDl3$X1GgglZ#DsM0 zJxKd|NlY)YJ7ilBx&F)dfo9y;;(iJbqm7{C=unIZgo9@HG;5L*RwPG62iQD$KkT#J zMEy8kJ#kI)M3TFBJt!ev=){B-$v{wd{%w7-F%YCVnEgiO5GZsHgk+w;g%wS=YB zpH`HbD$9D&A#`+cAj^9--IRlUdHDy6^+;wnP^$u6A)L0QL#xPnklCvi(dA&~+|BF5 z+^IUktx;DcKUE)j7>=Y-2&+nd$SHidYDss6v#-Li^p6!9iL>M(Q*zEDCM&E3vcn}0 z)i9dH>zFpAJw%bm?+rmtYildNT}>dxLetUfE&}p2xc9iSy?|SUgz`YO610YH%z_ET zdhCA@`E&M=Z|ALRj)3P0K$XtqngFE4?nZ#AheQz|HQyS>C?1J8?+AiXju1$N{38IL zGz6q5MsZ(onfn4Bqpni4zRbf}G)8g1cZmn7j6#siX zNQE$p|1f~mC&Q@HD2$pGWQsxPfS3mzWI`_PBQ)!y$O$p$SO?F@$;% zczSC}d;)mlpox_@UOOQ=CoYC2gjaqHeQ1A978>9Pt#IRhe2rieg{Er+n;6>-#~=YJ zp70G~qeR5OI4;7OZ_1$e5( z#AW`p;yOG090yOj2z>J8jqv!y!_%b>2H@#3hfh2_@eezXP06wrc3glb;kP(^3c(Zk zaCgOrfKL>jE&)CzQ~u)dBJI-@lN#NCR**kvpJ>Ewm(nF%_yhOWk!WhNKjliXDn@9Bw?D(dK ziQ-bX&!d1c4RBWk4^vgivCD|vtv+zOh|yKNQjyOp#Y0m7IgtkeG&!*sAP*kDL|;Pi4YZyPykHOoVaZU z1)%gYu&6Lh-3EjD@XW7}uWFVID&20{bZAL~i)DY8+vxeSA{oe27pPR#i_KZy7t#l^ zu^}(t2IT4FDvmt$77+4un3AWHs|51Ior;PD>;T)&v!sF$c`_}jY7=UYB@x`oS>bH2 z&@4gPuTn6wn9U~mHxiAUk$6PFh!CWi@W>cTs8P67BV`(aI1j^_ZiRtqgdwe!2?jSj z^O^#fx*z^kpB{M_u-=LSr`rUkft$a)o8wPY6?s*($RkEvGZ%R5=s?eOZa2aUJu6^3 zTi9>vN`}`p_>}r5Ak>6Qyveu}NWk)_60dA}TtY!u<&9F|pxZjRyb}eGxMf0#H#IJ; zVUR3>KJn~nN?ejUP%xspn*o=go`bRB*;wE}Dc5Vj0yf1J<$ z6J}0O*+DHg(t-ciVP+D0ngN%fo(nXgQg?&vq1ofog%932pfr|xJ(Z0u+SJdWx6qb@ zidSiISD_kW&WPOUnIp8glZ*7puaM&IC=_=!qS_lTC;kcwyhGwQbzS07s1IF>4vUj$ zohKj^B~jJM{uJ!*Gy;h#)(ouvw}qiPPc{#TRGF#Nbyi&Wv?3nxsS`Sc$hKIY<^5cG zZ?+8BlMw)_YZYZrW9%r~T|gLAJIA29Rz))?GjEcW#^V#ANri2cY(d=-%i|OIC?FA3 zax8~Wazs=k!jS-@0OF#F5(Om!P&1Wfq}ba#&xLHDAyHr=)Pca=HyA7N2s9<V$6*!s%|nIW&p|_C$FEa)iT|w`Ydry~_|KiH%p(xx zVJ;09EsYYQCZSaDX(VopLaB8jl$u!Jp;|4P&?}%QHL<|MAoVx$Ff{{vy5EQcPfl6n zO#xFPBO07sUs z9;Mi5n4(gY08=1EjfyWmTO5|7Wb-od<}%Z!BS5CO2J32os*@;y4lZuU^8PMemxF8a z#(^K@Hvw7=^K^=(bgGZiso@E9Dj?`kjS*C;gQrrOq&AyHT_pBbtwBP>Iv+Go2^ARx$p)M{hMG{r;)*Qq57S4pabaG5burt{vU=3V zeG_o1R=}xEA)L}IM%piNs1$)nfKQW|(`-=b@;fR7=oW&dZ771HTmn)< z3CSdY(#joQ4TIDz0O~~$sHpD#i2!P#{pLqu5Fzco{{%qY936)GE{acuzxSov1So_8 z@IC^y6jO}+9-00nhkU^>B^RD2;W1(hBQ)I@dlrr=Ug<%u@=8ex2S z761ix-kQoNIVw^xj{qnr^Q6%KuPnPIKtY*z;9hi(*YBMzKtZJkCO%OOy=egoDm^qS z!F&QhL768K8hW$kQc&duNk4BI!F+;P4&@!I5lE1{h| zjhz63Db(5H#Hk>MQkwZl+bVXz<7lx6br|$Qxk8Mu@C4>WplQ;Cz=Y|5(G)3)oDhIM zTD*thkd8Fe!HYRkA?C5lG@sEPvxfnTFaJ2Oim3jgDnCyfY-MhXW>nocT>VW|`Sm=0 z{Z9h55vo7I3!Wo9w}DmHM+b&)L8xX;rcjU_C-pY3pY!Bvs@iWVtb(@>8q0L+X_^6q z3cE>*f=}}U2or0+Np&BLG}K1o)pS@DcoI7%E9cXYDKu!r5nj#HW7QxM8E4hpYk1;< zLq6-~-Y%?0DYI+toe;6Az*C=~xpxz_z%bRUn|r^gr9~h3pgL#O+2erfYpcdrk;#K8 z3%}^WgGkAo>*~b>+TS6Q2ea(#g}Qq8NISO^QL2N8QjT*5=DGBzGU<|j}U*m0|Es$ck?;`uO zaQDF|3aqtd?Q|RPW_t&MmMs~&F}(rHzkA%YAp+xIp_*P@i{xY|aPnlygp0@tC1Ufw zT6_#$wTFgWrn`^c5ZlqfCe=?^UP#juyFSbw-`Ud4S6yTB;|Lcv>c-4O?{UB=FKnE9YyZRKR2<^Y63n z&4)Kp=(3okrV^iIYsCWpR~Y{}bQWb{P?gUlw77@R_j2N?l<7K`Y4bK+l=YyKC=Q%6 z*VNUOj8Fjo!HI(CGxrixZvTDGXYZ3S zzv@HshO%OAf}D&R!@M($ITzKPFF}YKB#)dpKHe~>`dz)Kev^B}10~LOh3Wp2;`H^+ zzCHb7!)}zmuF`+mC!fDZTQiI_^NcL} z(v9}bhRv+1PmNBBUmB3I=+ahSpG;R(l+Y_<)#V#rm-r9Mj0rn>Wg3l3Q3i`a0c7GH zTqssnZuJqH7IFanFm|*KvWx7dQItMJxPh_Q-U~*~@NP~q!_CictD%Ap&v4sK4s7T6 zrJKxAz-ixue$T9|USq=u&InLRI3#3s&RzT{a@YS*tidP6&E&`LkdhzURETrUwFrfN zcH!YTCL2Zzfl`xqyN%&q2|L_sWNU(sw8KOQnO+VbeHasst3i7FILu9d(1#vB!fZL3z!|^0o4+F|&Zk*T!D9WF-i)m*+lOps zSqJjlD;qiUcQ{ma4bL%h+zyFiZd9NW{W~I~=%rqHJvPF5*Kyks#oz-^J>ZW@qdefx z>3xms4eB7~2iuQpOflOKT|{evQ9`dg_V2+D%T-@ox9YMTX@7^wL&Co&@BmFccuGEJ z<_QbG3HHAbP)Zm+ZEMN6g2_l&5)%8G`@d7mghcksOfTUWL*_ zukHiPVPww~H&1veM?^4y3tgVv+(N54x4@R4S6G;DGuw!(Ne{lXnd!!|Wc+1J)<`jG zvo+U0FY_SuGTjVBlGo85bO!D5KgivM#nytNJX@aC_A2akjNdqk?hyZz_)mBb`U$Fb zC8+L3Uq(B{UqL?-e^yl42+vG$p0y~isG!hVln>qkXeB!TTl60a*lYp#IuZ-}7#m$} zWOSt&=`?HaM&5rx94x^RAcA%A{y$v%V5WUSEl?zSbl}C6!@uO87mnO0oXOPQASRy` z-ou`H#+!W3jKfTRlh^T2>B>Djy&1p2EAJ(TPRBTPM0#4uR3NjHakew2%r3Hs{Q!Rg z8I&w1g9Hlx6keWu0_hs+Ma4Eb{A3%qc=t5zc5j8PhvTRb7~SfO@bb~U7@i{Xw{$HE zEfm289I>7X)Dd3C)o3ji3rnhk@eR0T9j9(tN0{1>y}h_r?wIVD)##aQZ;xKrTJ|+w zjIg+m_D2mw7-fAyF4i^KO-~^El7vD@2PAJsxkXA8sG zLoM2f!VB-TRLWOo7>|R$#G`5Qqo?HeOmA-gp2q)Rjr47#k$!QP$oOI~XPj; z+qbA}HqEMBYjKZMd0W=@VESSF`S{gjS!XI(KMXA>VXGyk$&ODo^IeDJ&n8s6koX#$ z;1O`t$O4xq*w}C3VhcAz+m_FifU#K=QEHc09L`nlG0lrR5y8qcQl|gqaG3fqwMe=c^J^fd4 z4`ob!4+$%ev8eQ)8?2zL&29iKAOd&kIJY#L$Xm)bP`PPQiD2l|4#x@-Ewvi+8mno-`Sadh!Q&ZhBawo+*#zEhg9g!(iJ zR$*pTE2cKRH3?wTczm)=BQXo3c`QdoM`hG9Y&ZBcf(-}pX>>&TG6{B%i z9+CJ~fS1dqF0FF06s%=xWb5~UNh4gP-%zyUj}IkBSj+qb+@y{sgRzX-3=od>!B^%3 z#<$`&aA~a3rCo^0{$>${?K4XT9E}rf8o#fHyK~^DU9J98dTJ>%n6BHvM%Xk`m&PkY zHs*}-_qMXqd%>ykixaFG-Kr*hrS}55M4TEM48*Ci_%~qHcoJX9%6IKKmIh9ZzvS)1 zj&oLxI{X&#lNlQ6X`@Ds!X-+L8o^Q~p0$FXjM#*A>sV^k2tJL&cMbDKjc=m?7fX#A zWzy%sD~8pm={4%C6nq-xJ3H|e>fHstUDT(M1;dyWq_t8I+auh0)X4|tgo)f9X4rKE ze+7pzdf7Pf+9`-C1NSNKrXmp4unU;r*ai(5FmU92RU#Z3qYN6adK-fxvj|LA=^bjUj`^o2$_mqWu}m6L7RQ;}@qgXQbYYtBE;dmFUABF?chM$@G)G8COtq#_7Bn zAEf4tf;XcRwTTMBb>}+gxeH+G%exyB6F@rH-&lQwEor0vjKCgx)k^Bk*ahBTEu^uDdjN9}&e2kjp05j1jnSF{f zZ-b~v3c~4%!q>9u-9z9@Hbi{MjxX)ue97XZ#H8_lQAr%Ol`h~+8aFFUr>RNf0a4p) zfs!+J&4+Z9Ljn2g&0`{n+e7aAA=}?;C|=Nju7NTUAyiInKQ;25gBHhaMX$KAm`)=4yYpP z)~I+Ak+&Ju$Qc(-1+~T%{JZGpF>z{)1-CpslIBEs-u+~As)Tu$7Ir%@_cFHK?BIE7W?R}FeOXV)mWH4<|$YS&2Z!7^o6Bdr<<UE+mlA+p7SC!2W48y1U1Nk>qbIWpg;RY_E(C%? zjT(Wu^FEFE5AQt2do>aOek+@IYD}S4jRbYSZfG?*5%E8cu~daD>%fX}ExNH_>=W8C z5-Y~@QhAwRT)T5dJ4Vim5!_%#2sU1g2FK~`7{5$Vkfr{#)SkBU!T#+|FktMc0>rxk zCXD;FT57`ByDZ9tagsM}LC#}AITB!yhrlv#Q_O*Rq(1|mG_g!)q6$HY(yLV#G$f9U zv<2WH?qUXeiAN=+>`jS<*;8XYvfZ*i;MXU#{VM{*ykqMV8 zyO?h)k`&fB#gH7}?^l3-`emaUV#`S2?-?*VYmJLVTCEr)eK`G~L2^wxBA>t}Z7pyF z+P);!biEr8Lf;$_5y*AmS|%WZ1CbfjTqqMJS&D=H#gkP}qZ%8bM*=$u)XkBU<>BKP z>D`FL0Wm#y#J_QR@5Uz_WvEVIG?Tp>0dt9td64m?Fn6LxveD@V3&$++Ltef7o)OUr z-ZrjZOwAjYDKs+gPr<4&4y+ra?HUs!{TiVK#KZJsjxpm#*HO-{kq7Hf#RjQSW7woI z_7yn@j67||LD^uYcKZVO2qn+piBB!gwfB4gJ}o0Mcu+W5A259Do6_rpk6^wZ1jRCs z=$iOE(-*;NdU3ob{<{)N_Dt~x@NDb{^Ya~qSa-@^h|!i84P@eP0J(k#$Tdn4xOF!` zKvA04qfOyl8;>Z&sy^NVoj^aR-;L`!bt$pg#wgpy!8RipUB2ZUpT3;NH}+Wwt# z?COlxqzKbSO0l{7pepm8pDC$lL==j9rH+WlgVu`*q1&H=hO0?q_P)qdck)?YE zA}!H5;Ah!)Py0jy_)|x8!n6gCUSi(p%jF%>OAKJz_{##$d-uvbBe6#Z)~zwJ%0Sas zMFKJdFjrF7MsQ1SwF$0`f>nBid+rUk-ROm&MgfvTcIj-|SCleqj1ylfv1S&iz^ZoM ziG}4>aBzfQKC{-Jt^#BI3n%lv*p| ze4g9!zcJ=B4DnYClLlgx9|nNWnvF)U+a>r!@-i7Qj~qt%08qPm&&Vv0I?!Fn%2`Ij z{T%5TDVK%mEP02vZInaJ?*`oW0NfLm6Qs?9;uhTkAi)Ix2Luva zt_0|ZHbisoQw-M_4O#QH9Mm66yUAPg7Ta@0RX~BC;VJM^g~_H)`QO@%WO(i> zz*x_~yHx6ZIUyh=YB}{OClvTGw9Nom{!`*r-mZFXVfLa;Fw6mlo_`Ba})0py-k|0;fLxcT3?%n7kZXA=OIWKOJsS4?jN!2Q8; zk~eXDT`T_cyA?gDC5c8NVr<<|v(fh@pw3q=lsw|8S;3>_X(KO7WGTl)*U_5z5}d!} z0@`c@pggmvI;`rCt#a*=Eh2(MPg@hbUDVTDUqDGRFG_eyWBNjQwGG7NmIx9)8z)E{ zzOQ87d7Es!@7}KaE@xZd(N2y~>QaLfZlJb=71MaBbHvTRzPszJoXH>@Xsc=$1&^$?l!0L4YC z6f~O_qw>q9)3!Ak zz!SJZQl8wcIuCk;K~oS+(BR-;CN%de>pNoGv{%s637o5M$KsEOsc*n`C4IL$OPRAS z+Y-nu#)V2oBfspE0|=uyoJt^gKN$Lw-o=pxt25}0(T)Nz+QpHvw-h;{ZZFrTIHo9i z2=MvEkp#$&$S%>ZTmL2t@ev8Y&QDTyZo&p&=ATh)P;|>J-ISKg7khe0bi~^oXkAWqiF2#m?P*EH%RrYfFXIXC z#`gzwee%3?0O4oUC5e#aLnY#eb=D#4E8kxcV!4Lg9^}KvR)H|#G!bE9Oy)vM_TC9G zT8lDl~*kPUVKRfyWdt&Qt_v|{qlNn1*h!tdB97e;$|u5*L+Oj@>(L`rN#Jb zmtY5e3Xqazox!1nRREVfQeMobND07l2Sp%SorH2B;6zZDa9(8q;34x|9QZ`2BKv`Y zlAH)gx8T6_GAW?sawMhRhM}~GkpAGW703=1AHcxhwr6K#Tm*~_5L4_(0fLGT!7s=i z_Pe9wBBszEi1u*Aa4_H#zr=yKze)-OE-XPzN{e8hgUpPDT8F%;8Jfmo-mF}}bP`W4 z&|Z=m;geh)OB!K5uLD!E97vr3R8VjdmLA^8y>TknwZ5fWi# zB0`m*2@=2%NQ49tCg2SIoNLyS2#IJtcmf3-IM7|k_0A*o;J{+P4+H*RVHeFKZt9eV zPfx*-LmZrfhEJvHYJwdqGV0KcZ>{PQ;ez<66CNIagJmaj@vw%w;0%Q8Y$lk<(ukex zjwVPMgKhv1w`1&YH8 zs?)wW2tfGH*(Uv`@E`%fV~SY&Gw~xJQ<$&@fN&q-sf42*$y}f%lgMFfdJQn^Qu<)aP7io<}X$k!mCV;}vaT+b?vPzQo0KBwBy~B_=tQ=VWLc+=A zT$qmD?(Ru@oIqg{Kq1dYEAm{)EW6F_efTAHClJz?e@6)Ezv`@+xgV{7iUnzdqAY}< zA=pTg8;GXD=QfaR8gj4Fv@^gHnEITIC&gT_&2aZz^`2v6yYen#O zf++*Zo8d-1wrhDAW1K439LETPk*Iahmxv-0D2C^e@6n{?!Y6(l2^^^-+tr~&;(d)h zI`c~Lr3vY7yvQxwI$PCgH~P*Z;p!2X`nCHQBScjlAY|R`-wb3utZ46Xa%%Pu+L}=4 zo;e2|;DV?@$a)MfYEZIHM2+;sHj+poV!>dWh}m6>UMMt>NQx05lH!WmI1_c}0bjP{ zia~Bn6{0D^u@qAxJz?)G(05?(A44DyODH^%ISPr)0py)hc*@`*3Jlmh$Q&inGRO4z zD%vn3zV5wS9+A?s>sy$`V@-n4L8akol#UR(PDEBVJ$}4z`-U^PZ#(-ZX95Vq0H;+C z4I~m?`C31}w*$O?}P!I%MZoFI`Jyl~JG zknlMaS>kA&L(ZVUH58_;Fr>%JV-Mt_*p8- zfP{RCK0$SW%OY+*^WoPN^@ z<&QfwC_3?{U6q6%FROVko9o;=%vM%Mk;Mh!XKzN7@b5*-Wp$mdX()6G!G3;(DOP z6-y!n2~P|flU3pVxV*!u{Y#vZ&udvpg-i26I?!55j(-Q_*eC816Xe~7N8{wl9iU2> z*6BKQf8u0`Dk@9pmituyOZB8_^oIbaz3TsffkmPO&jTzq8plz3KA+ijFX$3xqD#C( zbcquMt@r~9o_(oRiN-6jYeCL{PEgYdr@7(h6f|pj(9B6ALZ3N}D!)ycCsW45(yyqu z{i7gJ_v$#L^a*;#o50WMm_=C6SO@&vMIiDVuV-8uWd1;hEcABQ9v#&*c$RLSNzWJx zvh5u0j_=?#jo~#V%+<6q^!_SN{pGNcWMj&VAz6d8)P+goHXDPAA0&S8e2GXpI@hqmY8fv5Yr)HMU9|tyna6 zLjx2o#IgfjQdY%bVo13F;bP1wjSw#UI?bIh@o&OP`5-Io^qV+Runx>^o}v0`9IDs z2bw=dXnqf`bz}m?|D1wmAZfGju81M6w^6xel(77tHb1+$W!qv8_!L|7)9FOUgTgr6 zWnlT_T5u^$dn0rYS?pjOi7hSywvQ4;*p_r0*gljGf+Fn>@?>8e(~3{3@)Iwj-%Aa> zmWiCd*W!bDxNk?@15Wi0C-D8Yq`LnoT=5?XniU-9A7k7)!>XrR-!-k~LU1DVSh%GkB2GsZ~7rQti0 z-Y?aavFd@f%g1}(zVf}8{vzGp~AZi?S3iR^%$d*||yR0bXp&dS)!FS3ET{=xp z?VjPtZkf#zH6<}+qpUOc()qpvEEgYa*gUVMdST{f(Suubx_VZl5pc3If#4+9A$uDg zwz2B5CK50CT>Cx=nKMJ$rIaQ`&zlLI*$}N<3ndKlQ9evCAbi9lr_c}zIGTksel(mC z42NA{Tfnr;C*&wH)9Vai9h5j7= zf`!*!NE;^Fg)bg(4iF=zLst&LB!coB5rm1#(2XgAgCjbL6GMX`D;NoP#B4%?$8WZ$ zLQgG}hY9E&6^J=;0)v+?LKv4TXc%My1KlDaIK*U6XcS_)90`MH6kN`v+}*e|mCRwJ zF#Sl2LC(gjs$_$X_vfEXpFcmF>u=XJSfos1o ziq@A@138)L(1yEM+O#Z$dL*g+AU}#GS&44E17!G~PSq$GMY|Z)g6k)vXrGCKyh8QJ zb8l?hzeAR&>@%l*F5wtAik78!kESQBC!=V#&?uU%=vjcgud9a^g53KnO*K2(WAgc5 z(phyjm8oDt?4)D>jC~L15zs?&#nNw9y9X0A%`D8HsWs*7@;B0D=BcpR5j}Ut4TQcFnh0&h+&x=|0%*owG`)676Iv|S*V2l9VmoN6u{9ig zZGLEU?W~OCOcI#{k|ytBj*G$(!~Db=Bhv&oqa!EH=%;^2 zCl^Aolg606q1egDF4Yk}S2!;4+L~ERtF6%qQgLunwD2@q@%bCU13ob)6}Kn6|FVuN zQ@Je5DTmeQpqgoLOdra#1dw);0X0*+vPP0vLQ0ZjaV*Uej^JJ$i@D*n-0UD5{0^rA z=jXtV4-FOlPO6~m2%HPzFN;VBCS+i;5P}IAm`*zLu}4B6H>8GX<~-?Ov*v+`IK!i!9@}&0}#Cpid~z~ z!xH%1ONyK$@tgL&r?zk!0Q&q0+o>1;O2;;gqxIRD`eiqF>2MD%@pbdsnW3Fzqvi<` zKiQdSVhZtURmdJ74lebOMZjcxfO1ud5+bBd6|u5n?f$KQ?lA_jm*)s131?7q68y9K5gffhu+q_M?rI*IbW z2^DH+QXRAzZoeD8)u&1OBwE*u^adamwHQ`r+R9+`!(CQc=Fc!5; zV(xMi#3DP8;lA^P(u=fJ0`N&xl%*}3yP|fT-V`t5UNQI_6ltn3`4xjv_1A}=&@py0 zk=G^K4qWFvYL%P5C#yz2IXq3!aV=Cx;ElD3S7%t;BwQHXQwxz60_lPh$fJwMqSH$u ziY`;hDqA#+tQZF3##AvxrlFozb8)86=zcVnC>|C`$H;Kcbw@S({UvX0UebU+d%~rhk{SZP!kvk zjzP@icg4qWf(P|8q6=Sr&fq}v5d7wHj6_Iehm;{Cf!%qH>}TblRUFVfM(?2TcEn%R z{&D!xir7C69mpvUBl&T;(8ox!&Fv&Vz3AsWLrkx{miikbkO z@5570#J#nMk;A3tFTr2rm@=rAL{q=3@*b}b=0{Ipq7@#82s!M45hfDnxdd*r9x)N? z21V=OQ#U!}#XKK}U3{{dtQnU*WdB3LsA41qTZ|Z*Ox$JEBi)YVAEF`gSj@M8-QN_K zNUppaLrHvzglriXN|fJ_4xQJiiNevLOe1$JxzMZdM_-S1;NPH5sQf`E2PA>)<}=Wj zSXeKs=J$*{v-N({6uZV(bu^jNq_CJ2qozbi=t+F*Izx^mHj^FWg%BiJ`^0^TRKL`V zBSvITs?nd|2aF6Wf8bqBZ3~jNb6ZZqPo|Gl^;0a*Q|-UM<(9#Yh`fMf?t z#-HPsjMa}8RW;6EOc#wC(uJ8K5GP(%c|FJFAl+@(amvII!v?zE%Iz3ifD?Ui#z6JE zL-Tw~d?GT)&9kH$MM&A?=Jm$sm-wb%G%hqUwfa0G&xNRh_lwxeG<2KaGJaBZL_?d# z;hCgu8LmB@snBE>mZT1*Ma?6T(Ctrmux|)UQj`Hfmm_|_$jv0xtYEDqVH*TH))rop zVi&WqQVppcH5OQmf^2HWw*^dPqT16(jqPzCpEjIDttGl+$}6MGNyoypBC}XkxPoQB zgxR$CVU#hN78(U-S;sXG^4y^j7i?_DH}A;Hk=3zjIsdwWyC4gbRHvAZI)eljUGV25 z{W&mzJ-%&7`zc%z548WVn(-+Cm|0ErnSOOUV_I>S`~JRT;7lV-TS@)Aa6qlmMdhQ|R8VeQ{$N@{7dZg9ER0Wi6n#a&*kPI(b zjn0D+oYIcYGhah8WEg!}E^4P=BSRWCTePq8g!M1?osd>Xkm7I3qKa2drola9eO4f% z;Q|$4fVzYR?MS;ey7b#N$s1%m zUcBjH}(v@8C{s`8+Pi)m@4+VP~qB zs58|Ru2k>r9}|VD#rqO&RV{`q#p3UyAA4}0{0Q~>cw-u8s!6U?7(J;V6E9H}WB=re z5vs-g;8GP?F_uBa*tdXGj03b{9GXxu3bs^=r77T4HEU}s7_SZ6QeiNv0)73&yz=EU zSBy|Cj)6%PDC-wBec-!uB{U>QT2wVgW(sSnC|fFMR~FCOnkvecN)ARxiST|$vg`Y`x~qb^x~?KBe9_bY3LTcOq;gr^WwH3nu#)f+!$|0!B=Z{cCU8qL{p6Lwp5}e)swql zp`oRn8#a30cnxLW^k4m8w#*p#8dGhVzk3DFZ5k(k2wHi6-v_n6854=&ac249+qWOv zUSp~wXR_>GEno|vL*tqS`IgcVr{{i%* zItz)$`+Dx2_G;0SYVLyLL{F-F=k$JnJ*l2J_1!bK&i>B+E2|IATDbomvy8hRyX&=g z%(@dXv?q_=^wERz-<>y@&jH7U+j= zt%Tc=K@rN?SQ5SBe){?8ccazKn#HZ7IGzX&4Y;T*lTn-}^2-nD%a7$B+i@I&Ihr>A zC^yW1(Yd~qe3MCn<#ma~%lbVgX}peMf(LK{`d@nE@SgI9lY5>8`||@VZr^Ra=PsJB zErfXAC?b!Zny!X8x}o46kfz9p_E0P(Cuv+pg?#qRTz?qZN7FADzGl|t(-8`t-ZvdQ z=a)^tWBQ>V5KO%9O=r2(w(0jaGG8+^&>-q-W*4O)R)1M#~9#wmF;4&DUV zv|T;+?yGw~ci#dL-V@Dnmh|8>^#><1q4Q=@&A8FMhZbs!*dFJPA*#X8K7vk|ziI5x z+ZL=wg!H%C{RfTBfQmbGPNT8gM5g|EN6hhcc0>L_GKVQ>E zT|TN;r8P=wKCLmcykGCEFKp7D--l@QcmXk!2ak#L3=&#bYK+k#Q~EaT%{?>5#^z}g zX$7Pd7_2*LleTTze$zhmz;#jSgs8uTHAmIvAJawnk_})77EiQ|WkP8M4+EE^y<1$; zUhl%$i+mdz81qvu#=N1#G9UcY z*iXMQQ7XL$D06J=Ud>}YlA+AwfHI#AlsOBhFoAr=wn1ot`W#K66)(Y6aT=i3rq9JG z3b+w5kmg)%{w`0#Xr$5qr%`21R?RL=zb1AA)WMb7?pMWZfcmLfPxjAWk)#3Y-ocqG z-tpI8w%Y)8u@-111Up$BzT|)_$D0YkPSRYi{L8(+?HTWX`hi2|oB~qY{lJ>LT&(%m zX?F;$SzYivfi-8&?Y*B^v+tSjp85XS2h3hsJ?#x2es~;j3aqIgv+1D-tZ5uWthu}A zOS>iMtbsMx__5|?<5=_BjdRCbyxG@x;OtXua9+lUHJ?a;HIH4l`!A;+@vd>anFwnF zW%el?z`nxrLpJ5@!h&(EISw@iAEW{4g1{4dtX0?4Rs@i7;Hh15!>n@$My~LKPZjX& z>A7yjc!@22A%f4o85ejQB68ndths*n1lXLwniouf%@54}otp^%-gGkD8&uX8_l#rB zRRo(2tSKn0F4$BO+y&V5W6h&nu<5~?4eqK0o1s`U$Xyj+)5V&wKlO&y!1nT@Dj?)ezP8?DV?}VuHju}D7iJbJd zX)pNFOP}|8?M&_b2XA?1FX9NZ7LEr+$EImL|D*LxtKoR0ncB=RYd^mG_7DCY4$EO+ zRG*7agl=hbzwx1OeCUlmpLe4a{E&Aa`<7=$b?{%I9nROC)`Ky>-LqU9(`LA9gCEPj zzxMCD8mqD|ScX;6s6WH1SNB}B$U~yZuxh-BXogjvPFU6Lqc{;4&9JKIwxwXViMVKn zRb^l_!>SC73alzNQFma~naAJx3~l~lT@=k+q-l!=(4wj-D3=?eUW3mrr~2-iLR#n=Btfu;it2&vEi4 z%a_f6moiq8C|SN1Mr`gl$2wUU^BKLz%vtLu{IX;@I1Am8EJq=YueJ$R4eh^V^m06M zdC=b;dLluld>&43TCe@|SQco#m?t+~e;la&yHuw)t>)=X=luTcpQaojX%Pfz@n9RLvR7^*!)Fe_Mwcx(6BVa-RBLTZb7gJ|9#jt@;R=5Si`llv{i$;m#_qI-N{1mUFbp_|^^D2A2P=I6vR zQHyrn{tA`17V4?h?>$Nzkd4ja6Hcbz{f2ANZaPp4yM4!f&RLB**lUz^u;7^B3=`R# zpS7?a7Nws-8R4moy?eh0o2kv9HTSGSqq+p18vMI4@cxbg>7?qCPPWR%EO6V_W~7r1 z12Wb1S@!JuJXL^$P2a_N1=C;*y3Z4zeJljcK5bJ=QyC9{1(RQM%P#! zF#TR(tj=GsNf@ic=l1@V#%eieC!d^s%XwHImvf`LcPejm8N}!!=*9_fL zIzK^izQj*ExyGfPy!(hRF5j@yrJXGAJMhR;&IIjb-l?FS%se$7#d+r8`k1I#|435W z$ym=AI`y!@dlMsUIcO(W=g%zkl6C?zDUsgsYz4{oE6l2)Mn|(990X&PqgbK1ZJ+SAUyrpP$Oq3|7=VAJFreir@%n&f6co-wCBUqYbB|I)5z~90ASw>SO=5d-*(X|CRVj zf;TMLWn8tT0X=^l9UK{_IkN}LBZ?j@ii$c#50;oof*GHC$2nV%j|Dybuv0@1mbhH! z{=XgZ?1&yLEi392Em+jh(+@kp@OVTEmI&w>gq>sPA$s0KBbEfv6PozM-V^7X@0v@= za}EoS?1s~gRzs{7kySD%!x?wFJPmr+&RMuii^p{Si-v+3jMr!&7(!<3>AB=lx2`T; zc;qH+*UY|{;gLsoF4}chPgr=Q8FWsG=*S^~=!obbJmF8eQIT0dof}_$=$u&qn|A!*aB=mG^h6tg3XiN$jG1FEWu5Tih#7Z`(4V&2oA{JHtorEUwwbO z1}n;#MU9zW33}AKgqi1*b0SfTkmd)Cq@V7^&lL4}yRlV@S=?ZW_JL>}xWv-^y#oo@ z28Jv&5R46SvZis>+C^E@xSq$erg5n^ja#b^E!-;a?w;)~p$ z&&8^%HO;{&CHEanjN;(S!mIeW?7mywT_^Qt=32Z6 zYf*DodIwf~J3i4G?P_g!9qaPQJ6uDA-Hit8QcdjAS@>;dgkj5dTB4ZFYboi5VO z#kwuiHoEJ^)fVG7?oF##hQCh*_k;IgWF7EVZ_jTNH)I1{?m!qx1`)$R(xC;Mo!n=ch#|e9N+u5eti0>drf-xMvRE_DzFmi%Ufeqzl;U# zf$n}*ubc$0=!Zs=HiY&?YHN9Cmtn=YUahWbH4gRisCF4vxqEHNy3}^}Qmpz??A%LZ ztbJo;sq+Ow5W6pUFXfeDuX?3INUH;_YvP^xzYQz91fQpj$9!Z#57zO$1iw)S8F*C3 zPZPh>7E^Q4s^(yEDKE{V_v3o8dspFq${P2m7vspk^LaVfOkUzxgND2;#Yw7Lp!dX{ zm3uBI8I9G=yLU0~qOCHtppN^U!yUD7Pi_2-&k;FsJil}`#t?d+ceG(!&c{6#dXJdY z1O~G(HW6DMzjHL|{jk??zQfv!p_!JAqqpMt4CJ#MAxw6{o^Q-J(?P8fMnk67x!R}# zn=3HzIk+!7p`R|rJ=&T;(o9GcrJ>@Ya%u|VeIoLTD``aQ@;-a@SmVC6k~Ct90!Fl4 z{bgV@YNaCNmp%q{R1(QE+>wOj$C0}}rG{%f+dwVUa8ld(pY`Grq9lItf6l`DH;Gx! z1^(KA`yqC`3Uzq@9v3%o<@k)Zc7gX9@Eb+V)q8+QOdg9M;WT1rlOUFCq@R&%3 z&rp`);tvA|gkHEnEe%}4F~X2WL+5*?vhl26=SvCpKkL=@4ND;A?){sz1ZUzCm9W1D zvFERXT^=En>(FV|VIATt&9bxZqQg07%nTEi}8e3<&9j+xOfwQ&u7Rce+3v`h_Ob@ws% zy@>UC5slm#a{qbvYS_+he5%ZcNajO?S&%r=mek5nR?7Hdb|D9OAo^!q!@_TMJWG$j zz&EAXFPn|~8{gNER)$esz7u^A`Z^pvu9cy8LaQidv@g94#&$T1eQRTAbvX;~eoby; zXz@8pw5AgArl=@rLn^XezxQ^1m}cNzUFv4A_O2abrqYD|$YY;6_(`wD!9Ef3QKC*- zB%;?Go?n71@~}dASRvY_BK}IGE3}SRt}{EN&du&!PbN&-yr?Ja8fq&kkx6Y8<%K>F z<5Y}|(h3mOFp5Rrw~WV(lnKkQr*Sc9tLPCCFLCCK%yRU&wu&>OHzj5i$5v%%Dvg|P z9Dh7aLgPtsL$9uLW4p`zG@7 znQnOVUcaI7tlyiLK8F8UFUE@F<5$PCD$KZx%)8iy(tM*SG4l+#mHVel^lOb zEScf2&hznA5<(xJ3^HaE_Aa)fe@2hK1jJN@hM+%RgzaOVnfAtXqr{926HgIk@vl|b zF#as!y1J`hxPQGeD|d$6f8M>CS*5*am0C+%QVYW@Ldlhb67GKd!Pb=6!a&d4|!`=HwHoT*xwo0(9 z9LNf@6_h9P=_o18Etc_3j+D@2X~v@&uVUVxa-$P^po3{>Z$1C3)Y&nAPscYY&pf1 zjVoH=uZ-ojcdL!|c0^kxA(9EU_kDcE`^fF$?zQm$66guR&?L5^Z?C)9N>pqSdGR@N zZ&)AZz+y6cEA&Z*t)>FnH(^r*?@&lvQVT=tL9E2wJ+o=VQOv^0`aP}z5mnk2hIxE3 zHW3>~kBgh=99(Go)M$TCG2wiDJ(W@dul%v})m5X+=j-_nRjGjGCZH)T1wkDul7 z<8}(@JnSAvuljv_N_R3JpPG;QjyRoCEi@&ix`f|Zr6IH^bz!=Zs{*vIkm_UzjA*gb z^Y~>j^qIlmiaaap(=WgyR_%|tHl^9qkG?*>zc2U}UYpfUzD10ZVX@A$eBp9JKa3H+ zz3=ripF$pF8J3Y%Ud)~dW+c6S#t#_@D7nv)KS`b>c>v6&kP9d3A2Zfur`oBwGMCiy zh|WLEr#UXNVwEr>%k=%pq-A}efuCtx9{T>o{*=9BcuKJTg?8**-#`3*aV00u_6QGt zPi>EgX=Ju%>e`-l*uP=uhgORGv%Mb^V9yhJY4qO6@n7QV82bCPQbf6o1TY3&!cRu7 zh4vvLCQ6kN>MSM@ukYI4_NJm`u7QkNNoONsmDHZG?;QCf%=k0+FAxsd_mn;UUdNZv zZ)ti`^xF8%7=f@&abwvT&p$~g!Ko_I4Snm66;RTX#R|xS5*m~>{;Y!}>x5Z9*6T7> zz&c)8FU{55x^J4|)yB+=5fshQF&G=^L&mpX^=&-3qZE;=|KW>mtEv6VH!)~32 z-C9WtaT#lX_I~t$)s^)0*awC+MeGtw4~;PcQA6@B5#Z`#BMWr*H$q@!>`VXAuviOVqRiSomwT(>b_0BRcek1 zCXZ!{JD*vkscwoD;aO1B7ytK8#|M6I>`s}a)&Y|HglDG+F?6hwRLN`^CG7>a_UUTX;N!P_BE>_ z8EK%6V?2v7Y+5_^KVzna5s0*{9b@H`R(8M;@rxu82J-ph+qz7)r?PA}bg(zpK#5Nl zX<#mq3}Wg=#%*)%V-ZWEb`^ai)2}?(6G>+TF20;M_@7?Q-gwr}|CCn1|E!n!$ruU0 z*b9-f@cvD*LeGVNcMVt^JQZOWG5AsUN@-~t(E{~#jlZ|5I!K2RDn`k$Tc=?+N>}t< zX>`*H_9ai+8IZP3obbXN4XX#pF(7xF(E%bVfv(8oB)TFh;2AQkOd`snSIDd~=bWLd zPLm||FAi!XMxw}K8*#N%QoBKJ81Fk#H|t8s`ek%T^ji|r!1_#~r_+j13qAp5m7cxG zgU3ZkA|5~=Ld;^!|iM~7O*$^^Yh1C!zi-~A5qs+pF(3>JZjUCGwYZh3OnJwZ@`c`Cli=C0#kbPxC z)Dp#x_Zxs^wqY+>YJJ)#?t{3Ng4uc^ zd^x8$mLl_})Apv-awtx7q8xhtUP@;&zn5$yk;7n(37N921ECgT#*00&m|+*XC_Skp zei3!LsKpS>`Tbe4TonV+%$?Tn)?X1$vLi z?#;C8-q)@LNb*_QVx=@MZj#=spph?yT<^fE=&7tn9%(gxuEEc>c#e8InN$-guyd4% zg);_E9=VWe`kRbSFlL#)REtwiXbqCG)|12~GnwA|G99j+gWA|D&&0hv@mBPS9e|AQ zjIEoQHzJRQY(3Umkb^_CL4-+!N;zg6Wiq6gCr?sKC)Lel8H)L2C}XOjjG!EgGjrR~ zzw8sjp8LeBL=apF_LLR9)J5MAW`{aSax+x1Z`o;Tg>!ZolL9~1KmZQG9IGQ!0A zNc#TlB|zphGy0TV>R*w^uTFyGW_XzKJrT>}=}}dzI2oq2LCg=4n^VzV2H#yU%y^d> zf86)g0j(vsJuFNVJql#J8UH7XP;kwN6sU7q@4|Q)*OOiy&zqneGe(%E{$=MD!Jnds z#&|48kMGrqj!hYQ*q4=C=}B_Mt&14aHsS0FV&0{Yy>_LU5einW@O*5ZSxWCtNE&OY z=xOnsv2<~;lxF_Vymhj88+jhgY05ceSa@n<;q%=yw}&9X$zu`BTrd*BDtXbLmHL;l zFJ|^cESWL3Gml=8;HM{X=9x% zyN3`mJtXM36^nT#)#XIXrcy@-JpJ>cTsU= zo4y^9F{{E^)ixQLn0Z3R)5Pd;QE?-;oyqf5lxM~zcoO&)WH%VI-;8fjH=JgsgNT^C zf99l_!DGi}dVGvuurCHr9+(W7W^7Ne={R~O)7=uSNTQ>g{k(K^H8nJA3n<6b)9ety zUN6+uWCDpyNV~He7(rmaG)CQ+ccw;WpBaIriL@!@ z=~qBA0#)g}kIyx+OoemR@)l~Eji8$yNlHVzM)icsTt}-jX zMSM72ey8Xh&X`BC+({Pm==9igH0JQia}-xO9n?XTLA^I~rw|n3?h{I)$)94J+bgMk5`>A!S#b zr<+taXWaYsxIdlE&ThxJi*@20@naGBtJtiN6oVdoBf$3;l$s*!TNY07l%tQr17K7{L z7+m|+PU&D^*6tAjldB8OxHR(SGDjR`K&Z zNXBrOePYB-MA!L~(w%e#qB>@4y&HF)>YkqSQ^Zp4t&iM$a}kgqJd zKIS36tRrDGj%*|HGMK}j9Pf^u2n_6?EHd$Q$%lBOZr%#0_O)^e2$>p^YzTU9uUGR%kt^)OK}wInt4Wa!~N^Z6u8 zFJt6)CL=$t9&TnXC(nE^hD_cNqsbLWuwZ~we)$~h{HU$PxkqWUE3(W-x8ma@QHw_J zw{)TwqJJeT{@4|cGAy#v^!h}dwZLF$>SY;A&T6E(lXo92&-D4i@I^ZL5msOeZAoqr zv-ga|ajjV|MOGXwne2|4E@IAVNuG`}?T;)sBaL))HRE&aY$$lItd0`hXvLXB>{ldu z>`#WS&KUQZT!%4;(vfa*Gsxs5w@5^tnJ*DNW2?~MtS2FZV=|;W%bz?QrP~{Q_U2I1 zK_P-`UxA-kfb>$1MR$8jF{2-h=P@TZ8S+eYlQHpmZbWzG16w2OI9!!EVV zaMYlk$+ct0BeI!U$xYd2$C$~G?~IB6bkx^=l-=NOq@%Ct7m_JT76mml@ipUpB2&m3 zLF#bX;VoUSac|&{#wmvBo^8l%CHJ`Me5xvXcCr`BR-7CrdbA3CKn=u`o@6v@8Gct^ z*|;M5d_z%5={*T3`MK1Bu^xQ_Qg%Mo`zJ-t2hscZ0jXWJjnhi@7hd zm})s>{!z%G_k614=Q1;oPNp82|BRWiK8tZ~=5Tmk1WzYVn;}AJWMpYXy*T@O zB2di7{)nUx+zJ6t^WJ7R3Q=KiEl$jmvpc#L;2bI!j=Tbrhjn91x^ zvkg7F0iIC1=SvZ@iZ0}gNmKI@7w|dSaN2UB%XB$-A`acY^m4u;f|#L%sfH4o zJCnDga~WagH$5QoM@5|#eIar!c)B0!Qzl1hMYXu(ip2N17y-zncHgo0TkBl%pH)}M zXN`&2lLVgA-vWX3Ng0+Yk5ZAJTTVzfq!!u(PO0b?;gOV&>z<4e@g=O;F$?~g` z-KEfz?RU$dCZ&$0Y*I2A&0++TCvk~<8yWgSD$+r=GP1>YY^NI{du1>Rkx6PNORDUa zp_15!wrwEXbh3HG1dM_aJBTx_MaLIA3I)n!yc#KIV1;9pqtm!{-OiW|9XNjVT(D-gGbp(J=L|=;19+reuzd zbtR0Tv0jQ?&&iNv?iXtPWSD}l$#ilj>*S=8oQ_WBS;36;@&pIgtCF=qG)&}5ACR0E zb}*W%lH3_wHxWaTj323uR9rW4W#fvB>$XmN3FMFcF4#?$-QfzbXT%WfA3zS4=%m~| zHqJ!srjg0y&WmOu@+|aG?J}1~>8~|kg{-_d%}8)A<&}NzwasiaGMVTtGXunZPhK0l zGm!Phb!HrBiTgL&za`KYyq=LozJl>ha-sz5sd@B%TtAGH@P@!y8U_z^)SX4fb(?&y z8zriJuAAsJL$8i!Rf+Q?M0G3sDT&;n>^SF_KPhkI%0}f(C_l{XP{u^BB;kkBUtmN~ z_Ck*uqhD*BgTlFrnP!-$lQ558v+Wtzjdg&GiBLk=4~dzT8nhLqg?FFcBzq*KiChHN zjXIA}J@#nk=<%g8e!w+ktH-!$p?xo2m8g4r75_X{K;Il$Op1dsAN2( znPnkb5;`?mk5JM1Hp>T!J`%h~ox#Eg%CDOD#;ej{VGs?7lXcilgW8vRn378gVRt%q z2c3+33XuV|JNHR4y-Qq?A%RXt0Ok-w+xo!5#pR5yih+T=U z=~pGyz7oe|%+1ck4B`1eFYawfa5`BO(Qlcu%l-hYmScAp_Q@AA&EKgt)6~W?A1IJF zYfO^Ja>mT)COw?I>!=+}X$41U4YnI8+ATv(XvopGzXrf7n@7$Y_cAft66g;yPsorHJ-PC@mW(LMl~*?9F38w#>?uJOA@js_ z_{#>^iD|RnqU5T54jhpVPjqG73iHp*xsZLtPs3-(eq`UbG<{6Lfg_p`NGNIjHd#>Y zPnda{`!4exC5;V^@18N?sE>$dm_4D4G9t~W9vK`k=lm1dbEjFRStCQe7186_b%nLZ98PwM-Ggnuy2N#Qzo^YEVZrhZv#Cf&v%Gk+^lQT zp}`pqW=BsU(N*^mub7N(Thz27KAaTwX8De(fqGlXZ38jvN&P9az0A)s>Oky3%qz~o zVQn?PdGev`8J{j6w7n=AHFlCr^S)rwoe#`BjM|dT*!%oB02bXKkhH8fq1})yBB_6t zp=zS_s~T5FGwQfXd>1coDag9ZICbKzcH-uW_A;P(u|lJ`cl3z%JzKn$M0kA+-tB1i zW5dg1Z!Pa$meo)EYJ!;ugg;7m*onuWf zQ62Fe^$TAuDtNpSD)&UjtlJyRy4KP~Eh0~{OzMpaOhmLnE5d$ok}D&mNCKPo+)iHrJMa*MRgZ7E;D^(Es3rilXJEjC7Qk|+4tNx zQM<$6<1_P2r;=P#+ddbWnO3sB7}78ZSr~#$Y{X;MTnyl`iJz>);E54Kc*OjNjw^^8 zFU4;}k7Q@DGc9o>{o$2h_%W_>5gsSs6U0=Ei*rw~ewPSE^k`%>kGyIk+R3OF<7X4m zn&g~+VS6$x()m~o{la7fe*r)yb95hQM@Xh zdIHLeh@dm7%XkTEtBDRMgN$uZi%&+MChjYNr<3`Z8E17W;g5LUC4IyJc#PugOnQH$d8Aa+Ijc!i8tdbDH!5d9EC@SV96 zL}yZV7)aN%lz2sSQBPVY#(5F5WZvbzt0hmS?c?o+^kOaT?*`VEvHFJm0Y)H2G?1uT z@TM4lBs)A!&s6RP$>>UE7qZ)nbj z56pZryF^X_tw;RalBn~}(9TprJ9{G0GX9uUu30TCsw4!Pmr~9yg2XMSB2oE^3| zlAenwBkGh-aUNqP*GpWz!Ym!NOE+=!L>*8o-M$!-=8xC3k3OiI8AB)Qjx`pnD`s>? zMABu4o^*A!#NuROiM^9lrkT@9!tu@O+Jt@E2)SVdgm_j)K$s)k;G$eU$5@Dno(zyFC8P4%VeqXQed1faYBA)GuNXoca%7xq>gBnl6PF|tm8hDW zcFMl!Ay34@eIU+4W~Nl2fpieJ>_U~rC7DBDoQ>G9J9T(`Y|NU56osd>$BR9t7j4-yo)@LE;<5(FixJ43 zo+Ggcqd~L_sPS&t9r%%Mdb3=GiB`Yw}$t%$ys!y&{7{e^T_MO%s(!spkL0+sP{9 z$Zg5+_Ef?p@$hz7kGV!I^qzQ?)X?lIN1VXeAgfeZnZe)Kr;Ad~GXv9djYJF7${L)!Vil>00b+P!)Ic%G+Mm$_4w7krwK6(dC>Odq&F1Jx^1@r510m zK9oC-zOh70Sx1Y`?`T2!jK|a>Q;_^%N?^fd46_=JSsPI^%?@1T32(svWDK*ynl)?m z7DXjBG4-Bz~4u)6MepUD-7$X*N{!)yR-dcOjc* z)Gn)t(qZXR8#89jd=aex^*ztFVBUxl&+HL1q-k0JSu@9&CwIKaxyG%T%UHVI7hP|b z@^<-t<4yE#$oC93X6D=7QZ(t^>zCwozWE8 zXHMihO;;-mi6b|QarDVy*0M7O9V9}(QlMZ~GnXLM#3PKHvzDLeoKij+H9y4N zS^mD;y~_A9?)NN{cgUjrGHXfsWo;&V2QgdEh`XrI6!poIp|2V3qfJPLshRJgg~`y! zR6!%{O0$fUq@%N$v8P^U9)(;#q7V`PWA>2oLFRSRMkZuhaaU#DYJ;Yd_Zd&7n>|m7Ws*l!sFxX2VQiZ@ct*V0x1YWy z&xs?umYMlhV26 z+gbK_UNxL!eEQi_ck}T17a(Si?!f2B?$+HL< z7VKAgkj&I`WcFpA40#qEwvwLlnR$>?3vI`Zd#6>)(>`;SJtl}v1ecFKD0c>N3nSm6 zCoOwsrMVaOtiFx;Su(c7jN&k7`(T@fwauuOT7~~d(1U52`)c{@ndooI6IQo}K0h-4 z7uwQ6?F#qWRd~%NJb&1VXZ*L8{mWJ$TY+o^vK7cyAX|ZK1+o>$Rv=q}Yz49v$W|a* zfvLX&{TB}J7`b9H#f(BSB{9Xprxmj?!~xN3WSc=OP*{xt)mmn~aUdhYov&tJLv zytVy(?i2lMhhIFj%*-2lf1mrXf6My8OIL5)I5ISP*3iI)p&iRCy;$h)YkIoBI<$Fc zbZFVefz2aB{e9!V^;dQb4U7(LIDdG{(8%b(mhH=oT&`eQj!`HYy5ZzaGuPkObWwk4 zaByg3M0xS}pZZq~jEp{S$MEP7$5vkHzoNg-`|-Vx-A|sc8~H+|T-9s2l2x(m<*McQ z7R9ji@I@&U^t2YmD(X4Qh`A{8;?|2IuS~WmrfnFNLMc};s+L))mz_eR70WidaZ#%EQn^?v=F8=ZY4OI_YJN>?8u^F~ zWECyD3q=J+*~t~^Mcpcut-Moq48jH91}a3zimeyBQLR)Rr&!3@^-9&KTRGb-*7cfi zRU$W#lP`25RMBg?r91h2zMj{uGN5IlQ1>s2kqP_q^=W{s!=SPX3eTqZO6(NbH!?*>=P9O!JyDp$?5plg{xAoTh&soR?AgOP%9{SFaY~hXzz2de5H2bPVh>#?DwSHPSf~M_6iV=$ z?Q$6__SowW};qtnk%VB4?jyTCH6NM)AGW0BB0TstUj72wLf*>0n6J*o( z3sJUK!Ew?;D{}U+!f^89Nm`V;t{Y{eP^;E**g=I#u|VDGS(J##3IvRCm{hci{Ft4v zCYEhiA&6G3U}H_}lB4JRs+K|;CMULSq=nx)X-%rOspsrU4iTq{rJGjCvHfus8;Uo4 zO{}zlN++#}ldtBBX0cGpm#T=>B8E`(%Sq(kam;R%lTz6+4XccRQ`N94#S#!)HNHM^ z7;x!2eNxO9E2XMgu*_-&`Xpa+O^H{><|Bgoh%_+Pu=iJ`VCgv%ZdYr|Bd<(mj`dnG zU#OQY8)&3x<(x{{uTc=v4%aCN*%8#FvMO@=v22f{8x|8&tye`}nP^pNrE1P7AyS(M zb~Eb0EDTqBWhES=pU#JypMnI>8V|=WMomS|elh(vG z0od|pMXw-C3$0Sl=b$>hauV(h;!+(FoXXzmq&2ay6i&``YE=iJ>vFY>q_TfaBKA%$ zy@YZntx4Xrz{AihdcFdCT(SV)0x{Z1Ibr;^>*OSFlq-&ts}-Gk9r~nLGIcD1ckkrM zMF>H&*gdI*-4aPkF%Nr;d9}7Y^2$V($1$q8yn_IWZ8%oRL~N2D)4M7Wl9Df^rcvbN zV_6<~@g%KD37K`vKma9Is$0m3fy@+$FIi4_ASItK@P4JTf8+=4gjGTG(J49(GKG4< zg5E6Ub(mPMq(tl<2h^P|T$7@0JGn}^ZddIB;|Jv?G#jyd5RmFdIjMleR4J6}Aa~ga z>k_K#6Fj8es}RLy+Fs?|UWG@wLc?jOe{ohJ?J!@#2ZF=Oo?dGREzNgiC3dNmJ? zX`fMQ&oNv_;#;-9`?v<3NHOY~moyzW! zlkbEzsg;}}*lu>M3a)`ubIPTBAaD?lXWvJ*a)EK*`pN zwK}kC>@`U(xYSWlwhSIhrBJJtjWQY<A*m>Zj&rLlu1W*^5UPh31ni^8TUXnTh* z@FVL5q)v1G9fWFq2tx>_<+7v|%b)n9ov1`5GP+?PrR>)$;dU8|QcSBryR#(4b}DEaSIN%1#!qirBt^|<+5#ARkSq=G&qPr`jiw}fxWM44OmU?>(;7PUYW@L7$r0|a4JP8 z7Bms6mYj+mP_^Lzj*F5O;lPx$kELkk#gnusAafOsda+)xQFL1^BaR(Nu1CgHK;zfb zD!uKfWkFn|kTc5$d}PPcEi{2(GRF(yBD9KOVAG|vf#mJ)1X-zAaE@&Ru+1{aDX209 zoJ+DOc3J?glNO~`Ld!ek!H`deeXiS%Q$y^?BPnnU5oHMjaE5`PLl?@5UPXh%YCUhm z4p~MXmFxv*SMRb!qzMg1y;Gtxb(C5um2wp`hi1KK|9}ch;M$x&r5q8f#iF2TcNdBZ z*pNDEU}y&QfvbvQnpR-nQW_$1%i3@?VlEsk{08-qZS1X zyPQ(4S^!A}MGJM1&TIYvc8f(xtKz4l76sJ5BI<4{Rd_#^ov%8u&pt_s!usgi#Rd$i zVEsmnM1ilO41_d z-wDftaBQingP31LWHMK+l@Y)7YnBMl5DjS3qK{&)ire1_i=yilgoxNaPiaU?-*%F))OC>2{t zMUail=p9-1>)WW_kvInkYuSZ*r3$-T!SO8!Oy;ay84>;<4K6~jSjeQp5~O09J4sZ~ zy0}`=3-u~`(^_a{3}#y(;smEC46h)Bz+M_%w25|8pO#f6M;A=m4ai# zDCf~$2E7uUayhUpIYcZY_7Gaqq@`Ho2Z#k&28U*IyG*>HVm4R*s=y>gyl@^Oa6V-K+Qm)y$Q8SSAV1IO-Ng=;&Hr+r} zxU9Gy!d_n%SWEQci=%EQu1us?s#Vm!lx!VD4Rl9GH#al5ED@%;kV8>bI^r_<^zk8)}eC~v+smOajZ%mu{fv`G|R9} zr-;@~{zZvWwK;&CZj_X=iCQ|VS_Op#1Xb-3t%#v9v zBlqEe2j)`GJs>WMP|DgDEMgj}wxc$XiB7XZY*|d)ND?Pnn`L=rBC~8%3)MO*Jn|(})L|=?k%sqeAartyAb-JOPKzjr)UNoX zu?(}kc#@W-uIFpERn<#*^fjyIu_}S%D58|Dt?Q(QrJ`)*=j?<hscZIlm$ zxLsOZ^>cFev9yZ3xV5U4S0-ANDq^{_yA(f`Tv~h+Vs&sEQwPchig&GmzZ?Pg zu_&np5jts6Y9QL;j1FW`YY4>QNM#&T=$Dk}MM*7)kZ4hmwQ^$h&&bIu6KR!Pk!e(b zSyW7cWm_!gs{SAXa4j%e_y%$VgsB*2IsaH2NM77p*~%*uEelRVGVN*sJoOUVid4XM zDj^T()hbc4QZUmZu1wt2PFNJPhBEg8n)ez2v<||y)g)#avB|W+zPzQKuqX%v;Dezx zPq}WgO<>v9{i)PQtb&f>Ddm?tN>b3o3jKR?r7}9~qaz&JBe3gr?Cpa_VJUe)og^u> z97+q(?HSdnXcmEJEn?cfMTts{q5D~CF}O}z6th&s8M$^IJtje2$yC)qw$TGcNd zwS9~NPB1YF;2hV`g*I2)8{r899gcIPW8>69-g}Sr ziB_})?yjzrlyV(O4nX`o=qeU7%Vo#ED3L+QLV<^ZcHg2@=v^Vvj%p25UsjxIK+#5q zufa2g%IUgA$(bmqLt9d#fTnOJdij)?UBGEwkg)#@{S=EgA5 z11&0E;G|ZXn}>A5r|j>G;~JxHYRon~6IVv9L*IqNJ4UY>*jydnF*G>3ZO6`KTJ|qn zfo@-cHRts7F3}FrW@xkUQIFT|dG#6FZrxAQo?~j-!A&3jg_UhvM~AkKu0Mb0_Mwr# zTYAlw&A|bTV_x%(6M8i5C%u|B$2Y)lrfb^z9YdQ(`j+x%@P#M+>d*yWoT+J_U8HIA zd@n5RuW8q8?z?*1jw>$Rw(SblyS{z@+rDxkrhW9Ons%h`#l}JIi^Uszhfq%9tJkjj z-#*Nf5S-rQBFHbIZ9qN%GS$1 z|F3VxD8HN*9HsAAs>v8b$RPEl%o_?qdfXguXuP7=JA{Pns$Wm9u2Qoj$-JlVHP}e z==Z*ck900>l7E=pgX&=n)iA&R7xSD7ByWERsehQyZ&VLss)qT`|5@?V$MB&ZI4n5K z8JDYv$*G1}bKZ@&J%kT*4a5#Y;`z5>n>)<*;TLTiJ%8ZR%|j!7jmOFT5v)k~W`)$P|QKb3Nnt3Udd1N!i( z-qiG|24AQ6RLU{TAN=G0{SBJZ#BD#`vo4zU<=1=0s0<8VhMOgp$Nj}nZi^FV-MjMV zn9g-gw|>7HBNj=i!1B2n2aREB2Bx;iH?ec=ZqM^hV$>G#b1^nMubg-ye~ z_ruY{DGkQfr`~=xKWp=FKmSPdaLVm)^~Y~Jjhl;G)&F5n{#f*I%Kfl#`5S*H_o{!m z!H-7|r`!-dSDtqr#e|#HKis=-jUG<9BesA4#8dx-5Bp~rT>o%Cxh;A)<(BCC^P&|` zV7NI=vpeiF(ZebC#Jiq7I*YSw9&XkDiylt7DLy>y%-6mamTGO2rMm8O?r=f-tGoku zUiieDsLHuf{YzH8GjdX<5;Ya}zxG(l2Q{33xL1B9dN}1~xcZ}8|KraX?y065`nj)0 z52xG=7rpIE*YOU_ZJON^UymM6xfwqG)%zAasT{8Fp6KC}w_^TJc6|0dm{|{itKYZU zc%M7m=w(A&hWgx}%GD~)yJR)7)L;|paK7W2j|2)j8Yh8y#bO*iJmKZ=#{fn4Pn&wKDWUpM%vnq1FUJ*iw9FNPrH9cZL_tPo|yy(^ykEuWM?K2_|VfBE& zoE_kZZuh8%FQPq2S6H)22m43#53dCy({sUGoX z2Skk+zE^%#yyuqhVs3X}^ZDoa;DJ#ihRgN|4=?zyFJZ(pA&Ll)dH(%ro;#vfVT%3S zcqV+J(_e4r)Wc3YsO7NXTYGkC?j!19=PhVCZ1^JV_)K4~de|cmZaHlDHvis*(=T6$ zJ9R${BSM6peE$)A62jiy4{_~9sFvM4zhS+{s^AJko@$>x-{O-eeZ$dMm z3(vn>7rH|X4s0H*TsAPgRb`g{JB0k3Jl#P>qanD6oGT2OS$6MQQvt zU$F6~cPXdw;YGm#+-WFBIr+*DAElngw~h~vqO_hrKKkR^)YI6qI5>bi4dp0*n)&^I zC}A}=Hm$}#!=(6ciW2E9x$2FVsi(2zl;8mFG?b$p`}`kXd^e_XN|S7?JvBIr(q|ia z*}@ax8YpDrn$v;={({AJ}dKD#tHfIAK4 zD8G2^^0$2wqm-Mb@nBzY6s3>2{jt}~Q{R+F_22;RG?b%UZhrgBPhc8O(=-kwYPqDTtfU4c^SY+U`3Q_@TB+d`X}{7{^hLT2x212VNPF| z|I>>wgHImR8(5LsR|bbMl#1{TGq1Zv+BpA;yzb)Q2x212VK!DDnK_Kx^8F?!`s3?^ z!x&0c_=3Am{FYiqUUX@21ThiiFn8CVdixbH*3}z=GV+eW;4p?#8QyTmsy{u9n|nGW z&A%c8FAa_$CZZf>*4g|{awn#umesXPa7(=NLPuuy$AFFT80kN`NUH{`Q@FM2ySO!B1gP3IE*?O zbit2rw$&4HUKJccOhlYCf|!VMm`^wx`{m}naGM{kNVsL}vD@fqjrUty-VpB|j)l7Edes8X31e)gsnk7Llgng+f2mNHDwXVc&dblZ1%v*yY0y_eoWZ_u{p|1?rBs-|{K$FV zRL}Iv-Ejt0>YO8{|N2tSwE5#-{FOL^DmCg~{#^JA6H`aSCtcu^(^dDlgAQ)nx)pRg zh~$V$&L4l*^&kB%w#bhV7xlx3|M-^sdY^Nx8e!`>*IoWAY_yx$nX-LwuL`&rWn zN+F$b-xKdSR5`*Qe$h07(xQznFTVH-kVJUE0fJ0FZgK;ViYVAbz(X1OyFz>Cn@`7V z4#l?d2VKgKc$E0S_U$Uke97az|Mo@YO#bWF>Y2F0rJTv!FCBT4daO_XRy~$0X3DXi z^`7MitH;{?JM~zuz$wStZ`SeWsK@%s zh)g@T9{Ei5V82F~Q1u~&PpX{R{G+GsP!IM8WS5nLx!P1Yn7#A($GK$9AM>x^yC??> zm;Dvz6~CY!Yz7pba4kPviB(Unk@u9MLDx@@xSb$li#ME z*`nDYgN4igdwyl^RL|_xxgmpvZ-DDxbNG|$nHdL$3>LlvR&D&&yVQf7K3_eUa2S+w zcEx^A9H;)671$xw4G_MAa6)@)b r_T!@G9@a}(xMkahArWt1N@rrtIn!ZdH0@vU_5LNA_R0%q;x640R=+?f&hX70scXtWA^`zt&f3p2qWMYe66Sa0 z4{Zc6&8+dE#m5K8DU#{y9W~XSt|VNzUu?PTHJpVACvoPC$Rx4e@KKaJv_7`BZXA%T z1+nXnO8F*4??I8NP^DE!z1w_xx#CLk;(4zr9ZpB-VRRs8U#c*Hn1jf);B#1 z{xrhgUmz<7itqrWN*^uk7U?Gh)v@UTx8lXsK&i|HHIV8o{Vd@iG?L=z6VG*jb{iB8 zW^`h$AfT=N!9)ksi`_VqY-{$4Id&Wnzb*L`J?d$sPaKoJK$7h73GayI5k6;`BkZcs z_#y97DC8c*OWCPU*(g7SS!Pt0DlH?$1&7kXK(L(?@`# zT?ZeLE-owp5o&p;4D|b%DI#aonIO?+{TG>&8O~=`OMY^X^fY5&)w$F`@r%(Dh;Toy zMgufg0nS{m`d&F7XJAR=dip^&y<*td^u|m5N@2xcL5juuJk=09`BzjfG;6bD37JPn z6NU_tnohl=yM$H&WWo%-w)nJ(yk?9|<|m3>(t3cz(?cTH{nV(=;isst>7%9_>xeCl zj(hk_?0KYn52Br#-i^rgPW5x%*Wd5EVc>r*K;IXKuk~#f>J{34ONRT`d(Ef6?H%Q1|%9}8gQP=7F# zGU45+q+LbUiKFKGs7++Cxu$(!QKl70h^>26A~985e(;E7gq6fE8KS0jDSV~n`2nNX zzk{oQ0&t)$JY~UwfP|5NfDpfzwx=zFhl8_?v4evRy{DaRrG}2e9w(Z=fz_7?`?$>y zr^^V+3f)FYM&X``b4ke&GJBhZA9}-~>IE-XKIfZr$q3*WDTQ6x(_38p%{iZJxvFER zMs#+kfsy>!<-(`=R91XAr3UsclNu?hdu;=10F|V`HlnK6<<+b1U;G^BH+fbB=s>0G zf!v3_IH%q^(W79^xtUaDMrJF2pbr^MNjrZr2aUVSLglKqSz%T4_co}fK@syn6ksD* z3C$I!%SleA5k;$}gMPTnmR#W2DdT~1^qxDhFGiX(ga3roR_coXUCvC^cc-+$_^ueZ z25{M@bb%nm{7e8wbn!!>y})P71GiZ-9}xg<=pySZ5ny%=ahGM>YVLKCY?>NDMfYei z8vN@~=ggsbi2;XAC@!+CJ*OeexXCk{4bP#%$Ado?>8saP9aJ(u?MY%^uABnX%u7Q> zaUl3$xWb$C3z|J^h()`%{KTuc;?x4y1JGqWmY%vF$W-I<+&|g5a*pWAU_2E+~h3x`AbQhsIaGAP{wnYWB~C3{m{g0s5~$;#6$S$F?Ir0 z*$Q2sm1T1?Bg_hyp81NqI^t<>8-6MRHm?~Wl3|pt`zZzpPpiefhh_@x**{0W2SEOJ zo1z7!<=Gj%_Q=r1bYmGDcJ>32!NVolv?~=NwPF=Qnw2mkBK5i2X2>bpdHM}{jFE#D zhj(vp(GK=F(7J!|l1^{;#Ty)ZCpuLJM<9AJ_s3@Eu=hoYqUL^MO)_t@PB)T>*=Nj> z*&Uqy9#(1rb<~3aexdzL22rVcUEgRG=5BAgOwJ)q%aheGw4HjR$Ho> zX@oh+^!)jVYXhZ>3SF%;D0rBeH+y2?JpxUJXy7kjnnu_6Bpq=l^gWnm@K(vLT)|z8 zR`ql|l8n$@PIrB2jZNfe%$v$0Hmh|8wgWyTia_kn`d^d@QDZWF zPOamJT6NjZKVc+U$OC;lfp6Z3W-SLspc3WEI)ENv3kAh5)}*AFL&oXA$sIGMEDty% zO8p;%D=RE`2EI5WW+ze+BBXHbO`t2#D#kPmRd(#`rj?f?@m$@OFRN4?d7CPfC{EdVl#a4= zk?}>VO$ysOnU*7sE&|LSlu*AVE7xgEyK6d`LHINu3-ZtY^sBesX(w&UN`PxAAux>R zJ9%oQhV_p#zY*%EN&!Bv>tv5#yO_CGnrsXiM(}yAb>WK=3RdZF8?jauRuk}XtuA6`oP5X zF9Bd*J!#Yliy5-0Pt917n+c8jtkE53W3^*Ae%R;CwU zFCVY{&8YLoPaXgB!((Rog1sk+<>lF@_4C{ZW8sh}5BRDnPUq1uAz}D(q~jR<_Jvs83f9Mq^02E|=9^Bcn!y zV(Y`G8{ZN3U~2B(xq8k&PQn?)E<73{x)TjX)G8hNmtz0nV8>bv#3VyjE02t9A1v&= zDGf7=f->EWFhf`Mhoe@Zl%&0#n@rgbSMo$iImn4SbCC?dd_(!lYVbMmB5p-1(R0PS&wSDp@3i)Fzqyelr2=G^eUaSG;{`<8|eafnG&sLz>%E%T6-Ep zgW@MK_HH3S!jAzauVElTq1#dYx;-0umH2=oM5!)&r9oza>L$53Mu}2CqPBY6b*xl> z?iJgJDC`((yoQrBifT~ncSpn!Y2YzDya4gxOif4gs?Q@!%8NhPrCI%$vUGL)4PK%w`S@ z2LXFQO4)L{>0QJJ%W#k9!7gFaAr9Le5?et!_5t~$x6!SKiQ3Dd`S}oqkz^JnI>y*g z{r$PY&?9V8FFG0wLGHt!XfPlkTbQIRbZh|AKW3VpG+v#>h!pme@`^CxQ%#JdIHEM4 z{3xlX+F6ay0!D+Svff&D+V0^u=W`f?7QsMyHIfit;e%CI%@rJKiVOUUOBk(T!SJ(fr;~pktR0e~ zRNKKjO=_0ZcvQz80Ye(E_x4DQ0$s03^NBy2%HeP{o~iV+nxyBiavKhaYbn7C`N-C%yCB7pZSppwX8IYipS{#?e7Nk~_*PwMRDf z*Ai{e9*=>)<*IM+@2_DiG;^zr=<$7q3^|%u3SQL%%2HV7xLar8_tk~hBZ}}}T{t{# z3GH!_8o6GOmf{VydE*WU7=4iO#pDJ;p3Mr zb@Xt`69d+oVT+GB?e{2W>e7>9HiLsp)N3^pMfMxz5Ur&BMI+$MJR7C;aoY4z460{W zu;DF4ANu3XA^aNI;D8w!3axliNv$Aua>CL9BV4<}XE$xuea}F{8al8&>_ktcc!+{) zU}@icLtd4kP0%+cgDmi&dBEpre+n4|#88F%doya+#i_t|tM&Eu?M_1&BGN>#m|6&1wW#!jCvM}sR=`Ko2k%ou=+{X zm(T?g?m*k|T{s8v+#c<1v8!V~5TB~?RB=Z~ucm#bwZ>R^TNeP8f!sbz1CpRm*wQb) z8M(H4xwZ-7Pv{^fa?wI4?Nxacqq_cVvA=~hFSN~q(LbIIvj|=HjVP6AJ>4sKYevd` zDP2uWr5Q#U!WS(l_@BxBQ4P7_fa#%A3#|DtNB77+YGu)H*fc@5$7@12LZJ~1p!{>q zk4eXXa7$qc4}t>_yAKF&SZ@Sk;Dt~6O)Si1M;9i0e;ucKp<6{N1*)1-j_dqkUptcn%xl%dcqYCTnFE* z&EHZG83CpP);%a_z3AmyjT}5oJzy8$T7guPZ8TF6<2y*T>To%Eol}mayTDROm+mrt zvgz!d7%V0}+}RmD<5d4)zGa1Za`1HnnZ$?l0exEmwzU3D-lQbreH;MuzuZk;ja_3z z3%jCuz^C1!n3_UD7N;#@QD!JFA8&NRGe#aRvrAQCyV^_=1d70ARvvNqIqiY*WpwMC zjK1b#7gEl0-cBIiVNQ+t@T0%mzdD;DI=aYBo<{8suG=X%wzwZPqsK|O0XMTAU%tXxrp0$k>u-#HG(}DVKagrO`~0Nm#{hF?=X$*MtvbP(`n3( z@&Nqd?c44W0PmkLvi-yZ_YDhOx9ZPor7769igQFa&mChGZO>2?53q(QOsmhP{jfkK z;&z_P9$7WPK%PX9O-`)(!eMztl4f!sUypm%$3!4X8~bzV2G!`5DNXXPY>q}YeImw9 z1dufm6pm|g{bR)6q82cg3K1K?H;N7#;Fg4hts-lZfGMDvEG=ICuvspGhB(BHKYTHe zM^ImGdXT@Dxx$PXZDaRX!0)xi6Gek#(JKARi}c_a!d%(kzIRjqkKu9-|1g{;iOhx-GIDx49e+=HDQMrFCOI7WLBtYx$Mi=|a+6&J;%+%CMv7cnzN^ zt6DEhoSb|`soEVafz)cpy8qsi3RkF^56%fEv3F#m(F1GY^dDU^#ahDxodJ>vTqGiTMBjQhZImO8i`faT~(Xvj6osB;nk--PX3f9R7Q#8t1Ggf9R%)eHw`+!PHGu?&9Rb z3@eS=%sYfxk&0irJTE2>W(w_3j+T}{%rBNy(_Ge78?lnA((c6_B$qdSwww|zT+a;% z2#TIx;0^x9fbRzFU;L6paUNmTVc#}Vz7?VJKRajnPZDI}vKY}qzwMkb{>hLrBu!ZS zS78IGo06JeCB8`zdbG;AS6SxQCM@)*eOjgWc0}jL}2I^K^ZDGC$g>dziQE3}SGy~eY^yVt6=v}JzwF6Eq6RBLC zk7MHLgZmycIY)qIr25JpkXWqg%Xqm;CcVz_8$~nB#v;2K>bm}=mrm4|c_rE%0MJ15$}KWUlkxdr?;ff90UCQa10c ze~Tb<;m{s%;gH!~k;A-;7Inf7&F$A<%~A(ZZ@C(q?Vz7w868L4S#=$mcIbUNoNP70 zY5d9;dysR*>w{vt1Z`8b-spY>>EmaFci=iJ*j1$D;Xks|`HkYu27pXK0jU1ygy|aT z;3Fg-CtloYRJqBt*Lf4U=ytBPru7xBO_Tk-!O!63rt8>GR7!MZ2AW=mLFwpP7{Gu~ zNX`f6#z4IeM0B0VdS?QXOwQ4S#)r;jYg3sBm|}P!U_eUW1O{;n86dbp6@Vl7M-mni zm~RNM5d9%B6^CyI?o@68=~2(Jf!=O6jO1J@+gEPINLzRP?ZxPbGWUf4i}gz1tcUxg zndGzD;Qz86j;8f?x7^)!uh zxiP}jIS8~n)T1Kx2bSw5n2cDmZvoI>C7*)v}1f(KzCN=6uRH|FI0KP2 z2#ESq)S^O>kyMV6j7j^Imh0!lnEVvOQ(4zlSNnR4l>?z6Rud#Qgg^ltMf>$VpHQ9| zPB$W#Qz1b!!FcwoQf0aY`upZSiBmGBvXfV-^~2te!Fy-=zBBSub~2$Ku>%R4z^H1q zPZo^)iIlMxZaje31!z(IYwP$KRfi4tQKtBVSS1OC`9j|ub}%YklxE~tv8C`bQ9zos zvF`0I8(4B>9kuV3D(7goi=%1++_AAsaVXikWlO>i;V-S3=8a?KyZY&yD@{ zmXe4jOH-iE4(9B7>&xelVTNpGG57G!VI(Oq=gaUHSRbHxW0E?uJrT+9XJ1IuJFN9$ z?nOQs{8gm*gjZf_j+BM>?13fmp>E%6iF96ww?BBNglq^fYpM&wX~d!S`=wlPp3?v+ zI)8Kp^0;Ih@~#?Dwg@4&k+S<|mFnyj(5&Pv5rs5C~TgTyq8ToI;$M=k7w?GWW z%9jf>3?cxFBlWD-q2HF&lwW1{>F<4-wu%c5H%-UdYFb_qD^9$g4thqf7w)|}1 zRfjE(>Ztwa8OGNf*iIzuk%R~UzA75w7g1v%8NRj zsr~kQD#bL(5K&oA{nbm;2UDLm=ok`y`-e@>lRH;j=HvLlrJN060#s^KGe$49H4yMz zK-nEz6<0zoesAg3JYyk`ZlOK{x#xk?pIZh~PCA`2VpzVvisd=2DUl0-Ok-%}meG3b z09YP@&IRjwvQ}I5-tX?+L3aRn>$;=6K!|Gr6`mDJSeJ+nWO;Gegq0eV;ZD$3vM{(K zteocR?`$aP=#O3p{&|T7AVL!E_ zDtMbl&xeaxoWlA4)dDC$?XEK@5ReV@zZ-P6{~Uci_MZ*#y8dF*fA@mKrC5S=VXq~{ zd5fM`1gm=^^6Jt4oU@CP!UCL2^{|51-`rONC;ek3D_Y26{g_pt29RFNXe4->=mc9( z7xdH74a`9RJsrup?s3FLMOzR>)E^H-EX#$5E&eIhs(y!#kn8?;44S~}1z$tIP%9mR zZCsYO(|gX+=rM1A9bbNh1k&fASt$^bos%IX%ugT0KWQ)_o2Hq(nt@Vr!Gu$Sz*1Mh zO;10K8QL6r0b>L`Uw~>G6W+{C>X*1R6CTj+|LOg{zLMuRV7`0zupOO*&VVJk3kmhS zh0l2#BvkG?$HCJ}ozaHXjHIdE3!!V1ZuPqIiR8_7gNZP-FXZms+|J3++& zJ;joTs?}%!B1Fou3I=GzWPG}jNf@2?DMAV#HKb~6X|^I)LE@trTuuB(=CrTxJJ!~} zAw-g>c@#{|O(!Yww>@4W{X>Z)Ljs8UJc9#Zz?FRvBbtQ4;5AUNj-pnt7F7~6Y-^TU6u_b074IG1qS?8P= zTmG?k%#$TD2C57^8gLu?s~U(;gOODNv}euBz3h5k_-)Q@#Nl9bn+eV-o0DhE(^-6f z0hkX0E}h`@qPC*xUV4XK_2Io8p#T0_wVoh2G}j5#BB3XlIA=9S49@7GMaD!nxBusU zHQ?Xpf4_?$T;R6e&UC{PiqBjdnRn zkFPcXq!@GcX5p*vLmnFg&Yv?Xl*J=bcRu_l99zrHlSi~V3iEEm!IJn~)Mg|P%Q4<0 zf=1!9%dN{1$8rBkD$5oh6-Mg(7NXB_ z$!Pw8s;>M%H$#LOmr1Le6cMe2PCr95Y^A`|x=gON6HTj2s-KR+Cu_bPeQ73#Q9T$4 zOLJQ>Zw@h43WI6c#i+*VBt@BoU0|*ITPe;*24xKXSGlt|Mzo~v8(Iivck~y!KX8(u zc^phrk2K4~_qbXf{2ye2IqL6Bc7T&Wi3ovHl5R-w8HFP4QUb;TPzD8OnR!G&MQ}fu zd2l~WOK~V<*~BqQrL&n*($o7>jzRGuSP^%WfszEw<6#&$V^;6Km&+c;KQB!q(t-r9 zcedsM0i4ot1R%r3MqlwScaoTP_Q z!};0%dNs}SFYf%QSKR^{SK$+;6(`d#cDFV9(SW<<^QpA7+%Ng%6KB76{JICk_UYII z@}8PNe$y=51K6am`@I&byEu~!gRThbA5EF102AYq2o>3Lw%LJ!q#xRAgM$P0Q^&^n zGolLZa7;#SLs+QhAA-&`Cp%-)et|SrqgdZ*KL*}X-Zb$#%($hbS^qMw7HyBeOue2g z7Sze*2>p0>ZX16}x%e?)AqaU487p0gJPL#Gc7}paI3;GfnHFQFrD&D@2V8dCW$aI6 zz}!M0ibSHg5MmDDm&hlI0mfa!kn!{L@Wv)IfQgHm9W(+ z!`$wP7OZXKKZVubh1&be9CzIBZJ{_?w2n9P|6j3}cH!Xs-9@yI!T%JivS0dX(QcTD7aip7cPd=ucRWbfOkWP}EYMg+f zFs*H$O5-Ek=4}cd(`$-l2g%VBGCM{>FdHFAHcAQz`NP&CL__9KIDO>?-YCfVFcN zh8hYunvmtjT&wQFyR68PWi7D@YqIXE3zYtC&dl5++2u9+$&-yXrt(*I;O0wIcl%a9m%Vc9Y2|%ph|`INl25dLQ5{|_Wo4HmHKsI zRUe3Z*jmO1w7d}UoxAZgG$4_VCN7Fwi7ca2ZWVOi^y*VEts3<4Ct&%buH1eeEh0wj z@XUs7N-L`d^}Nx~mQb0rDcQ^8Z&|tk^)do}ScxX=qXGD7h;48n>GA|K`h4Yf3}nOh!~&OK5y``6sa{p9GQK92@`ab;PW8#EWG5;q^nJ%6TXOG+a$6D{ zhPXOS$Y_$jOh2~ksq`RYY}y;}1F^o^J^D*UqlcQSpB~$fvNvqKF8Yge|yiep9>tf3jm$Yy22wMl|cVDUN8x8;dRc_jI(T66-LqeKKp1hfA{Xsq; ztfb5nAB1fOa65pImC3Jw$w67il9y@U`#YKm=O;i6ouEqTn_rmd2YM1lgQa9eT2>Eg z*L2;-+Z+SA9mZXY+~_zQi(y2j<=w2dHX{c=hIniU@@H8_77<_sNW%IBeeU^nha)<0 z-FYm0MMgy}v|X-nZ#9%|pQ6)lF$p*6DxtL+lcytrI_Q)bW^IsUaMhoy4CAe3maK;C}^?rFZ)Q zxO{JTrD28g|DDLPLGIQtBIvB668x&%o$xD|2uH$+H=-Yzp7|e~5HYAXz=Plej*YZ@ z3FK?1ApRXf;W;s4#eKuX_8*!4ORW<1WcvRh6Zn_Nh+mqyy`Iim z^wukR>4!jS&u!2_{F>(S6(OkLX%u-!L_d-z>d-!z84{1mI9i z)Y+3gfc#5oTnvaH!F-HhH>kqOt&NDQqcYwcTD7?~R&OUfEu8m%_b9$1UpVwAi7 z1IV$zLw8*JRYW3+QJGiIuA$aeFZh;kO$X-DJL2RM?=fQFIIAc2NuY+6ME%?p)0;wy z1svq+O*FT-DoLC32`XVqmP(Lm0wATMb@+T>?#ZT4Yau1L=Y#t=r-L)G%V$~Qf{RG;3CUX9#6uFaO&I1kG zE4+6ZS>9jwb{GC%knpq2!(zTcV)_px)_*r5|365sgsbXn(nm-g$U>c|v~tacNy%jR zxVwO-2GnkLr4Ac!`JB5h2YK(>dA9Ge6gKQwNHkKb5V{mCi|3tB>P(}3P!95%ss!v! znK*{qyZVJ?X-SXKL2-JsqG%XFK|vP&{w$=-5F|vgNx+97%}!;r8WvPVL=|<5wC^4n z!-x3TZyV-9SNTIx7qjcYL`x^Ix)@f*{5tu&ZOEmnoiHEkET|rMMC&4J^hf*{qe3y~ zPWGi6HTW?P%Om4|xa1BnB9t;U0CVs7@`}NBa;|8b;gJfnLGoOtcx_SD&g^owl7aR% zlAbFEF!xWxvQtsUSj_%JXT_;EMxG3dG80`z$45A6!9u^o^ki7)CU)>X=FrYzx3=l` z!;JXy6%4GYHi8&%S9E#X#58d(clkV;LX7Gb-g}0me#vj&4?Lohw70obG&tp`bwR3U z%96L3AB8$9gHiS&v$X+HZ6k!zCm;zYzwk>y=pt1Z#f9raaCCO=z0>$l?f}K;rvD3~ z|MrTB1`5H9XoKH!hak75b+Up*+QXdjqYDf5sQyHH6~{_ut!@IVyB*W~-GQ}B>GI+# z$HlvTP>9Wvp)yJQC_PpXf*Z4{x6L<0LuT+=tAO~MyEL6G}7*+Zbt2^2#fA_{6>hW>?R?R`V-t#JI_ee zuF`ljCVHa}-e;>3I6&v{K%9L};JyKibZ~yWiapg1N6}vpQl@v4h>7n#^h3<}UC40y zEms2vmFBSyu`{hO10;|`B;SLkEaZ}AZ%!5DzAw2U37{5BxOX=?$jk*B?5H)=OO`1i zREIZD6k(hxtHDY=e1O`Kc0!A(0eX*GHKN_h;lClVyGa;tktLH3T#LV`+x@5{+jW-x z)p|F%Tl3AL--(EAH2<=w+6V)_$OzR3k~L?bUW++Pyk(>ibBx%Y`yy}dOYr&@iHr7R zI|>mFUrb!z@Y*dT$pN#&^FOJ>4m9=s2O@_5Sj7Gxi@p=se;nzbzQJ!e66U*a$jW@K zqs{Qqx29T)ZYrb`uRrg;3L0lG7@yFGa&+kSnL3f9_|6XTIn*svjJlVHf6^4g=CNb@ z>(g~Gi7zRs%}CSa?0`0VCT?vOHlajk`HVIB4$0(&fP#Qz)?sgQYfyw}Qc44?eUups zs_6CNtfXAE`jm`q`mKzbvw5@vf#5BYve9~ zTZ-i?#mN8W6@`8e>}WZpaoef|UkEN@5FfcCMn7>LGX}0j4adJR5+Dn^62nl`R-W79U zmKS_fP7MB3dV`<|;oT8Ue3la?j8h?WZ;qrG_u%*3r=a5%5@)65Q51qJzLzw=(Y1R> zQq%ht^0AHdFW)??S(ZaM|OgcS8F z7C)MXAIr>iECYhKx6dIiL<~%`nieJViDx68&|aPpr1UIx>h>q?6G5VEZKHN4;$4p5 zB)SRaMPH+DNrqN6m#$c~gjZo|_H21l1^B}vDP+JS0CjH3+i)=l6sjZL@}IA1N>^w#K{&8;Dv*N2y{OYYaz!qIgG-|>&ag_z6>uhT zg}u45fl1*U__Y*7P-28`Dg9$YXA7NP+%`cb5hFFN{sLFd`BaE zJ_%mM3eZ1j>A`h|Y*Fi29iVY-H8prxv|KaoY=7hS5#k~2&oh!B9v3M4cd|Bs< zY+>Unx-H+6rKmtmiQXy#2eSl^D1|pGuIOmAd?%t zzm8=MYJ^&>7GXUv)h>>A8US-yl2yjm=^{{APnPae1H64P-nsj?jn9}4F;?Y| zVrI2O3TTo$XWSQ<{ETYmpah0RT$X*f_n=@4TJIinQ#a8h@!Q|wTqbA)q{rio6#G3@ zm#~2Zmg--xyE54a#3c;e8$Z<+ZhAp3^-jlab6*gyF@&%Ap*I?B5-cCNQvqMV5ugl>j}Y$`2$xqO$~Q zTk=GPe=a4q0a3k2LF**tRZa4lZ=K zJkG&bGoqOrPA4l}!yeJ!M`#IWzhqT{PPXy0WfoQe4F?D9;05yH(R80sxQ>bHcI_aAS(-hyaH%axeyt@~uy;bGmx$bMDfsWpmH!Tla(2;Ld1i)}yHV?T{4)Szmi7}CAikfoo5H~4HA+WQO3JGKN`sgpTmj>D}EVdy}O8ZGdphYpDG$Bvqd z+al5=@--~uoHHcV-uCx$nk}sA4{%`d4qzGXGSG`Pw*bX}OTnExwQLWm*IAAB z3nbs>!Ia_h8R(7p2kJMJ!9eP1T>6Xlu5+1RO%|u_%b~9w`Hi`haGV>F1un<8^B6KZ z?UyOGIXNeL=x6WnkAe*Q6qLhxGeXBzXiK1|YxQ$DcKIU01ZQa`T%2f%c9bwy5OyWJ z(uD#u1V@fKK>)c#ESPO_$oF5V!mElDzXuMp1*0mcqD1gjbpptnP?tz(YC>mDH80Z+ z%6k43U-m7cZTzy1JeV#XTWFv)+wn2SS}Sf!pX>@c#`UK~X&FyIj`$OHpN21wv`%eX zS4sA|kl+e@{`>mpt-y7fIe&dy^$VB?^t)-B54>NXx+1_V=mk;HZ%w4ELL2Rg20mp+ zmaZ@yj2`nKg;t9%i|Ib7k^3Tjp@Z$cY-b8Y1sY>hw)Rl{w`bk~^&OY%LVxHUcdR>& zgVsn_U~|XTM~7XmrDOdWI~&Yo=-I?Ez2AHw;<8Fm>kf71;fc!k)I428=$4($7}LOh zg*xg`?+(D>q#uvbXz1SzTdI=bnM&cTW=GKDBdB%P4AMvGD-+He#{B0XBsDMCEu#&Y zI@ZD#&4r%>O~ONWedeQw`OqK~*I~AQ!s021VA4%Lqmao(vrvdc$3^gC!-IPpMRqtInYZS7qWof!AoSV zwH1dH7t^GodPN?k&z#lg=^ShJ_958y_MBVj<1eY|9bsltU0wK~lvFyoTbsn~9%~lI z1+9LFGhE&jz^;RBz`*)iyX^Sh{&(Upt=JD331$=1>Q4Q8_9TapM-Ix+2=ZATFv3m7{1wR~e&+O8dAb;(E%RPq??;ULD1Q3Hu_XJW6(5OGO%Fdm z^2vcF&cxx;$< zzc8E!nG;F$*Og@p;>axJ?f5XU(3q_CN}of8+t}$Hc!M%U4@Z8~`N`N9nr|Hr(*7n4gEA};*Xg<5-3@<>@rBkrQ>OeRcvT9 z!{Ze_mpAzMmAj|_(Xn{9Tf&)1$u}A@qHkw5k!wUCznEO|iz37FB+rd;T|@FACe?Ie>G`!_HYl zWCTW%k2f~@b}|J$m_f8Mm2~zR9@%zy1LE+d$q=ZPPKk?rp~{`gPf!|6uOU(mGS{Ue zY-e!CEyxS3Hku`L7AjDFu*uWI?a3HGh`#@V3!BaAtz_Jg)4_z$yHr$aAcb!|otBV( z?*{*aFB_u+=#XFD&}Mkts`}s$H0|RqJ*{vP4E6(!qhLLzXSUR1qtGm0ggC2Ycf97p zwN5k9-jR(ow);9)ushkdB`+zlo@L0tjkdjDa|tsMJ(++z(mL3St6yXA6)?%!e%?74 z+PO6vN;uqcleND%dU!8&k5$6C=bAE#<(8-{ARcCxNj1YoT3f`F#!R8p^8V6*LT5^1H?XMwQ9u`SaM znosl1+{$ge=q6tg_HaH{+$S}G6$;ZzB(v}~dT6dWn0J3NmyN(`$TZ}0_JSLU0tbK_ z0%YYcVw4wG+{~JK$rGD9`rtOvbdx1}3pCs7P_Pc1gKMeFa6R?6=#Y)vgBj`T8Gxx0 zp6jc#qtnopO~ojcc!JGz%-FjOSm<4SReWe3dvu(DbrWSBM`7Jy1?d@J5_h7W-)GRD zLyxI}ld+b`a@TTq4Vh#Q3s$fzEN-=r$W)==?SF=oE43nO&Yy$# zt?w|B9u5N_dJiP?z{_1FN**OdZH`;XIo==e6XuXW`zmNO!|vjIPJtAp`*IwK0e}7; z*LgU2PacXQNz0ix4meeLqLwlTY^z-_Z-F7%jiToZl3XV^dE1k~q{Rg>Hj+geYZgaA z>vF?}{=q|GC+bj7wmj_{d-MT;&OE9sj#Nb}0h{L~M>}2iq;J>>lzf;7jWi3>av|~c zVb9|QZ3A8hr!Ri=Wt1m=3W6%z1b~#(dhXT?)iQmb+yL6-=?@Yi_HN>_kx#gxCtlYM zKbP3<&!#uw2#s4GJ7^I^x^?MPZj)Y{w9S`sUfIB@tn!B@(7nUqM~oLh)pr@)H#)77 zx<_oyMjM#9#%=ab$pyIFJh>NOqjNZ!kIcY@;--V^fOIT;1o8z0zRG~7JdY@MQm5??-ip zd%j|&W3Lip{dtQDoo3{C*rKuEIS0K1-d8_(q(@mBwxtg| ze+jjE8>1;Ypl$+V{M_mXitNDQrrkimA@kpwqaT_Nm0)EJrj`=el>lxIKBBT7-8603 zv$4G@@Axra?Z$v1Uz~^Fc2;R$3hjYFRCA*DFb}I^vO897Po))Ha$rmTf{fgZV|dqTqL*k~?`4Aw&|5vTc1&)nG9aJ{EqI_Hod}_Jp8F}? zg&DLs`#EE?7w$*}ev11tMD&R?sUalp%kbuo1G=}ekJYyn8-jf#2!RDVGTXPBFVodC zUi4w5p0V>A6RaF8-g{CzxV`6#N>SN<+2Q4W#Akf`8`?tag#6*6f&c=_OUiM>`A=BR zwb$*}Ig$Pm7NUFI!NN;sW6Y&0O2vl3;z52EW_;KLQ97w%`KZq~1gcf}?8~B6TO>07 zS}Ogpg^3I^mud!3Jk7Z3}d^|BQ+nU+Ae>p^ATa?S$BDx&AJG;$-)Qs z*Vn}pbNV5h3}`SAZLY9kKt!WzIc}VIoo-#&80uy%hBl@yt7>mS3)UpKUhr`-0T&h| z=_<7Nk@IN!*eixjyu=l8Ri2uS+~n9oW=UnWguKdkM!@$=|hrgsR;2jgSeQMewj47wt zW^KCT*OjoVg`R+$&x5>xFM+C(f5$7WB3rIzY^e5HfZi5#*C`V4!z|N!DWWnwc>~Jg zz^gu*{O(bx1*T#hU$&=vqED?Jr+qSyQ3AL9wMg8L-WIR|>Yn+xm!)*F7L%!BYVb7Q zJbCHO=x1Z46kAwC01)Jj_)xZa%2v|f$$UyETZTJ7T#9N7$c*p{OYwK?3A`V@=izLb zIk6L`&0mLf-aKa<1QXXz6>u8{!P|m7;tp*b_zoB#j3UE-cpEY_fg>XJf}?bUD_Xkt zM6g5Bxs;&s-+vm;=Y10b*un72xWBF`YbaYzRd z^H*4uw+~*yGt{n9SCjX&s?sgXjHw*ZZ5Dq&6~A-nFDN>-p4u{sK$`Q^oJ#BAKK*?m zx$$51ZQ4M*Tsu-_Oz0fd7+E*_vJdC+hLF&nC^`#eX8Hi|eHDL0mrVx<& z-(p3e)@9OuOl?8yKXJV2t5Ott4|@i?8W}^YQ}5Z|!wB2eEZJeg!;PL<>#MRk(&C?m zHDDY^0+vv1IxEp|K_090-J+IW*}nXrLk%lCdGJ6?HxPt6mxI*H*2sMQtH5*m1&|1B zJr*dQwHELWsn5#mk!(@B@E0;h^kv+Nt8L5)0_09skb;4j*cN>X5w8M&8eji-fnSol zMw(o_AFoT4q_-N5H~cf5fRsj_UpjmU&CQY?4#4S+*LB0kjGRk+x&sl5C7y$ z(g0E3;PMfy307eWwYY|NJZZuy0^hg=Ou-~*=XU1d;%5ufjZ}hhG+}rbR2YpYB)!vv zSPLXaNZyga73d1Ep#BfQ2V^}V^tq&=1c;9#NHEl20KX^V);VsfVoMTz?&$|{EZ~~< zHmHwYGJf@%iMIYui?!Y_+rl44XlDZN%-0@2R2^gf9cl&H!IRe^QDI)O0338(0wF#zGDJu?=z&J*nKCMcqYc*`} zh5{2r0#rT?ESO%iF-@bA9LQnW?%2aNsU6D+%ib(e0MdGrwD%a}CIva%n>0eQA~kY0 z>uXKbSm0aFqGU7fJy*lDA8Gs!`z~Eozvfp4=LP;Ys8Dwlh@NC$xg601g+p?}woLurI%YYU1zzPX}>ZS*sRVtymsll&rd4D*adTazWQQqNb z_%%LexZ}3lR)U|H23&{(PS571xp@X$T44!>ZCR*W?X8O5W`-@|6CJP+lyR;oO!%D= z2-}s&acdj)2s<-Y9MHIjF4y2-dvQ+g>n|Ds8zo4Ha2sz1CTEm6ulgHe?MOi|c%io& zY%3_lTp$;>AD3030|g$luS^hg8xCG^aU#BTRrT6?I46r^(bYl#+^ICX`+Q&lD4Z6KOfi_Qyh!s zrT4!r3Nk&JS2Goqe8CP#WU0hFMg}loBNH| zqj{9eBTt%zY6!o});%;_v{<%cXfx!X@6uBehgi9~U=~dod=spZsrDiWe<()gEbbHF;RxGPPV7F{!ep#Pm#vbM=LDb4)Cks{alZMMjv&!t4{)@Nbkp2(Wbij2i zAs6WN3@WTAC6QtVPtUP?C@R=i7sIVt8M<275Pm~%T8VNI#sm!2#L6awA*|Z&1ioVv zGFPYlE{e?LOLEF?R;sQUf4+jR20)u*b@Ev zB#_?v9W1G9H;_?4EUj{RV?OnS_N6MqLv^#k(yV9(;o1Xc3iP-tlH zwH#OuY2TWCSHn$>>{f9$4Iycbq%*Yj8PxzWH;Z{Z3HJxEv5rQmQj+a^U3|~mX$OCLj^seurS09= zlhr0ZXZ(nU-j#gJlGxfmlFJwk1`<1?V6Dx+MzEG=qo~>)a41NJ)L?{6C-l{VtHc9r zbjME!n8@6+108%$5`Ru>z6F$ftREgU<$hWuY%MIKg!c_T+!_g_+ITSgTkW~!yXcd* zh1rG}PQwo#LWK;+*l;l8fI_&qvg=V4!1-z?!e zl*GIRxnvW(8bXr7teZ~w^dWoH>a7DxLpmX=Vv{=A&gWWdxzrfIw%g%5uofpx3`y)N z8qHhNk>y1V+cOPzlq z%x646D4z?U?b(rrK}p2-l7TuU#h&?aspIR=mTOdPOpmKApQWlZBhvx4uck+1~`IDxNz1qb>eIa@)4}H4pV8Tx=1cN@y>CQs$TIzQSTwCaJaP6245=allE}p} zN>8m1p7xh!_8I;XwghiUo#!<&l6Rihh&(0rTDrZtzzFLhQ3G#RW72j-1>vYnIS!pr7SvD&a?h=se zOlCaJ$~zV@s$6G$l;cI6>|QCzbfi&~Rr_$k-99@Aj$7xd}OTYYFUdzXWG2vwU=`o?)2w|{&`=72>Wv|A%(k8 zi(c^}9)1o!n9Iw4!10nbCjw<-!sp1JQj`-UCbf<%O@Gb2YYHZ{K8LW|7c&+_FvDGSfoHbD?ebVrr`w&AqbKX##WqlV3v+%kPSfjGo*CZ z&P4^2A|7^$&Z!*;Mz=e6+s&Eqd@?ZQ^VY04i?iZ&tsneYz$^<0@P$~d^J8Y5JS7mRf;s4&-2G83bTlf?UHB&hruFp*i9Hf zfWQj$$BE<%$Jvm%eg`#1PzDHNQw&J^RiBy}mvm;BY0J%vJFYNIV&u+w3NVBiwb`0X@*>sfD2>nEEdCV4=Hu4I$u zk{T6IP^pP;SQ-l}R{a?cLM=|@vRt{eHBYDSbT{G+`tvmEV5+Ezay$U|TP89`RNX=p zlTJ%^j8wRV=Fm=a-cyy!h5xgn6@p(RU%VR-KPb^tR}i6mDTaY!El{0;h&``0-UR0a zr43`YgKu6c%j8SwwJ+4i)y3RxWdat^T3#T~t!pg$N0iLV?dQk8DE2TB7HP^|z+E$F* z;$c=PJ=&iE2}E^TE4Vx}GpNvg?_r|Y^CB9Ya|Ds^zMZiih>tdq?I=Ft;~#44#=@fxdbxb6O-Yp2dXMZ!!6c(Z zD@ur2XojUBM^FIn`kD~z(YRGxc45mdQRk5GjBpOf)ESY!NMN9k{rmEz>dmTHT@gK+ zn{=uL;i{&x*Oc!eoC$K1=SOLY@L_5Ue=tajFZ8<5Z*G2s${25Ioc;L-)zxo<|LJog zQC}~LcFLVM%O#;bm_iY3OQhhdHv|6WZ%7L-p|%ELV%ZCD6n8zz!ADNM|B^n2#&_@5 z<$t1S?j^yVLBQy7%p0N zpn6ci=@ak~K~ld&;G6*b#!c=O|EV=Fa6gvsG|zdr?gW&vkJYQ2?8zn9|7L-1$k|i7 z0!N^37&u4z)~aF11CK*=Bg{ohI&f>qNgQ}Cx+?%MeA?qaYk}vnrRWQ5=302W#s$wX z;0x&tVtGq8gKa9=IX-X24a0f3xL-hbV{Z^wv(+4 zw0g`hWaUWVv1&=@J9^OlP?G-nyD9c?m3FyM+h}h4EP%WHE@2A3R)@ZSxOOd4ntol2 zO5l!3Jamv2zmR>K&V<_uL&&8-cG=KkSjdB;c8|IOv)hh?5!9}5$#KK#vrU175WDSU zZ){m<>aRv(f)a2dly_}5)viX6bz?!;e_2>Wkxx9;O6fQPLKFNUS%zW1csu0rZ#S^if z!tuel*Iqw|7b^a`7cp1f$N)4YIfaa12!v&e9ZId0 zTfCDB^MG_ic^`gT>VeX@%59VAI4$mJfbj>=k%6TENes!HzQ}0h0H>MM9E+-HZu2`o zUmRoRcEae;{hZvm62b&NWCuF#rem@dkukE#AFF_E-&sXu3}y@x!-nn&?3(o&(@pD{ z1HY?pTq&qbRbP_RMnBmQ-aVSi+C6@zqSRiPetJ)Dfasd~Qn5Ac5mUERNUbiVm?wwI zuD=|Yj58?Jgl>WoYO(+fMuU8vL{-&>p5B?lZ@49)PonARoi6kJ-&mltIkCIomrBC_ zMd*oLF6Qd}Oiy5-q(Rm3F1iCRn2NL6r(>Y9Sa=hp~F?`C}zV+Fc_N zS>-NNb@miw>T#Pr^Vj?_`M!slQe2>Nhg1*kaZwuO_8v!V5(c!RMn+4rGR)`fO96JE zK$;?IBfGK&;OO+Y6;>XyHccW{DiXshZTb>O;Y$RhUjm8M^dIvF+Ql|M9W^HYXJ=tL z(s$GFzvj;kEOHZJ{#+#Xm-%z}3XI$^EjGwXhb2X6pec;CQ2mgJ(+{HdqA7{@EAi?@ z^vRsvfEet{{2?1H`N};~#CpmX&0YGZK4@# zr^UV_dM(eJoHt!5skBD!V+#9JsjsSzwxr3)O2N0|1k|%J^ahye^&bJ<2!H~V{TYfp z+Lmh;)JI(AW^NJ6?wW1h{d2lkqdZjCMSqcr@S)o3qgzv5&Ama;H?lU-z77F3mOw-U z_A)HrqV`?@{W(qUtu&+EtNR>m50Uxy&F{Ch1aK^D89kE@+`^uWpy!|*D)#!t`mg&C zB{4cYB-)@bE&wJ)vjjTdvrk^=J=CUU=P#c~*$m}vxl`NI9Ao940>91FcU;+bdc%2I3f$Ga0&~uc{*f(U6~a6T2R0{XY*mkrvL0*|3>)8 z{BsuBp;Q^+2j|1sRo2SEO42B~b{aWE!+I|ps+ZJeoDpvXW&8B6`2(&*z`64xQsBrF zv5Y6KbWDyXaMzxh;QW+Dghb0uVaX4yp(m>z52__-p?BovJv~ z(zN?Be|#8bJ_V0k!+!;EM=ryhQbVKK)LPU|N6HQhlPbx~)z0UCdWR%hQ^-F^vai8m zcQ5a8KrO2ri(2yGsu7w?B>ciAF?cbJlrheDs$8a$w`en{j!e+NJ&}KUK zV)9?^4`6pdi+V9if<%*EQ{({Z@;gi=3_W&PE+xIVqtFsz+b;?Fp8n>uX@dPvr)ocnR+y!sHw`ogk^9aX81D+dycf^t z`!f9xhOvzrNgal#DhZzdxIgV*?vK3vaHgCZH2t%1R$>R%^c6%?QuX&a4I&J&QVJRx!pW^tzYev}+&9f+C6VbhQU{#_^z0p?GR>fOd0ic{x%19j zTFv%A1!YastfuFDCm^BTIIr+QcQaO7!w%ZDczS9b^L-yXof$BgE`=Q(k zx_}@D#TmWHypF4{>hqp|>o*cdI|ms8LVL?<-ixaMA_11AuwuV}0SV9BMY_V-hub-) z7k|-rFxnson4dMVwk+!=&2$9R2{{X$zGNn+yi>c@ByGSCOZsu2mUVXcoxJ)p+S?KY zHU`7dc(?p{ovl6FyuDG*PX>S+Ja;G~dblL}3U0dM?k?-LvG#t*gT7*Xsh~fBs&-g* zu|BEa{gcL8a6A2dzf{ngn32d$TRMgsoUF`n8&M?ytS$e3K#PH9Fu2CMTw^1@aq~zI zp&K!>(KSRQwPKB^;n8x2TP-7Sy1KE)@d@H3pisg)Fh^|CpsKEl8%C(^>OOaB;8ClL z#aV|%<(qtwkq83tz=Eoo^yQWbzZ>knw4T96?g9Uw@{=PIvbY~}(L}w3YjKEKU;fXR z3gQN^e5s)S_J5H6`aj$M`ac{0&;N;U6k9~dr!!PtKx0{(=fc~K&|ScxEB*sf-P*!? z^oD$L9k08QjpW&ON_ZqEkfBLNZL#(XL<5NIDL*8162(rdUqEBf7<)&)UampqDZ^F{)lr*1iJF#ClT zoMMwdV6rT@k^9mD1bH46i%09ZA3TlhWEq^C~JE#j9w&6E& zP5RJtb}(Wf0nhVuS;Y|(ck@g6c>l&d>>VAK^H0k%ma@gblsEpB6Zk;e>)mUV)99pa&AWh-<+}SBV9hB zRy#McnEgw6t&nGyLTP{j-W0%7%Czo826*!HEN!B(}}yTLZ$JajMUVc_H;`HY2_2l(RV%LYmle9;vjhEL=r|pv=IDP{yHjFoaXy38*Dsu&q)6w2g8a zO-3rE!i*7;Q3lk-@zm)T>T{LUaRp?Xeyt0&;vm9dF>eRJVubp`=qA(!$>9&nYKP|) z76xL%{7%H0M(i^i*c%Ypb~xB_+XrS4aZZx}r~T6rlsNl@k5!gOYZ^E%oNKE7zB17+0fdP0}_4)1_8@HDq1W?V=P@f?(K`LE2>*45A~1w zA_Blpzun)$NtiZ;P1r%h0OG8_GgSkDVsYEJbNlK{TK{$?e@6-bt1}@BUoaS;uPCQf zbc&F}_z$w}B+V)q{6el8aHJrP}C~j z#~0F;ui!m2gqvhV)O6*N<2Qg$n$q;AVJIv~xU|dIj<_#9GyU*i;VtRPdCY8Gi|xdQ zGE8UHtcYHVlTdB+%0yWnJ8#3DK~1~X)w&zC`L-s<-&F|bu7dWYw-VYZMx{S+uPitXdmLYaY5N~E@e z^>cCsluq>n(;LKh==^d8K`BW9?u6&(fs4P)7G~A!nlSj0gk{1lz#rt|dso`5wMTQj zFE)G7c^;1p|5Fa&Poyw29r+m6ktB%1%(^x3`h?eM6k-I`9Y?O5YuxGDL^B<^8?kXkkATE%Hu zqOb4*bI-s8R$JuvhpgdcIPo+3GHGi7Pgd`d9+Z2GKSj79!~J}p0y=#Z^E8=7W((&d zb1D4|C1odPNiRpwBZ(Ys#0p) zDj{#dHxVYY^n3KZ9-Oy~HcynrZ{nn(@@!tK8ehn^{|njXax6C+Mc)11jqnC&m)E`) z3JpF~1YY1J(v`{lW=*MRyKrp{s9Zg>k7TW>|J8oV!1&Ha18aRzS+i4fFLP=4;$U6I zektl)sYt;OTx+Ol#mL7aQ=%s|)xLM4Po800bIykYt8lMFo%|TQP4*V>8Q>W60p_C~<=a?RyvYeU1(O56 zTH$S%*fsMA*NkRgW^MT%0Ll!<5>n)9=eUa%q@1I_^cM&^R>`77~VlYA60>|i9d>zTK-#_Vr_8Q9yuw>*6~*ySH* z_GgHZ2MExJWn38B z80bfT9dC~Y|a83h)b}XTScPMc%CWNh)$G|<5W{U;nV+|vX7qY;d*hGoaIz$wqmL#KJ{iBfn zn^`*`?A&V^^6Ojn8{)dL`V$7D@q&@US7Wsc-kjjOw1s5#g>59ce{oxWT5RuSZMR`N z_c20VI0ZX}dnsDET|=aV8M+AEc6_N{+S{D=j+w!v3;{KTA0&gw1ia(Q*dZZ6MLB0; zXNZK;?6H`jK)g$L)7OY-lJG_&6c8>y^(g=l58vTonWtW4mahx}wVf411Mmr~H>mRo zgnj{_V#sY4%CzgGG>#a$#a=1f9fg>61#`=uh5E!%orIwhj^Yn1Vgl}l!y>7?YvY)H zX0zo_EP)5eNDgZaRCM!w~ZXo zS6?HUHbvi{iMIW01%nlunPN)hX{8FJn*@STKb>=-Q{7%e2mKmF)3f?I$r`QGtRCQ$ zAmm!$>~cbpg=g3f_z^t#|H!R_KVpnKucS?n_L$Q#z5khbn*G3Bbikdh;jr2=lh2l| zKIEok^-hjUJ{pZRfd42_Wl*JXe+#<@5y{r`~LdX#Pc%g>AO`u`%gvtQ)ai>y;? z<(f@8fGd-A63xgj8Ylt(+4f)lAAvx*;o35cBFJqZrSR*N_mtW z^^l}fT5tRN*9cBFz>HDK5*TU+3pH{n_MlXn(gs`f8tjhuHq~9X9ZK_5D6QY9MYzyC zLUUeSaX;S=)Cg4UcSCG);2yXd=21!~uN*IUw)#g@%8#8Q(jBxtvVG$5z77XqEU4)O z6?K^Kd33XLF^ErM_%IFkkTJQA;VTiivcyi-jb|?l;j-dEV$?%27z8CnV5|bvIa(p! z2Ii~(jcytKgKnD%L4el5q3ab7BmRlG82uY_`PYV02(4M4(jz!jh}`frD}>~fT)L2n#E4Q;KTSZgb(_TQ-jX=}eQ?zJiz)YM`!q7HNQ(JM&xKq3!ZU*SX-SmD6UW7|&_CH3#~5MLNq zn-(HzW#6O!3*$~^W_f{cjzs1|Kd@ zZ~R6YsAebp*uOgx8-Ijzq5a4??;O-Z8J#|3D!|c=*O2!rY~9pFYFp{b6|(30?dC@_ zKbv+7RFCZuy`awfE}K+0;CuB4x+(6hpXCeVk{!4f0%ApNq}VsEpX_wc=WS z=R>J#3tmwV&MP2?Hlbs)5F$P0rYAOkA>870q?)ubAP4z3oZ497C9PmW$EwP%HV^R>!?HaB1v5s%EQzo9eIH5i4s}k9=hBn(!mL-;DqvTz%-?* zFVL8>fc-4Dy5rx*UYa2L>saW(a~C|D9qwiooFDVrV zyo6D3umQt|td6_HQ?wlEVfH`)xiG+`i?ge9fOi__r*i9)P4e8g4C#-oe^4$#vwLUt z$iFBzFyFrRACx=6&X&{H=)kM=%7}6<$|2%l9&GrC8aN!o$HUC?g>t>w^^WH8e0e|J zQHyDCYhMrNWowKcJ4GG?NC38b)jWm@1kW&&yaEqmNRsF+lcmprWOwFW%Sr$QPoy72 zIF457MUFw^KY;ev(u12V`IS{ar zVeo|{m@99c7VHYiNVdfx&IDlTP}#09*qufHA}3vcsWZ8O*}o7kvgUNbDIf{lQ3qSo z=0(iqMcm?*U=exs*@E}Da?Tv9WtRA&)qwq?y+94SZJaa;-3RqycpQI3f~Jh3o$$?Z zZjr!qPy7dnn7{o^nf=yWCad(N=5&K@-Y*Kv54BEN7c8!Y>tMUsD+9fzetS#=Uld!$ za6^u}6c|_3;kb+!A=JD49zF3LnXhcW$B{N~&PO~X_@tNlAWFYy%izQsP-yibKI}|5 zPH(yZ3>{dvdE`~y`FUjbRbwf?Z0XqT3ur&`S;guf==LMSRg7u zNBp#9KO=0&Wk6@ZthYPplwaiN|kc1#fv_Hni0hb^;<)tca`H^1{e3K3hU- zH+IK^X~3>imfuHUK{fZvrr5E4;M<$oAfwG`&a%khFbpXpmQv0+?lI?)nzPK}D3jS5 zm|mikt+lXYi*AkQi(L$QQdegvV-5qA;C}Irt5dJDm7S!*n1 zG}vhhrCZ$UkYRGmrYGKa3pRKDq7JrcN6@j~H>~3?EI3L}gb! zLHx6JCIt@}h#`d?5ePHI7#V2b->0vZ5YQv^f7kr=78sy^U(rDM&l{oPeJ!0J zzGfFe;8LpUfGGbBt*&dV*_Vb9N0zs`ZzK%19Jg?7+Xq@PTU{p6>BvYaz#iy)d$wSxq>B(}f zJy0M0EAl`~D8;%bK4NniAuGvk#&+ZhS)36=niKR2fGE2{ugTqP3E?*=HEJzaEx0rB z17{SMKV3{;1N^&b$~XB#A>80eLFT*>^gJ8+-kIChZN|Bd*xYsW0l_J0au+Ifml*PA zD*O1fSHlBGIt@rBlveu;=tQ^p<`S49xQqkJ-qka|rD=ER-l!&z3rk2;YbyS6_Iy7- z2qjB-0Pj4yW=g6B`i@;Hj-XmyZ?TLxF#76i;d!0@CK=1cBLkQ~2ZONCQ1tKUR1x(C zArh@}3M9EX)5sk1YtzUrhDdtVhsJLKv6#ZpR<$iE5OY50$}RN0>5jA^0cW;bkl*h? zQuc(X7MkgXl_UCPJAX_yjs|1GA~8*^HbgMj0&+%4W&0iCpBj+ZytD{Z1n>r(yRpPA z1kx0-mmp#amv&4TbWZ#1uhvb2sCrlZlxQV9w5YaC3`!usHas?a5fe_+%G(vNKQJz~ zl%$F##`Qc<7DWehgY5nimM^4n5dLACG9jq`OG(^eIq+dMt?XS!$3-L{^VchNwKwfs zH9!=*7wH?nnw08n4A#daDL+R7jeS3vO2qvBH!Au;>^htZ=!**yOu<)?}bzE-O~4)b<|hJ zU{-e5?7WZgm$#MzHm-YI2%UULyb;q8kkxe4(hOr6pv;s)ot#u9wfsrTPok31zc~@s&=-m8Z)CcE9%zI*SoPsvX6~wjg zixaOT3OCm8espi%mipZ5Apx-1%=?PfX9)g9Oom_#aYJ$U`5GqoW>aw==y>7$lmRmv2t| za`Y}8qF=|sNFnX@+%o|Sne+}&4-s6_XF-zKgi=ZZsK5r?5U}-R^}5p)sX!Ht##!rN z^Nc#!i?Q9ai>9y90 zV~2Tw8HPkf4M{y7t*0tS#^osQgvSY^J$QfDP>2m+ZQKn4Nm<=AY-Gucg`HqwFJ_j@(Rm^o% zytcY;I7ST155&$Yn#Z<4%?t3oV$6*(Ev3+D{!eKK_OAE^t@@ZsG*8|wEJQHWk$f7( zV87_C^`*JU7(MG(M_WC^NV_AA+cWr1u@r(TjANOIJ2cPvuVpk3qMAn>CcT6wrc$xo zTo%9axH}sNxTKhmdFp2_17|CELhFvfOkBg`n90bH?ilM+vKnbVq8dJTf8pITh&C#f z6lYt^&*%IVOK=nS-o!6ob;I*jL!>FSbwD@(WfLR2pT>@V4-uM}?Uf#2Li*fq4V-K=a7q@n#t#NMbM>{IyDexgqL#!bm+V5+gh~>`NV;}T>t+CliV|Qr zl90Wek=V^^9u`@gfW-7HC6IWK@Gu0n92joLRC<{;s8Lrx9LpZ)z)bZRJ1f>|xw+Zr z-oNF@`~8Lq#f+oX=~+a`UAq&(Z#lDM9dJO?apCA;mKOM;YAk7onM5 zK`H>zqx*Uz1+k#^f)Nk)9Wj47VklrfWp>-d>NxQ;dtxNcI6NwQK@$yRm<=;y6Pfl@wfWJZ`V7% zZ?#wom<9mm>>-gef)8o4N6*Elrq$naIkc-bEZ_XU1!iSFAh<00?dJxB+;CRWCZ~xf z^Z2zaa51lXh}JZ?$Espc#2i4G;APaB4K$BK4*DT`+t23wTow{ilUE$#$yBL8+~X4G z#Q?<;V<@LwYe2YXMgIHK9crM&*Tv|D2sBQLfY($~gavUL`06T>m@;)~uhcwW zAfXlDZ=k~XM;H_urNAMWHvwn}DY1klu0WRBL~y1R_71fEe4PB@{jnIg%0#fFr$=Sl zI5#a}lL__b3|7fDaP$pqP%M~2Qe)3Kq$x&wp8NW5hT8TD{4`XM(Adwy}`9xFzyAZN@H2NkHKCh%uAE&`kmPzaF6&EmH zPus7(#G47yxgeH(ba6e;fKo%QQf-LB+6PG4VQ_Iq&i-F2A-m6pq185zK0;P=SR+Af zl;S^Q^1PH~U@CCMxs7wh&KgHrQ2TbL4?I`9Xp6VWH~fAqgA9SLiwk>Q_@(3h>ZKP1 zWI`k}6(mi`i}5OY`fUAhv6>?o2@(Pw%LH#E83W#i1h;|+fONkIR8z)rCVvPq#mWFm zzHC9B&UBt5=~$-xp#-+$97gj+xaDKVZ9V9laiKuo~N%Rms# zUOPY{z|bhu9qPzmH{W@Xzqc76*5<7}AQ2#7T7neP1E4MF0fv)Hl>hZQTMEe`5HY|I z*=pIe$pS_0{gUnLSj2qk`2mn8{T$B=uBC|f0`ne}`CytfVcu&Z{W@hH`bVm_2gQ6W z&>`j4f~a`fAPUp%jhnrYprRN!kc$RZD&FsFQ+(5^5agw4rO8r{CF)v=r^z0dY3eL( zED%E#<{dqcMhc4bJ0px3i`}u1WdMK^U0I^}uY;J5od;HXA;Pj}Q--7qwW6!iUZsSs zeF<+7dbgq^rN%5yW`#wz>g6bLT#t0V>&YJP&*FobayX~kCH+LPU0su53`UK}1 zVXOxxXb?cSx{|L_a&;eZ^lt3aC=6&k^wN5Aqx2fx>k5-m_xw;N;j+U#`yJr!;2kf0 zk!s?)qlez8oYrPSoo|a^p&n*a2qFbx9)2w5ekcrj`==03x%B4u;$DJbhCT<~WF;j~ z%I}kgs4wn*@f{OL^zoeGkWi9X-GX*p(K5y9@{%Cbi&8x5m_z0R5E}NE&|GWCvbULt z{z&9ffx^g!i4&5+lF5~~Eu@y1A%jVD0Yuy7E_)^CC)H&jp7xU$ri?KOBNFquuvrgO zLQ?S)GuBzgCYT0~ftPgwy-!`iu8aO$93FNGaBCx4StOpv!#}?X)Z<->?$Rf*bnUM$ z*FF>ZFPbhZqEJ*p=(jgS7e73|W(-xtwA8$Xo>Ey@%)r$-JU0U* z%2*SKgEsque8a_?WUW=6&b!2!KvxlG<8`6a`#=`2Oy3_S$6`aWf!FAqpk0SxWrk-b zqkraO{LJn9I4Rs6SXO8RIN#+`THHq~_j?YzZj9^%Lb-{4zd6(sNf8A(0M(MUd zZ9Yr#;@~Q(VZ^WGy@q$R?K1cPY7w9+lE8u)5%<{V((o~A=!g*-0P-gmuuu!$MKZi{ zn)Zuh;i?yz_Dj~C3yjeC-AqFN(UJnyYSC3^^P9diriEm+-NF2ZJpam@%?l3>idvKE zMSIlZVefr-r18@|CYgx_*(8x0z&jOFO3G+eI%TCJ8ws9Wz&Vn@3at95Y{4}O}DR>cimT8u}Gi~RBBXmg24O4hj#i<&9LD#OK& zi{40eAOEg-HDnVXMExq4(ZA(_`!59#zN9!8_`a?J5R}DT{FS+!+*TdYw8rObA7I)8 zyiT6}#V@VREEX;28hAK+95-*X`wtd{oO=su#k1286v;c4RC(qs#z;2Z~(GQ!C<%~{~x|A36vJ9-54MWry1^_Dp;U(=}S6hZa z4V_d`C2VSXwsa_(#WxsHhgZjA2P4(#&W@CN zBop{#eV5~2?B(09&XH( z#bgn4fri+FV8u}7_D#PmGm9gO#B}J*b+X~oO}a+enDU-5OtI~jn<#;VF>n-Nw`mQb zq7x#;#MD$PjO|i;_a7zU^+ug3uA4uW!>l&aRSGVK3^M)o2Ib+Y1FAvsm*%(yFt}U! zhPtj?^J+;p#}IXUK7kpAv~LR>Sv~%zNT8g95<5=6djFS{2}~d?z}i2Z{@14FEux9e zjEk~+!FjR3Ifxku$dj|CSP?1z<29amYprGtB0bX&5R2$7@p^_kgP-a>J{mwGYgSdjJX6T3=hI3y=jF+-BIklI2 zsSqjp)idVMoi@?Fl%R7{6!=N(YSBTD*S6mPY;j#Ad$(dBHG3pa6MsujibKb|VqTP? zRwh89>r?p-_799A*`)z^_I~}{EMFU3nZJI1okDJJ;bP|`Vqj!$!l3ul#M&{Xx9)#h ze)@l&2gdY%Q8`4>%b<^dWluVu5XJBVTx8%@@FNg(3!8{#tvog1x5rtgydeA#gUyMC z_F?97934D;K!v(OZM zRv^@rM=T&Zz*&}=3W-de;A@HX*-}`$8@TTJ23$v4FTCkCj_nnr+wI<#=aKO*3!(s0 zR*Zp*K;Xg)`h=vUq$-y3k4wPk#7EYKS;>mjL-QH?+BkiE`57b6^i&~M7y2bM_Qvz7@nFUd$hL8CrODX4q~;m1t;<>H8lykn zi(PG6m9Y|8Vb3w(Z@Nl5HOT&myPubFUB8t_Ap6{|<~S{wU{q+@+r(cI0n+e)kHoir z_U)=ZxdznH^J_FX3!cyW9uNTa!jteGjdFSaVBsEil3vlW|I9*);`KhPhvL_bF_l?q zK8t1o$Qvg(n9+V*-U9GPn%wKA>eZ?s>c#Bs-xkIgTV!maOajr6zjDjl!v zLC)SAyvDPhQzvzOrdi5_KJ3iK-?sd~i&Kx>{|NX-G5GB{SBa-p-djgq!f0uOZSrZY zee*{d0!VKq2)YTy1oX_vb#i5&Ir7OyoHp#wZ&>@eJo@^?=;ctlgI3J zwn!_tgexiT97hu}tdli6Cc1!6mvU#Qs!S~m1PHUh0(2Uj<*jz@eA_~{4LN?#ap-e` zq$@B5y!On34G37|#i$pB5cH7V$ILd-Oz6qzo98gY+&Rj&*Dny{dkMHwWaM`vy*vZ6 zH)YRm5js1*WO(Lx+gv;V_seZ>AzjV^#u@jvKsXBY4MSEg4nOco&J2FAH1L6ZNci3} z>U-e5N6qLm6gcsD7t!|IB^V4emoW_ z!wTkit&`Bo0Do}QKRyUszrd;aF?$Qb2s?XfW~rm3plh!XMz-C22G%_c62c+aC7LEP zR>eH0R63DV+y4k$Bth8@w`qF}IDpK|RFs!q0cqpE+LD9QFtMvxGa9qK5rqYm{3idL z_BBpyqBu6;RX5G2G!uYl*HFJ5q| z5VP`z5PsHYxR3FtS7_NhY@V@W(W0`WE`7$W7){cX2rz2s5-;ymjEao`%*5l)ICH^8 ztGAr4b9dpG-tv5J+g;+TuLI(PyX8Zn8F8*d$G!1;C>+Y!)(9)3P5eJ~eRo_F*%xn6 zB#R9Z5v4^$1VlguM5M$O6@gWnf^<}*L!<}miudNxbAkJ@N4rcd!rRqKbT6U1 z1sUvy#6*+eC??*alJ?Tl$rv59O~t@fu3sZWJ(>K8HaoYy{Uy{+as z;x6DTS-Mz;9}Ny){V5d8F8@Js9yjt*tvgjW!A&iEk#S>WOy*N{m3}`DuI1iK9$d09 zO=wInm94v?;g}}m@K(8WgfHhWZ|7*j<>hzt{Tb<;K&3Vk{Oui`>_Ym!U6Gq!iVtW? zhZ_#;D!GYiJ8sna@ej3~6I^)uiadQ+53J-pERPf2XTu@YjBc9qHzPmw=bN-h++p%#*Tv#e^UK?hiKZqA z^yd_cZ`o8ZEaD!-GjTZe#U-cPahksD0luwG5gk(!*oe*%UPXp)(f-?!C+dv4pYaBB zv;f=JNQ)_{vAUW^K_B^ZM&^M~|LzdV8>zU_aM!Kje%?i!#K{i+yDlO&yZaRFm^d%t zt~Snz>vZE42}cY5VKj+4?f2fq#o^wG$LT#)=Lba!S@8o=;nxwTyzWgMIMpwX#lR`L ztDn2o9W*!Zm3J4McmUijK&f=9xP5toG|>gLMvkcqbth)9H!axSD_&I#9J2^|mXi7K zTLIEVFUK1`(=ciyqaN<_!pbe#EY9j?GubBRYyAqxk6i1U;2JZke$*sd`IvS{wBCi1MnG-Qb1J)nGG7Jd{`eN8m68a& zvhU+y3cdI3_E0Gd2|kv7=<5%rFo_)QaAaaCbY+U@W@h_s3cl-NJS|P>SkR8%xYs_R zc{MwF&Inmt7JaK4cs@_8uxiigWYrjYi?>6I#>BacU&ooQxk!&kiryEv+JEwk-Ameh z>>yTnMK=avx^n$nDM4~LQL^ig&eY84OF&4b4T-{+d*^nxAB9JDb91@PkLc;MBm#;j zkKFw9MTHORi23`c!`k|?Y6%zeBXvn%4m1@hiS$GhF92@Nwe`68DqpGeDr9Tm!yLJr z$yubf_HR3`6kW`^-fQ6%&>+yA<^QbBMlwLDADscYgp) zvmuuCjQF0iwxScc$?iqEn4oeBm<%Yrh4x=!q~$ruq`_`GzquV*oBCB8gA#>lXL zL4#Mad@_&Y|Ii3mEX3%v2%&B*wLwi?%5<>B+8mk5NSwnT%RN5fxs{Oc%^cjLbH{w) z;(W@^nR45$TGw#$s$G`jO+obL4?gz6PBIfzL9KAO1;?~#m2iyGbZxU0Ry__7-D;RE zAeT33k&{ueImN#W7BjsZF5o3Al9RALSA=FAj!tZK(;}J%X7`ysT@)9^#uzS|^x*_16ic0Kg(~UC&^vAk&JF!?k ztJyN7?0mZAxTSUr5JcK<9pbCD-0x_EQn7!ctYDw_?HVob241Y|IYDib7S8=p{cNf) zLt)a&@Jv}s3-p`!c_U1+spjO4AgjF}15z+LA$x1-o4N3h2YZ}TY@Tm(r^J!J)C%X0 zbq#p9CW$akRdX6;IYyc;k92%=f)UGCFOM(lC{1ci(WjeZ0bG{w%2L_NXLpw6_Oj*J zdDH`8(`Jj#?6<5g>s)*~L2d4evVB{aHy1D4i%7Nc^-E>nv9V}=i1B%KE)yPZT6V+> zqlD$$3DoahmdENN>yPU!RNZpvU+wuG7e$}IF3gQ$T%ceEs%aKy;rOD0OMaq~M`mw% z;C8JsMszP=MEA?kNgK(wKgW_Li@1kd5*wTv)D}{2*x8AqvKh|Ysf7XZ7|j?bOS00H zeD_()esdVj938``Bl}#JnyT8T7b)RfQ+bQ+CYgb1vC;8xV>a>P^EI5X^UJ<|R zSms>b>nJkjPr^yDmFoG}Dzjw3Kz51<7I;0n2Y73`d_d#g&ic{P1l%9X1Rw4vO-Vbq z|D}D}6QVI#$|QE(DX_VJdHTDB&P=dORg2-obzht5RC;iNJr4Eleml+T2zJ_biGT^# zS)P<21=ZO%S;ST;C;KPuh-<7dXNapYe5%NI`dp#cPJ3ylWhD1AIlg{ChW05DHG%B{ zMy(BXmW#*Z&}KW`1)|J?RT*0ceK~GG&I3-m)}=+x(Z1Mwc{+9M{n~fJ)dCP>Se1h6 zWU6dzRqVv&s2p0p>>=#v%E}f~EHjj9B_8E}xjZk@YG;XLyg}*DsDbIhn!Fz6g~Y?! zP7%ig?ek`)>!i6|Bh9nC3o)PVyEE~?=qGjYhDEg{vi3qvw{VmL>{g|1>8cDR1SBvs#E z3^8ID+i_nrV%ggIxvRXSc+A`0a*uBNS5fwTq_0Bu^r{w*38jeT*Z$9g-q7rjZYra0 zd`O|&^W&2x#|aVlT#L0yEWkCYT=FoUF=U_vv>YXv+k4mvxLw+*;9RH~t5d#}J!~{L zeY_WlS@zRrE$(4HWsl|+d@|Ri#&8w5_AyIk+Ha6&k*+j&$)h$$`z)&Psw_u`TvKu( z)q(jC7f&mVZj{x@q`txHbXw>lOmIt&B$5~^3u?2NncS zF{;ign~;K))Fn5&k(RDBQPZf)b~o}IQHMBbbM+06cYbWs-T}V-NhGMKdSzIl^n;=n z(`CFSY*)UFRbu`^CQcJiR>sp_`6r%xk*t5gym{37wrQShD%p`L@qlEHRj##9XHxk& z#%1XeZxfZj^|S#l;*U@#-6!w4+DysS-FFRG-dR?FnJV=Dx$S&y@_RSeSaJjc5)nKuR0 zA0M0_eN$|dhUD$JQqol$7V8F7}X~5QEu)i)1%geMCqdt^) zQP;u5WOV`p=F19k0SbsSICbjM(>77{CBbF0P~t_Z#23;{*{Z*SKL-*n_xXykJbk!l zM2#}@z;TYTtCq7wE~u)BTxo*0e+qwTKr>w>v!0_VF3Dn~r@a>BChi5CKB>Y*QNxbo zqs+Y80z5Sm9Ubgnv?{Vc)?z`P=0{gLg&Jz?1Wwbn?a9;X5tGhkKT($#$2#Eote14w zIBuZg@8DUC&NDVJu%#{{V_A=6A+wx4i{sQ4jhLAe)D;1$Wg{Y-s&1WauGx3y6_TC4 zl;1P!+M^2Z({Cisu&#|3Fk+{X*|Qe!7~2S$q^x&{g_LAfX~LtKAUb+W0}InHwSIr}CF<)s&4 zB?gPsFYu?MEw#R5qm%5VAmT|$C8o9}7OOU0?^#Rj=Sq!~>~~HlE{YPzt(Mg($h&xB ziR5SO6G;eiS2#&4>i*S{7i3oQ_rB&)e7qS&zGrgLvMR8H7f`Gq`UB$j^!e}wc0enD z9(m2O{)uK1>DF|1Z=roGYjJ;xhq%ox915+I!)zuhQJLT6iSuYl&s(c^#ug0G#YOZo zcz%|d-4nbm{Qwk*#+_ZgP_$U$CgWwM<5Bqr?I5q?#a~%L&{O!~kUh`o8$*aN6WZuM zkWRP&Y3#d(C@i2Ego3^>VQA=)7a3ZcmiXm=)VPm@72%1P-RK*HOygYK{a4dugwBPL z;`z_xo)zw(-xOir`0d$qtHr_X`t=0rai#tw)d<&sywW`gr)IKNTZ@Idz|cNdju7Q4 zbD;9x6jp!r#VK6Cdmp&^=ujMDjOnmIcLNQW%<<{{fV1TccTO{}qF-y8OQ@vW;D*pj z=gDX(dBPCKJML!ZYvwA+kT!dQoevibSmivtGi+x!PhZNS*j}0Ww9rX_Pq|U{yLiP_ zg#A%Lt?)1V(0q+XmVcZkmgBh6!>-}nIQ-;;H|M!P^0Ju{YI@8X0SCn7$FfTeDO%#4 zr~n|-HgsB=W@(D|UC{~07XA$LjZ+n{S}hs5fe#!Y)nOlmqx_@f$ahp{{-QI6;GZkc z(FJ?Dns0)37{r1p&Lo&+T`D$5$1t_H%N7)8V*;w)noQ0n;qU4$e7aS5mYx;H(F)Z{ zTk+$ZsdD1@QgmFRU86Z3HatDQRV$tpDJC!!+CFdF!2 zg&xMi$GpXW7TnHw7Oz&DShjLt+fVD%kEq=#zC z=Y3t~SfQ(-^QI*!KkC?p`2logMzA4KC%LGfUF<&^`ErRmk%#fb`+b;KoUN5r#YLIV z=q<0X+k$9S9QKcrdqjU5#|rdCl&)R`eQ2NsfqUs)8AtB*TAdr5%j~5M4TNb1X5TTX zO71=5N-8W={vl--2KdvTj65RPbq)?hNn>6zU6k+@!MoHXpq=4>>96cF0yt_*y`)7fS_HKn~UWe-FvFX*iJg$|;WDRj??H{L_I z3Z^mYmOvU-EsUeuG`cw0^f*X?LqrqNET#$78GeOg)aQlk4xW73MmHOb2*5#&uB7_1 z(56&1#KKaRyE-scH3I~wFR-_dYGg0t2q;Gi`E)AGJ7?- z{+f0xjfTH(k*IQ25{2FEZ84dcOv3^Pi|(Ym{o6vZN;kF;korHb0*-z8^uzQE7&GsXv-&ktp> zti=MTWtSk zoK$Mfnj-h_QYmC~Cogomc8-zxPzgyQ+Jc@Ux8hh$=fp|$=dTpo_txd&}(?i^^{_;c@sz&!1;IxF0`sy>&jag2)VLOAnw% zpl|C`FPY3lmF}xTpG*m6N8OViZ4}w}0b*C=YLJpA43p^5C$&Z$;>ma{xP;_;;3j{+ zkd`E>7w)8p&vmq~F3#MEGUF;3X>Y?lA{e3H*ONovQxI<}=MF^xc?>f8F;b4|TCh}r zcpi*U{H%0i`kO~WP+uGsF0{nPhndX6sIs{_dcDIsaqZ``t-V)Vk>lBi&{uxA;##TEF+(-(!|*$&1WF@qQHp z&I5zmx3-OlL`~(y>s{|sHHq~^Mt{T4;J<&M#&ZAh z;wv$j;Njb}_5SvoC)Ruf;!10G{}oT5vYo^^|Dc^}C_df4#XO zn%mVTg7{Ru`_1+=^HVznTs~$0oE0lpEkCQf$@80BT+$=4S8lt{C!q3qHT`al9Vt60 z13cAyaj+Aubjr@1plD*kP>QS7G6qgArKR@1`^Ar`4qPzRUn_x$Uox4RMPc{B&<=EjKGJG(wE8#%+ zrLU2PHGigEa;P)*e3j6n@(_3t=nxmV*%?7L4& z#bRMiKh1XBuCa9Zw6MjXIRtLJWz{fDfTLJhH=dijRIn}Uz>`IH0)QywwCPg72fC=vw9{R`{1k3VMiZhhFB8=ulusx&yG+<*B;xntj%b_GwKctmOJ zLN{>t{d>tTvCmd=DA5Nrdv2NU;oEj#Db3k?o2_}uPJF&a4mfw$k(Y8TIALU4r3tQG zqB7a}$%Tmzyq@6xg_GB!UxL1hy`c|gq61Y!i91O2h2ikxjwE9vf7|o{(%6_GLbl&+ zGoMPymH}nb;jcNYmJ2~KwRJ$o%oe(HjdF@=y;IZS*Yn44h>GFP#)64E$%l#1-<@3U zW|*-d&n89K9vB}CVn>8Y!A{r~HN1zW4nYJ=G>4mPn&t(m=5PsdQGVyZzqY_&XLrG1 z0uXZJ(D?(Dvw%xUGCVHHcR_!o=5B|>6g=V#-z6@YypSIbxl?*< zg&0zP!F|~Unpnd3f}J+-J>s-%-rhk777K~{6&5bM1``Igo#4XagWFic@eu6Yf21Xe zuEXxH!J76Pqv#L}0X5}UX)cI$*hdQp_6Jb#!v~5oaOeLW7JX*})?Q7C{%{8^q->*nwYqvrG-Fv4=~p_vQw3_V2LA>T58GH8O2s@eStY z-(lt&>oCtX*amm-?=Wf2by&q3Y=gh{cNj%$9ma15!8SNle}|RntivoI7)ZGZ+5X@R zxYZFZBmO&|=Z59x=fNmPI6{1b>+8#0Nl!HI#M zx1iSjOSy6M_mQzMk4+&6gCEvV|7KK&hI#KVvWjhDk&F94_AO{KY$VVAU88{gKN|nG zf@J-h?)E<#({BEwv2_jgZ+gQ2Xgu!*a;@NU;u}fme%F@l0ckq`)_Fp0`Zuf8f3%5t z|D!F<8q)S}rjY+=dl(Q4gzW=otsz;AxD$rD(DLE`&+-{Uug~IvwaNZ(x`_X%yo!ZX zih?qhkg$KFcmJbu^8?V(5iSQlbAo1s?W48TAP%-W!BsXTJYHWK2b|%mn_B-~zbN0r zvlR?>h9B9)7rI{ZajhB|wtk`T2UIQL0#$2;ua`KkEv$_Q(BFGcBjTU2x^DxSvJtZd zgGv7~?yb@5!Vudb@oNu0P}m)6?pO?XK#)fYOml;au9wWku9YbK4~7-Dj`?dhbgPZ~ z|GSkhVZAsDk|Vwm4+VqC{-RhA1ZyIAh+ZQm969ktQ|HbitqaHeY zlei{H6#jqX0Kg8&Vu=lJ_}|yn&mnvqFlb{D{6*;g78tlU5PlGZUIcf7cd_v8n{(S>;PrdZwu+kI;RkcE z@LlIN-VcAby08NVb41-V_CekDRla`v_8L91vEdddw+jq*2Kp#Mp+%c|)~@~!ttIe| diff --git a/Apps/W1/ExcelReports/app/ReportLayouts/Excel/GeneralLedger/TrialBalanceBudgetExcel.xlsx b/Apps/W1/ExcelReports/app/ReportLayouts/Excel/GeneralLedger/TrialBalanceBudgetExcel.xlsx index b3cc17fd1e3fa1edf5c89dfcb11595af51935d9c..8646a1a0676b53cc4f74471681ab656212544e74 100644 GIT binary patch literal 393029 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