From 01ae03ddfc67db38e62627cbb8b7db0645c3cafd Mon Sep 17 00:00:00 2001 From: Andy Howard Date: Thu, 8 Jul 2021 20:50:46 +0100 Subject: [PATCH] Portal application - initial. --- BusinessMgr.sln | 34 +- .../Procs/Consoles/SbmProcessConsole.cs | 237 + .../Procs/Interfaces/SbmInterfaceProcess.cs | 271 + .../SbmInterfaceProcess_Commodity_Export.cs | 1105 + .../Procs/Procs/SbmProcess_Base-DataExport.cs | 39 + .../Procs/Procs/SbmProcess_Base-FTP.cs | 276 + .../Procs/Procs/SbmProcess_Base.cs | 300 + .../Procs/SbmProcess_Commodity_Export.cs | 859 + .../Procs/Reports/SbmPrint_Footer.cs | 121 + SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs | 335 + SaBusMgrCoreProcs/SaBusMgrCoreProcs.csproj | 23 + .../SaBusMgrCoreWeb.csproj | 12 +- SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs | 148 + SaBusMgrCoreWeb/Web/App/SbmLocaliser.cs | 161 + SaBusMgrCoreWeb/Web/App/SbmSessionConfig.cs | 199 + .../Web/App/SbmSessionContext_Web.cs | 22 + SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs | 39 + SaBusMgrCoreWeb/Web/App/SbmStartup_Web.cs | 207 + SaBusMgrCoreWeb/Web/App/SbmSystem_Web.cs | 133 + SaBusMgrCoreWeb/Web/App/SbmUserContext_Web.cs | 26 + .../Web/Consoles/SbmEmailConsole_Web.cs | 21 + .../Web/Controllers/SbmController_Base.cs | 523 + .../Web/Helpers/SbmEmailConfigHelper.cs | 93 + .../Web/Helpers/SbmSessionConfigHelper.cs | 70 + .../Middleware/SbmAuthenticationHandler.cs | 45 + .../Web/Middleware/SbmMetadataProvider.cs | 23 + .../Web/Middleware/SbmModelBinder.cs | 100 + .../Web/Middleware/SbmModelBinderProvider.cs | 43 + .../ValidateAntiForgeryTokenMiddleware.cs | 69 + SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs | 314 + SaBusMgrStandardBase/Base/App/Sbm-Version.cs | 45 + .../Base/App/{SbmDfn.cs => Sbm.cs} | 91 +- .../Base/App/SbmAppConsole.cs | 35 +- .../Base/App/SbmApplication.cs | 83 +- .../Base/App/SbmConfigConsole.cs | 8 +- .../Base/App/SbmConsoleHelper.cs | 39 - SaBusMgrStandardBase/Base/App/SbmGlobals.cs | 74 +- SaBusMgrStandardBase/Base/App/SbmInternals.cs | 80 +- .../Base/App/SbmSecurityProfile.cs | 219 +- .../Base/App/SbmSessionContext.cs | 12 +- .../Base/App/SbmSessionData.cs | 136 + .../Base/App/SbmSessionProfile.cs | 7 +- .../Base/App/SbmSystem-CodeTypes.cs | 4 +- SaBusMgrStandardBase/Base/App/SbmSystem.cs | 2 +- .../Base/App/SbmUserContext.cs | 18 +- .../Base/Bus/SbmAccountsDfn-Sage.cs | 15 +- SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs | 12 + SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs | 148 +- .../Base/Bus/SbmTransaction.cs | 8 +- .../Base/Consoles/SbmEmailConsole.cs | 77 + .../Base/Helpers/SbmPasswordHelper.cs | 138 + .../Base/Helpers/SbmResourceHelper.cs | 103 + .../Base/Mgr/SbmAccountMgr_Organisation.cs | 651 +- SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs | 4 +- .../Base/Mgr/SbmTransactionMgr_Transaction.cs | 2 +- .../Base/Procs/SbmReport_Base.cs | 51 +- .../Base/UpdateLog/SbmUpdateLogItemMonitor.cs | 12 +- .../Base/WebService/SbmWebServiceClient.cs | 1 - .../Base/WebService/SbmWebServiceRequest.cs | 1 - .../Base/WebService/SbmWebServiceResponse.cs | 1 - .../SaBusMgrStandardBase.csproj | 4 + ...SbmSystem_WinDbas.cs => SbmSystem_Dbas.cs} | 4 +- .../Dbas/App/SbmUserContext_Dbas.cs | 21 + .../Dbas/Base/SbmDatabaseConsole.cs | 2 +- .../Dbas/Bus/SbmAddress_Dbas.cs | 29 +- .../Dbas/Bus/SbmAffiliate_Dbas.cs | 35 +- .../Dbas/Bus/SbmAssetCategory_Dbas.cs | 40 +- .../Dbas/Bus/SbmAssetProcess_Dbas.cs | 12 +- .../Dbas/Bus/SbmAsset_Dbas.cs | 104 +- .../Dbas/Bus/SbmAssociation_Dbas.cs | 32 +- .../Dbas/Bus/SbmCommodityCustomer_Dbas.cs | 9 +- .../Dbas/Bus/SbmCommoditySupplier_Dbas.cs | 9 +- .../Dbas/Bus/SbmCommodity_Dbas.cs | 97 +- .../Dbas/Bus/SbmConstituent_Dbas.cs | 11 +- .../Dbas/Bus/SbmContainerItem_Dbas.cs | 12 +- .../Dbas/Bus/SbmContainer_Dbas.cs | 19 +- .../Dbas/Bus/SbmItemBatch_Dbas.cs | 9 +- .../Dbas/Bus/SbmItemLink_Dbas.cs | 9 +- .../Dbas/Bus/SbmItemProcess_Dbas.cs | 9 +- .../Dbas/Bus/SbmLocation_Dbas.cs | 13 +- .../Dbas/Bus/SbmMovement_Dbas.cs | 9 +- .../Dbas/Bus/SbmPortfolioItem_Dbas.cs | 15 +- .../Dbas/Bus/SbmPriceSet_Dbas.cs | 23 +- .../Dbas/Bus/SbmPrice_Dbas.cs | 9 +- .../Dbas/Bus/SbmProcess_Dbas.cs | 82 +- .../Dbas/Bus/SbmRequirement_Dbas.cs | 73 +- .../Dbas/Bus/SbmSysParam_Dbas.cs | 11 +- .../Dbas/Bus/SbmSystemAccountUser_Dbas.cs | 11 +- .../Dbas/Bus/SbmSystemAccount_Dbas.cs | 11 +- .../Dbas/Bus/SbmSystemUser_Dbas.cs | 10 +- .../Dbas/Bus/SbmTransaction_Dbas.cs | 157 +- .../Dbas/Bus/SbmVehicleClass_Dbas.cs | 19 +- .../Dbas/Bus/SbmVehicleEvent_Dbas.cs | 10 +- .../Dbas/Bus/SbmVehicleFeature_Dbas.cs | 10 +- .../Dbas/Bus/SbmVehicle_Dbas.cs | 108 +- .../Dbas/Consoles/SbmInterfaceConsole_Dbas.cs | 47 +- .../Consoles/SbmItemOptionConsole_Dbas.cs | 34 +- .../Consoles/SbmReferenceDataConsole_Dbas.cs | 23 +- .../Dbas/Consoles/SbmSecurityConsole_Dbas.cs | 36 +- .../Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs | 24 +- .../Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs | 6 +- .../Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs | 6 +- .../Mgr/SbmAccountMgr_Dbas-Association.cs | 6 +- .../Dbas/Mgr/SbmAccountMgr_Dbas-SysParam.cs | 6 +- .../Mgr/SbmAccountMgr_Dbas-SystemAccount.cs | 4 +- .../SbmAccountMgr_Dbas-SystemAccountUser.cs | 4 +- .../Dbas/Mgr/SbmAccountMgr_Dbas-SystemUser.cs | 4 +- .../Dbas/Mgr/SbmAccountMgr_Dbas.cs | 2 +- .../Dbas/Mgr/SbmAssetMgr_Dbas-Asset.cs | 6 +- .../Mgr/SbmAssetMgr_Dbas-AssetCategory.cs | 8 +- .../Dbas/Mgr/SbmAssetMgr_Dbas-AssetProcess.cs | 6 +- .../Dbas/Mgr/SbmAssetMgr_Dbas-Vehicle.cs | 8 +- .../Dbas/Mgr/SbmAssetMgr_Dbas-VehicleClass.cs | 6 +- .../Dbas/Mgr/SbmAssetMgr_Dbas-VehicleEvent.cs | 6 +- .../Mgr/SbmAssetMgr_Dbas-VehicleFeature.cs | 6 +- .../Dbas/Mgr/SbmAssetMgr_Dbas.cs | 2 +- .../Mgr/SbmCommodityMgr_Dbas-Commodity.cs | 6 +- .../SbmCommodityMgr_Dbas-CommodityCustomer.cs | 6 +- .../SbmCommodityMgr_Dbas-CommoditySupplier.cs | 4 +- .../Mgr/SbmCommodityMgr_Dbas-Container.cs | 6 +- .../Mgr/SbmCommodityMgr_Dbas-ContainerItem.cs | 8 +- .../Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs | 6 +- .../Dbas/Mgr/SbmCommodityMgr_Dbas.cs | 2 +- .../Dbas/Mgr/SbmDataItemMgr_Dbas-ItemBatch.cs | 6 +- .../Dbas/Mgr/SbmDataItemMgr_Dbas-ItemLink.cs | 6 +- .../Dbas/Mgr/SbmDataItemMgr_Dbas.cs | 2 +- .../Dbas/Mgr/SbmPriceMgr_Dbas-Price.cs | 4 +- .../Dbas/Mgr/SbmPriceMgr_Dbas-PriceSet.cs | 6 +- .../Dbas/Mgr/SbmPriceMgr_Dbas.cs | 2 +- .../Mgr/SbmProcessMgr_Dbas-ItemProcess.cs | 6 +- .../Dbas/Mgr/SbmProcessMgr_Dbas-Process.cs | 6 +- .../Dbas/Mgr/SbmProcessMgr_Dbas.cs | 2 +- .../Dbas/Mgr/SbmStockMgr_Dbas-Location.cs | 6 +- .../Dbas/Mgr/SbmStockMgr_Dbas-Movement.cs | 6 +- .../Dbas/Mgr/SbmStockMgr_Dbas.cs | 2 +- .../Mgr/SbmTransactionMgr_Dbas-Constituent.cs | 6 +- .../Mgr/SbmTransactionMgr_Dbas-Requirement.cs | 6 +- .../Mgr/SbmTransactionMgr_Dbas-Transaction.cs | 6 +- .../Dbas/Mgr/SbmTransactionMgr_Dbas.cs | 2 +- .../SbmUpdateLogItemMonitor_Address.cs | 8 +- .../SbmUpdateLogItemMonitor_Affiliate.cs | 8 +- .../SbmUpdateLogItemMonitor_Asset.cs | 8 +- .../SbmUpdateLogItemMonitor_AssetCategory.cs | 8 +- .../SbmUpdateLogItemMonitor_AssetProcess.cs | 8 +- .../SbmUpdateLogItemMonitor_Association.cs | 8 +- .../SbmUpdateLogItemMonitor_Commodity.cs | 8 +- ...mUpdateLogItemMonitor_CommodityCustomer.cs | 8 +- ...mUpdateLogItemMonitor_CommoditySupplier.cs | 8 +- .../SbmUpdateLogItemMonitor_Constituent.cs | 8 +- .../SbmUpdateLogItemMonitor_Container.cs | 8 +- .../SbmUpdateLogItemMonitor_ContainerItem.cs | 8 +- .../SbmUpdateLogItemMonitor_ItemBatch.cs | 8 +- .../SbmUpdateLogItemMonitor_ItemLink.cs | 8 +- .../SbmUpdateLogItemMonitor_ItemProcess.cs | 8 +- .../SbmUpdateLogItemMonitor_Location.cs | 8 +- .../SbmUpdateLogItemMonitor_Movement.cs | 8 +- .../SbmUpdateLogItemMonitor_PortfolioItem.cs | 8 +- .../SbmUpdateLogItemMonitor_Price.cs | 8 +- .../SbmUpdateLogItemMonitor_PriceSet.cs | 8 +- .../SbmUpdateLogItemMonitor_Process.cs | 8 +- .../SbmUpdateLogItemMonitor_Requirement.cs | 8 +- .../SbmUpdateLogItemMonitor_SysParam.cs | 8 +- .../SbmUpdateLogItemMonitor_Transaction.cs | 8 +- .../SbmUpdateLogItemMonitor_Vehicle.cs | 8 +- .../SbmUpdateLogItemMonitor_VehicleClass.cs | 8 +- .../SbmUpdateLogItemMonitor_VehicleEvent.cs | 8 +- .../SbmUpdateLogItemMonitor_VehicleFeature.cs | 8 +- .../Dbas/Utils/SbmDbDfnGenerator.cs | 22 +- .../Control/App}/Program.cs | 10 +- .../Control/App/SbmApplication_Admin.cs | 165 + .../Control/App/SbmLocaliser_Admin.cs | 47 + .../Control/App/SbmStartup_Admin.cs | 72 + .../Controllers/HomeController.cs | 4 +- .../Localisation/SbmControlProperties.resx | 129 + .../Models/ErrorViewModel.cs | 2 +- .../Properties/launchSettings.json | 29 + .../SaBusinessMgrCoreWebControl.csproj | 29 + .../Views/Home/Index.cshtml | 0 .../Views/Home/Privacy.cshtml | 0 .../Views/Shared/Error.cshtml | 0 .../Views/Shared/_Layout.cshtml | 6 +- .../Shared/_ValidationScriptsPartial.cshtml | 0 .../Views/_ViewImports.cshtml | 3 + .../Views/_ViewStart.cshtml | 0 .../appsettings.Development.json | 0 .../appsettings.json | 0 SaBusinessMgrCoreWebControl/libman.json | 10 + .../wwwroot/css/site.css | 0 .../wwwroot/favicon.ico | Bin .../wwwroot/js/site.js | 0 .../wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.js | 0 .../lib/bootstrap/dist/js/bootstrap.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../jquery-validation/dist/jquery.validate.js | 0 .../dist/jquery.validate.min.js | 0 .../wwwroot/lib/jquery/LICENSE.txt | 0 .../wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 .../images/ui-icons_444444_256x240.png | Bin 0 -> 3764 bytes .../images/ui-icons_555555_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_777620_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_777777_256x240.png | Bin 0 -> 3764 bytes .../images/ui-icons_cc0000_256x240.png | Bin 0 -> 3764 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3764 bytes .../wwwroot/lib/jqueryui/jquery-ui.css | 1312 ++ .../wwwroot/lib/jqueryui/jquery-ui.js | 18706 ++++++++++++++++ .../wwwroot/lib/jqueryui/jquery-ui.min.css | 7 + .../wwwroot/lib/jqueryui/jquery-ui.min.js | 13 + .../lib/jqueryui/jquery-ui.structure.css | 886 + .../lib/jqueryui/jquery-ui.structure.min.css | 5 + .../wwwroot/lib/jqueryui/jquery-ui.theme.css | 443 + .../lib/jqueryui/jquery-ui.theme.min.css | 5 + .../base/images/ui-icons_444444_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_555555_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_777620_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_777777_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_cc0000_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/base/jquery-ui.css | 1311 ++ .../jqueryui/themes/base/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/base/theme.css | 443 + .../lib/jqueryui/themes/base/theme.min.css | 1 + .../ui-bg_diagonals-thick_8_333333_40x40.png | Bin 0 -> 155 bytes .../images/ui-bg_glass_40_111111_1x400.png | Bin 0 -> 124 bytes .../images/ui-bg_glass_55_1c1c1c_1x400.png | Bin 0 -> 125 bytes .../ui-bg_highlight-hard_100_f9f9f9_1x100.png | Bin 0 -> 114 bytes .../ui-bg_highlight-hard_40_aaaaaa_1x100.png | Bin 0 -> 118 bytes .../ui-bg_highlight-soft_50_aaaaaa_1x100.png | Bin 0 -> 119 bytes .../ui-bg_inset-hard_45_cd0a0a_1x100.png | Bin 0 -> 174 bytes .../ui-bg_inset-hard_55_ffeb80_1x100.png | Bin 0 -> 145 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_4ca300_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_bbbbbb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ededed_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffcf29_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/black-tie/jquery-ui.css | 1311 ++ .../themes/black-tie/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/black-tie/theme.css | 443 + .../jqueryui/themes/black-tie/theme.min.css | 1 + .../ui-bg_diagonals-thick_75_f3d8d8_40x40.png | Bin 0 -> 199 bytes .../images/ui-bg_dots-small_65_a6a6a6_2x2.png | Bin 0 -> 72 bytes .../images/ui-bg_glass_55_fbf8ee_1x400.png | Bin 0 -> 186 bytes .../ui-bg_highlight-hard_100_eeeeee_1x100.png | Bin 0 -> 112 bytes .../ui-bg_highlight-hard_100_f6f6f6_1x100.png | Bin 0 -> 117 bytes .../ui-bg_highlight-soft_15_cc0000_1x100.png | Bin 0 -> 183 bytes .../images/ui-icons_004276_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cc0000_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/blitzer/jquery-ui.css | 1311 ++ .../jqueryui/themes/blitzer/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/blitzer/theme.css | 443 + .../lib/jqueryui/themes/blitzer/theme.min.css | 1 + .../ui-bg_diagonals-thick_90_eeeeee_40x40.png | Bin 0 -> 155 bytes .../images/ui-bg_glass_100_e4f1fb_1x400.png | Bin 0 -> 192 bytes .../images/ui-bg_glass_50_3baae3_1x400.png | Bin 0 -> 190 bytes .../images/ui-bg_glass_80_d7ebf9_1x400.png | Bin 0 -> 195 bytes .../ui-bg_highlight-hard_100_f2f5f7_1x100.png | Bin 0 -> 174 bytes .../ui-bg_highlight-hard_70_000000_1x100.png | Bin 0 -> 117 bytes .../ui-bg_highlight-soft_100_deedf7_1x100.png | Bin 0 -> 201 bytes .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin 0 -> 159 bytes .../images/ui-icons_2694e8_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_3d80b3_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_72a7cf_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/cupertino/jquery-ui.css | 1311 ++ .../themes/cupertino/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/cupertino/theme.css | 443 + .../jqueryui/themes/cupertino/theme.min.css | 1 + .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin 0 -> 166 bytes .../ui-bg_highlight-hard_20_0972a5_1x100.png | Bin 0 -> 182 bytes .../ui-bg_highlight-soft_33_003147_1x100.png | Bin 0 -> 198 bytes .../ui-bg_highlight-soft_35_222222_1x100.png | Bin 0 -> 132 bytes .../ui-bg_highlight-soft_44_444444_1x100.png | Bin 0 -> 130 bytes .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin 0 -> 128 bytes .../images/ui-bg_loop_25_000000_21x21.png | Bin 0 -> 148 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_4b8e0b_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_a83300_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cccccc_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/dark-hive/jquery-ui.css | 1311 ++ .../themes/dark-hive/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/dark-hive/theme.css | 443 + .../jqueryui/themes/dark-hive/theme.min.css | 1 + .../ui-bg_diagonals-thick_15_0b3e6f_40x40.png | Bin 0 -> 199 bytes .../ui-bg_dots-medium_30_0b58a2_4x4.png | Bin 0 -> 88 bytes .../images/ui-bg_dots-small_20_333333_2x2.png | Bin 0 -> 72 bytes .../images/ui-bg_dots-small_30_a32d00_2x2.png | Bin 0 -> 80 bytes .../images/ui-bg_dots-small_40_00498f_2x2.png | Bin 0 -> 82 bytes .../ui-bg_gloss-wave_20_111111_500x100.png | Bin 0 -> 3098 bytes .../images/ui-icons_00498f_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_98d2fb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_9ccdfc_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/dot-luv/jquery-ui.css | 1311 ++ .../jqueryui/themes/dot-luv/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/dot-luv/theme.css | 443 + .../lib/jqueryui/themes/dot-luv/theme.min.css | 1 + .../ui-bg_gloss-wave_30_3d3644_500x100.png | Bin 0 -> 4700 bytes .../ui-bg_highlight-soft_100_dcd9de_1x100.png | Bin 0 -> 189 bytes .../ui-bg_highlight-soft_100_eae6ea_1x100.png | Bin 0 -> 194 bytes .../ui-bg_highlight-soft_25_30273a_1x100.png | Bin 0 -> 203 bytes .../ui-bg_highlight-soft_45_5f5964_1x100.png | Bin 0 -> 196 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_734d99_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_8d78a5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_a8a3ae_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ebccce_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/eggplant/jquery-ui.css | 1311 ++ .../themes/eggplant/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/eggplant/theme.css | 443 + .../jqueryui/themes/eggplant/theme.min.css | 1 + .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 0 -> 159 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 0 -> 196 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 0 -> 200 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 0 -> 200 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 0 -> 125 bytes .../ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 0 -> 113 bytes .../images/ui-icons_0a82eb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_0b54d5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_5fa5e3_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_fcdd4a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/excite-bike/jquery-ui.css | 1311 ++ .../themes/excite-bike/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/excite-bike/theme.css | 443 + .../jqueryui/themes/excite-bike/theme.min.css | 1 + .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 73 bytes .../ui-bg_highlight-soft_100_f6f6f6_1x100.png | Bin 0 -> 125 bytes .../ui-bg_highlight-soft_25_0073ea_1x100.png | Bin 0 -> 186 bytes .../ui-bg_highlight-soft_50_dddddd_1x100.png | Bin 0 -> 126 bytes .../flick/images/ui-icons_0073ea_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_666666_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_ff0084_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/flick/jquery-ui.css | 1311 ++ .../jqueryui/themes/flick/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/flick/theme.css | 443 + .../lib/jqueryui/themes/flick/theme.min.css | 1 + .../ui-bg_diagonals-small_40_db4865_40x40.png | Bin 0 -> 158 bytes .../ui-bg_diagonals-small_50_93c3cd_40x40.png | Bin 0 -> 159 bytes .../ui-bg_diagonals-small_50_ff3853_40x40.png | Bin 0 -> 156 bytes .../ui-bg_diagonals-small_75_ccd232_40x40.png | Bin 0 -> 159 bytes .../ui-bg_dots-medium_80_ffff38_4x4.png | Bin 0 -> 82 bytes .../images/ui-bg_dots-small_35_35414f_2x2.png | Bin 0 -> 81 bytes .../ui-bg_white-lines_85_f7f7ba_40x100.png | Bin 0 -> 213 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_88a206_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_c02669_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e1e463_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffeb33_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/hot-sneaks/jquery-ui.css | 1311 ++ .../themes/hot-sneaks/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/hot-sneaks/theme.css | 443 + .../jqueryui/themes/hot-sneaks/theme.min.css | 1 + .../images/ui-bg_glass_100_f5f0e5_1x400.png | Bin 0 -> 191 bytes .../images/ui-bg_glass_25_cb842e_1x400.png | Bin 0 -> 195 bytes .../images/ui-bg_glass_70_ede4d4_1x400.png | Bin 0 -> 191 bytes .../ui-bg_highlight-hard_100_f4f0ec_1x100.png | Bin 0 -> 178 bytes .../ui-bg_highlight-hard_65_fee4bd_1x100.png | Bin 0 -> 167 bytes .../ui-bg_highlight-hard_75_f5f5b5_1x100.png | Bin 0 -> 175 bytes .../ui-bg_inset-soft_100_f4f0ec_1x100.png | Bin 0 -> 195 bytes .../images/ui-icons_c47a23_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cb672b_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f08000_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f35f07_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ff7519_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/humanity/jquery-ui.css | 1311 ++ .../themes/humanity/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/humanity/theme.css | 443 + .../jqueryui/themes/humanity/theme.min.css | 1 + .../ui-bg_diagonals-small_0_aaaaaa_40x40.png | Bin 0 -> 83 bytes .../ui-bg_diagonals-thick_15_444444_40x40.png | Bin 0 -> 155 bytes .../ui-bg_diagonals-thick_95_ffdc2e_40x40.png | Bin 0 -> 199 bytes .../images/ui-bg_glass_55_fbf5d0_1x400.png | Bin 0 -> 187 bytes .../ui-bg_highlight-hard_30_285c00_1x100.png | Bin 0 -> 177 bytes .../ui-bg_highlight-soft_33_3a8104_1x100.png | Bin 0 -> 202 bytes .../ui-bg_highlight-soft_50_4eb305_1x100.png | Bin 0 -> 200 bytes .../ui-bg_highlight-soft_60_4ca20b_1x100.png | Bin 0 -> 202 bytes .../ui-bg_inset-soft_10_285c00_1x100.png | Bin 0 -> 198 bytes .../images/ui-icons_4eb305_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_72b42d_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/le-frog/jquery-ui.css | 1311 ++ .../jqueryui/themes/le-frog/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/le-frog/theme.css | 443 + .../lib/jqueryui/themes/le-frog/theme.min.css | 1 + .../images/ui-bg_glass_15_5f391b_1x400.png | Bin 0 -> 189 bytes .../ui-bg_gloss-wave_20_1c160d_500x100.png | Bin 0 -> 4698 bytes .../ui-bg_gloss-wave_25_453326_500x100.png | Bin 0 -> 4693 bytes .../ui-bg_gloss-wave_30_44372c_500x100.png | Bin 0 -> 4706 bytes .../ui-bg_highlight-soft_20_201913_1x100.png | Bin 0 -> 194 bytes .../ui-bg_highlight-soft_20_619226_1x100.png | Bin 0 -> 196 bytes .../ui-bg_inset-soft_10_201913_1x100.png | Bin 0 -> 200 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_9bcc60_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_add978_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e3ddc9_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f1fd86_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/mint-choc/jquery-ui.css | 1311 ++ .../themes/mint-choc/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/mint-choc/theme.css | 443 + .../jqueryui/themes/mint-choc/theme.min.css | 1 + .../images/ui-bg_glass_100_f8f8f8_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_35_dddddd_1x400.png | Bin 0 -> 128 bytes .../images/ui-bg_glass_60_eeeeee_1x400.png | Bin 0 -> 128 bytes .../ui-bg_inset-hard_75_999999_1x100.png | Bin 0 -> 114 bytes .../ui-bg_inset-soft_50_c9c9c9_1x100.png | Bin 0 -> 120 bytes .../images/ui-icons_3383bb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_70b2e1_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_999999_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_fbc856_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/overcast/jquery-ui.css | 1311 ++ .../themes/overcast/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/overcast/theme.css | 443 + .../jqueryui/themes/overcast/theme.min.css | 1 + .../ui-bg_diagonal-maze_20_6e4f1c_10x10.png | Bin 0 -> 133 bytes .../ui-bg_diagonal-maze_40_000000_10x10.png | Bin 0 -> 101 bytes .../ui-bg_fine-grain_10_eceadf_60x60.png | Bin 0 -> 3648 bytes .../ui-bg_fine-grain_10_f8f7f6_60x60.png | Bin 0 -> 3629 bytes .../ui-bg_fine-grain_15_eceadf_60x60.png | Bin 0 -> 3647 bytes .../ui-bg_fine-grain_15_f7f3de_60x60.png | Bin 0 -> 3650 bytes .../ui-bg_fine-grain_15_ffffff_60x60.png | Bin 0 -> 3060 bytes .../ui-bg_fine-grain_65_654b24_60x60.png | Bin 0 -> 3661 bytes .../ui-bg_fine-grain_68_b83400_60x60.png | Bin 0 -> 3661 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_3572ac_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_8c291d_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_b83400_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_fbdb93_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../themes/pepper-grinder/jquery-ui.css | 1311 ++ .../themes/pepper-grinder/jquery-ui.min.css | 7 + .../jqueryui/themes/pepper-grinder/theme.css | 443 + .../themes/pepper-grinder/theme.min.css | 1 + .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 188 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 191 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 185 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 4706 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 172 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 152 bytes .../images/ui-icons_217bc0_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_469bdd_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_6da8d5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f9bd01_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/redmond/jquery-ui.css | 1311 ++ .../jqueryui/themes/redmond/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/redmond/theme.css | 443 + .../lib/jqueryui/themes/redmond/theme.min.css | 1 + .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 183 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 73 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 126 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 128 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 185 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 122 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/smoothness/jquery-ui.css | 1311 ++ .../themes/smoothness/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/smoothness/theme.css | 443 + .../jqueryui/themes/smoothness/theme.min.css | 1 + .../images/ui-bg_glass_55_fcf0ba_1x400.png | Bin 0 -> 187 bytes .../ui-bg_gloss-wave_100_ece8da_500x100.png | Bin 0 -> 4660 bytes .../ui-bg_highlight-hard_100_f5f3e5_1x100.png | Bin 0 -> 173 bytes .../ui-bg_highlight-hard_100_fafaf4_1x100.png | Bin 0 -> 161 bytes .../ui-bg_highlight-hard_15_459e00_1x100.png | Bin 0 -> 181 bytes .../ui-bg_highlight-hard_95_cccccc_1x100.png | Bin 0 -> 115 bytes .../ui-bg_highlight-soft_25_67b021_1x100.png | Bin 0 -> 205 bytes .../ui-bg_highlight-soft_95_ffedad_1x100.png | Bin 0 -> 167 bytes .../ui-bg_inset-soft_15_2b2922_1x100.png | Bin 0 -> 186 bytes .../images/ui-icons_808080_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_847e71_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_8DC262_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_eeeeee_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../themes/south-street/jquery-ui.css | 1311 ++ .../themes/south-street/jquery-ui.min.css | 7 + .../jqueryui/themes/south-street/theme.css | 443 + .../themes/south-street/theme.min.css | 1 + .../images/ui-bg_glass_45_0078ae_1x400.png | Bin 0 -> 195 bytes .../images/ui-bg_glass_55_f8da4e_1x400.png | Bin 0 -> 200 bytes .../images/ui-bg_glass_75_79c9ec_1x400.png | Bin 0 -> 199 bytes .../ui-bg_gloss-wave_45_e14f1c_500x100.png | Bin 0 -> 4707 bytes .../ui-bg_gloss-wave_50_6eac2c_500x100.png | Bin 0 -> 4722 bytes .../ui-bg_gloss-wave_75_2191c0_500x100.png | Bin 0 -> 4756 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 152 bytes .../start/images/ui-icons_0078ae_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_056b93_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_e0fdff_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_f5e175_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_f7a50d_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_fcd113_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/start/jquery-ui.css | 1311 ++ .../jqueryui/themes/start/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/start/theme.css | 443 + .../lib/jqueryui/themes/start/theme.min.css | 1 + ...ui-bg_diagonals-medium_20_d34d17_40x40.png | Bin 0 -> 170 bytes .../ui-bg_gloss-wave_45_817865_500x100.png | Bin 0 -> 4708 bytes .../ui-bg_gloss-wave_60_fece2f_500x100.png | Bin 0 -> 4617 bytes .../ui-bg_gloss-wave_70_ffdd57_500x100.png | Bin 0 -> 4481 bytes .../ui-bg_gloss-wave_90_fff9e5_500x100.png | Bin 0 -> 4417 bytes .../ui-bg_highlight-soft_100_feeebd_1x100.png | Bin 0 -> 188 bytes .../ui-bg_inset-soft_30_ffffff_1x100.png | Bin 0 -> 69 bytes .../sunny/images/ui-icons_3d3d3d_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_bd7b00_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_d19405_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_eb990f_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_ed9f26_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_fadc7a_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_ffe180_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/sunny/jquery-ui.css | 1311 ++ .../jqueryui/themes/sunny/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/sunny/theme.css | 443 + .../lib/jqueryui/themes/sunny/theme.min.css | 1 + .../images/ui-bg_diamond_10_4f4221_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_20_372806_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_25_675423_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_25_d5ac5d_10x8.png | Bin 0 -> 132 bytes .../images/ui-bg_diamond_8_261803_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_8_443113_10x8.png | Bin 0 -> 130 bytes .../ui-bg_highlight-hard_65_fee4bd_1x100.png | Bin 0 -> 167 bytes .../images/ui-icons_070603_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e8e2b5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e9cd86_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_efec9f_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f2ec64_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f9f2bd_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ff7519_256x240.png | Bin 0 -> 3767 bytes .../themes/swanky-purse/jquery-ui.css | 1311 ++ .../themes/swanky-purse/jquery-ui.min.css | 7 + .../jqueryui/themes/swanky-purse/theme.css | 443 + .../themes/swanky-purse/theme.min.css | 1 + .../ui-bg_diagonals-small_50_262626_40x40.png | Bin 0 -> 114 bytes .../images/ui-bg_glass_40_0a0a0a_1x400.png | Bin 0 -> 118 bytes .../images/ui-bg_glass_55_f1fbe5_1x400.png | Bin 0 -> 188 bytes .../images/ui-bg_glass_60_000000_1x400.png | Bin 0 -> 123 bytes .../ui-bg_gloss-wave_55_000000_500x100.png | Bin 0 -> 3185 bytes .../ui-bg_gloss-wave_85_9fda58_500x100.png | Bin 0 -> 4733 bytes .../ui-bg_gloss-wave_95_f6ecd5_500x100.png | Bin 0 -> 4664 bytes .../images/ui-icons_000000_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_1f1f1f_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_9fda58_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_b8ec79_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/trontastic/jquery-ui.css | 1311 ++ .../themes/trontastic/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/trontastic/theme.css | 443 + .../jqueryui/themes/trontastic/theme.min.css | 1 + .../images/ui-bg_glass_20_555555_1x400.png | Bin 0 -> 122 bytes .../images/ui-bg_glass_40_0078a3_1x400.png | Bin 0 -> 193 bytes .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin 0 -> 166 bytes .../ui-bg_gloss-wave_25_333333_500x100.png | Bin 0 -> 3088 bytes .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin 0 -> 128 bytes .../ui-bg_inset-soft_25_000000_1x100.png | Bin 0 -> 111 bytes .../ui-bg_inset-soft_30_f58400_1x100.png | Bin 0 -> 192 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_4b8e0b_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_a83300_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cccccc_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/ui-darkness/jquery-ui.css | 1311 ++ .../themes/ui-darkness/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/ui-darkness/theme.css | 443 + .../jqueryui/themes/ui-darkness/theme.min.css | 1 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 195 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 154 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 123 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 191 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 73 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 4664 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 125 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 166 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../themes/ui-lightness/jquery-ui.css | 1311 ++ .../themes/ui-lightness/jquery-ui.min.css | 7 + .../jqueryui/themes/ui-lightness/theme.css | 443 + .../themes/ui-lightness/theme.min.css | 1 + .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 185 bytes .../ui-bg_gloss-wave_16_121212_500x100.png | Bin 0 -> 3147 bytes .../ui-bg_highlight-hard_15_888888_1x100.png | Bin 0 -> 111 bytes .../ui-bg_highlight-hard_55_555555_1x100.png | Bin 0 -> 110 bytes .../ui-bg_highlight-soft_35_adadad_1x100.png | Bin 0 -> 125 bytes .../ui-bg_highlight-soft_60_dddddd_1x100.png | Bin 0 -> 126 bytes .../ui-bg_inset-soft_15_121212_1x100.png | Bin 0 -> 120 bytes .../vader/images/ui-icons_666666_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_aaaaaa_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_bbbbbb_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_c98000_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_cccccc_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_f29a00_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/vader/jquery-ui.css | 1311 ++ .../jqueryui/themes/vader/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/vader/theme.css | 443 + .../lib/jqueryui/themes/vader/theme.min.css | 1 + SaBusinessMgrCoreWebOnline/Startup.cs | 57 - .../Views/_ViewImports.cshtml | 3 - .../Localisation/SbmPortalProperties.resx | 288 + .../Portal/App/Program.cs | 32 + .../Portal/App/SbmApplication_Portal.cs | 146 + .../Portal/App/SbmLocaliser_Portal.cs | 47 + .../Portal/App/SbmSessionData_Portal.cs | 132 + .../Portal/App/SbmStartup_Portal.cs | 73 + .../Portal/Controllers/HomeController.cs | 92 + .../Controllers/SbmController_Portal.cs | 240 + .../Controllers/SecurityController-Ajax.cs | 487 + .../Portal/Controllers/SecurityController.cs | 129 + .../Portal/Models/ErrorViewModel.cs | 24 + .../Portal/Models/Model_Home.cs | 27 + .../Portal/Models/Model_Security.cs | 112 + .../Portal/Models/SbmModel_Portal.cs | 23 + .../Properties/launchSettings.json | 0 .../SaBusinessMgrCoreWebPortal.csproj | 31 + .../Views/Home/Index.cshtml | 7 + .../Views/Home/Privacy.cshtml | 6 + .../Views/Security/ChangePassword.cshtml | 69 + .../Views/Security/RequestPassword.cshtml | 39 + .../Views/Security/Signin.cshtml | 71 + .../Views/Shared/Error.cshtml | 25 + .../Views/Shared/_Layout.cshtml | 196 + .../Shared/_ValidationScriptsPartial.cshtml | 2 + .../Views/_ViewImports.cshtml | 4 + .../Views/_ViewStart.cshtml | 3 + .../appsettings.Development.json | 9 + SaBusinessMgrCoreWebPortal/appsettings.json | 10 + SaBusinessMgrCoreWebPortal/libman.json | 10 + .../wwwroot/css/sbm-base.css | 415 + .../wwwroot/css/sbm-data.css | 231 + .../wwwroot/css/sbm-form.css | 288 + .../wwwroot/css/sbm-main.css | 395 + .../wwwroot/favicon.ico | Bin 0 -> 32038 bytes .../wwwroot/js/jqui-i18n/datepicker-af.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ar-DZ.js | 39 + .../wwwroot/js/jqui-i18n/datepicker-ar.js | 39 + .../wwwroot/js/jqui-i18n/datepicker-az.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-be.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-bg.js | 38 + .../wwwroot/js/jqui-i18n/datepicker-bs.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ca.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-cs.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-cy-GB.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-da.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-de-AT.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-de-CH.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-de.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-el.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-en-AU.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-en-GB.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-en-NZ.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-eo.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-es.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-et.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-eu.js | 36 + .../wwwroot/js/jqui-i18n/datepicker-fa.js | 73 + .../wwwroot/js/jqui-i18n/datepicker-fi.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-fo.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-fr-CA.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-fr-CH.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-fr.js | 39 + .../wwwroot/js/jqui-i18n/datepicker-gl.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-he.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-hi.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-hr.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-hu.js | 36 + .../wwwroot/js/jqui-i18n/datepicker-hy.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-id.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-is.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-it-CH.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-it.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ja.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ka.js | 48 + .../wwwroot/js/jqui-i18n/datepicker-kk.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-km.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ko.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ky.js | 38 + .../wwwroot/js/jqui-i18n/datepicker-lb.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-lt.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-lv.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-mk.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ml.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ms.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-nb.js | 49 + .../wwwroot/js/jqui-i18n/datepicker-nl-BE.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-nl.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-nn.js | 49 + .../wwwroot/js/jqui-i18n/datepicker-no.js | 50 + .../wwwroot/js/jqui-i18n/datepicker-pl.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-pt-BR.js | 45 + .../wwwroot/js/jqui-i18n/datepicker-pt.js | 44 + .../wwwroot/js/jqui-i18n/datepicker-rm.js | 61 + .../wwwroot/js/jqui-i18n/datepicker-ro.js | 40 + .../wwwroot/js/jqui-i18n/datepicker-ru.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-sk.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-sl.js | 38 + .../wwwroot/js/jqui-i18n/datepicker-sq.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-sr-SR.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-sr.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-sv.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-ta.js | 53 + .../wwwroot/js/jqui-i18n/datepicker-th.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-tj.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-tr.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-uk.js | 38 + .../wwwroot/js/jqui-i18n/datepicker-vi.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-zh-CN.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-zh-HK.js | 37 + .../wwwroot/js/jqui-i18n/datepicker-zh-TW.js | 37 + .../wwwroot/js/sbm-main.js | 519 + .../wwwroot/js/sbm-security.js | 88 + .../wwwroot/lib/bootstrap/LICENSE | 22 + .../lib/bootstrap/dist/css/bootstrap-grid.css | 3719 +++ .../bootstrap/dist/css/bootstrap-grid.css.map | 1 + .../bootstrap/dist/css/bootstrap-grid.min.css | 7 + .../dist/css/bootstrap-grid.min.css.map | 1 + .../bootstrap/dist/css/bootstrap-reboot.css | 331 + .../dist/css/bootstrap-reboot.css.map | 1 + .../dist/css/bootstrap-reboot.min.css | 8 + .../dist/css/bootstrap-reboot.min.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.css | 10038 +++++++++ .../lib/bootstrap/dist/css/bootstrap.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.min.css | 7 + .../bootstrap/dist/css/bootstrap.min.css.map | 1 + .../lib/bootstrap/dist/js/bootstrap.bundle.js | 7013 ++++++ .../bootstrap/dist/js/bootstrap.bundle.js.map | 1 + .../bootstrap/dist/js/bootstrap.bundle.min.js | 7 + .../dist/js/bootstrap.bundle.min.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.js | 4435 ++++ .../lib/bootstrap/dist/js/bootstrap.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.min.js | 7 + .../bootstrap/dist/js/bootstrap.min.js.map | 1 + .../jquery-validation-unobtrusive/LICENSE.txt | 12 + .../jquery.validate.unobtrusive.js | 432 + .../jquery.validate.unobtrusive.min.js | 5 + .../wwwroot/lib/jquery-validation/LICENSE.md | 22 + .../dist/additional-methods.js | 1158 + .../dist/additional-methods.min.js | 4 + .../jquery-validation/dist/jquery.validate.js | 1601 ++ .../dist/jquery.validate.min.js | 4 + .../wwwroot/lib/jquery/LICENSE.txt | 36 + .../wwwroot/lib/jquery/dist/jquery.js | 10872 +++++++++ .../wwwroot/lib/jquery/dist/jquery.min.js | 2 + .../wwwroot/lib/jquery/dist/jquery.min.map | 1 + .../images/ui-icons_444444_256x240.png | Bin 0 -> 3764 bytes .../images/ui-icons_555555_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_777620_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_777777_256x240.png | Bin 0 -> 3764 bytes .../images/ui-icons_cc0000_256x240.png | Bin 0 -> 3764 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3764 bytes .../wwwroot/lib/jqueryui/jquery-ui.css | 1312 ++ .../wwwroot/lib/jqueryui/jquery-ui.js | 18706 ++++++++++++++++ .../wwwroot/lib/jqueryui/jquery-ui.min.css | 7 + .../wwwroot/lib/jqueryui/jquery-ui.min.js | 13 + .../lib/jqueryui/jquery-ui.structure.css | 886 + .../lib/jqueryui/jquery-ui.structure.min.css | 5 + .../wwwroot/lib/jqueryui/jquery-ui.theme.css | 443 + .../lib/jqueryui/jquery-ui.theme.min.css | 5 + .../base/images/ui-icons_444444_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_555555_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_777620_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_777777_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_cc0000_256x240.png | Bin 0 -> 3767 bytes .../base/images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/base/jquery-ui.css | 1311 ++ .../jqueryui/themes/base/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/base/theme.css | 443 + .../lib/jqueryui/themes/base/theme.min.css | 1 + .../ui-bg_diagonals-thick_8_333333_40x40.png | Bin 0 -> 155 bytes .../images/ui-bg_glass_40_111111_1x400.png | Bin 0 -> 124 bytes .../images/ui-bg_glass_55_1c1c1c_1x400.png | Bin 0 -> 125 bytes .../ui-bg_highlight-hard_100_f9f9f9_1x100.png | Bin 0 -> 114 bytes .../ui-bg_highlight-hard_40_aaaaaa_1x100.png | Bin 0 -> 118 bytes .../ui-bg_highlight-soft_50_aaaaaa_1x100.png | Bin 0 -> 119 bytes .../ui-bg_inset-hard_45_cd0a0a_1x100.png | Bin 0 -> 174 bytes .../ui-bg_inset-hard_55_ffeb80_1x100.png | Bin 0 -> 145 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_4ca300_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_bbbbbb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ededed_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffcf29_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/black-tie/jquery-ui.css | 1311 ++ .../themes/black-tie/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/black-tie/theme.css | 443 + .../jqueryui/themes/black-tie/theme.min.css | 1 + .../ui-bg_diagonals-thick_75_f3d8d8_40x40.png | Bin 0 -> 199 bytes .../images/ui-bg_dots-small_65_a6a6a6_2x2.png | Bin 0 -> 72 bytes .../images/ui-bg_glass_55_fbf8ee_1x400.png | Bin 0 -> 186 bytes .../ui-bg_highlight-hard_100_eeeeee_1x100.png | Bin 0 -> 112 bytes .../ui-bg_highlight-hard_100_f6f6f6_1x100.png | Bin 0 -> 117 bytes .../ui-bg_highlight-soft_15_cc0000_1x100.png | Bin 0 -> 183 bytes .../images/ui-icons_004276_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cc0000_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/blitzer/jquery-ui.css | 1311 ++ .../jqueryui/themes/blitzer/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/blitzer/theme.css | 443 + .../lib/jqueryui/themes/blitzer/theme.min.css | 1 + .../ui-bg_diagonals-thick_90_eeeeee_40x40.png | Bin 0 -> 155 bytes .../images/ui-bg_glass_100_e4f1fb_1x400.png | Bin 0 -> 192 bytes .../images/ui-bg_glass_50_3baae3_1x400.png | Bin 0 -> 190 bytes .../images/ui-bg_glass_80_d7ebf9_1x400.png | Bin 0 -> 195 bytes .../ui-bg_highlight-hard_100_f2f5f7_1x100.png | Bin 0 -> 174 bytes .../ui-bg_highlight-hard_70_000000_1x100.png | Bin 0 -> 117 bytes .../ui-bg_highlight-soft_100_deedf7_1x100.png | Bin 0 -> 201 bytes .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin 0 -> 159 bytes .../images/ui-icons_2694e8_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_3d80b3_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_72a7cf_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/cupertino/jquery-ui.css | 1311 ++ .../themes/cupertino/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/cupertino/theme.css | 443 + .../jqueryui/themes/cupertino/theme.min.css | 1 + .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin 0 -> 166 bytes .../ui-bg_highlight-hard_20_0972a5_1x100.png | Bin 0 -> 182 bytes .../ui-bg_highlight-soft_33_003147_1x100.png | Bin 0 -> 198 bytes .../ui-bg_highlight-soft_35_222222_1x100.png | Bin 0 -> 132 bytes .../ui-bg_highlight-soft_44_444444_1x100.png | Bin 0 -> 130 bytes .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin 0 -> 128 bytes .../images/ui-bg_loop_25_000000_21x21.png | Bin 0 -> 148 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_4b8e0b_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_a83300_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cccccc_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/dark-hive/jquery-ui.css | 1311 ++ .../themes/dark-hive/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/dark-hive/theme.css | 443 + .../jqueryui/themes/dark-hive/theme.min.css | 1 + .../ui-bg_diagonals-thick_15_0b3e6f_40x40.png | Bin 0 -> 199 bytes .../ui-bg_dots-medium_30_0b58a2_4x4.png | Bin 0 -> 88 bytes .../images/ui-bg_dots-small_20_333333_2x2.png | Bin 0 -> 72 bytes .../images/ui-bg_dots-small_30_a32d00_2x2.png | Bin 0 -> 80 bytes .../images/ui-bg_dots-small_40_00498f_2x2.png | Bin 0 -> 82 bytes .../ui-bg_gloss-wave_20_111111_500x100.png | Bin 0 -> 3098 bytes .../images/ui-icons_00498f_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_98d2fb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_9ccdfc_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/dot-luv/jquery-ui.css | 1311 ++ .../jqueryui/themes/dot-luv/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/dot-luv/theme.css | 443 + .../lib/jqueryui/themes/dot-luv/theme.min.css | 1 + .../ui-bg_gloss-wave_30_3d3644_500x100.png | Bin 0 -> 4700 bytes .../ui-bg_highlight-soft_100_dcd9de_1x100.png | Bin 0 -> 189 bytes .../ui-bg_highlight-soft_100_eae6ea_1x100.png | Bin 0 -> 194 bytes .../ui-bg_highlight-soft_25_30273a_1x100.png | Bin 0 -> 203 bytes .../ui-bg_highlight-soft_45_5f5964_1x100.png | Bin 0 -> 196 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_734d99_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_8d78a5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_a8a3ae_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ebccce_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/eggplant/jquery-ui.css | 1311 ++ .../themes/eggplant/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/eggplant/theme.css | 443 + .../jqueryui/themes/eggplant/theme.min.css | 1 + .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 0 -> 159 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 0 -> 196 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 0 -> 200 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 0 -> 200 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 0 -> 125 bytes .../ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 0 -> 113 bytes .../images/ui-icons_0a82eb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_0b54d5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_5fa5e3_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_fcdd4a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/excite-bike/jquery-ui.css | 1311 ++ .../themes/excite-bike/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/excite-bike/theme.css | 443 + .../jqueryui/themes/excite-bike/theme.min.css | 1 + .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 73 bytes .../ui-bg_highlight-soft_100_f6f6f6_1x100.png | Bin 0 -> 125 bytes .../ui-bg_highlight-soft_25_0073ea_1x100.png | Bin 0 -> 186 bytes .../ui-bg_highlight-soft_50_dddddd_1x100.png | Bin 0 -> 126 bytes .../flick/images/ui-icons_0073ea_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_666666_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_ff0084_256x240.png | Bin 0 -> 3767 bytes .../flick/images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/flick/jquery-ui.css | 1311 ++ .../jqueryui/themes/flick/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/flick/theme.css | 443 + .../lib/jqueryui/themes/flick/theme.min.css | 1 + .../ui-bg_diagonals-small_40_db4865_40x40.png | Bin 0 -> 158 bytes .../ui-bg_diagonals-small_50_93c3cd_40x40.png | Bin 0 -> 159 bytes .../ui-bg_diagonals-small_50_ff3853_40x40.png | Bin 0 -> 156 bytes .../ui-bg_diagonals-small_75_ccd232_40x40.png | Bin 0 -> 159 bytes .../ui-bg_dots-medium_80_ffff38_4x4.png | Bin 0 -> 82 bytes .../images/ui-bg_dots-small_35_35414f_2x2.png | Bin 0 -> 81 bytes .../ui-bg_white-lines_85_f7f7ba_40x100.png | Bin 0 -> 213 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_88a206_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_c02669_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e1e463_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffeb33_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/hot-sneaks/jquery-ui.css | 1311 ++ .../themes/hot-sneaks/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/hot-sneaks/theme.css | 443 + .../jqueryui/themes/hot-sneaks/theme.min.css | 1 + .../images/ui-bg_glass_100_f5f0e5_1x400.png | Bin 0 -> 191 bytes .../images/ui-bg_glass_25_cb842e_1x400.png | Bin 0 -> 195 bytes .../images/ui-bg_glass_70_ede4d4_1x400.png | Bin 0 -> 191 bytes .../ui-bg_highlight-hard_100_f4f0ec_1x100.png | Bin 0 -> 178 bytes .../ui-bg_highlight-hard_65_fee4bd_1x100.png | Bin 0 -> 167 bytes .../ui-bg_highlight-hard_75_f5f5b5_1x100.png | Bin 0 -> 175 bytes .../ui-bg_inset-soft_100_f4f0ec_1x100.png | Bin 0 -> 195 bytes .../images/ui-icons_c47a23_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cb672b_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f08000_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f35f07_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ff7519_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/humanity/jquery-ui.css | 1311 ++ .../themes/humanity/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/humanity/theme.css | 443 + .../jqueryui/themes/humanity/theme.min.css | 1 + .../ui-bg_diagonals-small_0_aaaaaa_40x40.png | Bin 0 -> 83 bytes .../ui-bg_diagonals-thick_15_444444_40x40.png | Bin 0 -> 155 bytes .../ui-bg_diagonals-thick_95_ffdc2e_40x40.png | Bin 0 -> 199 bytes .../images/ui-bg_glass_55_fbf5d0_1x400.png | Bin 0 -> 187 bytes .../ui-bg_highlight-hard_30_285c00_1x100.png | Bin 0 -> 177 bytes .../ui-bg_highlight-soft_33_3a8104_1x100.png | Bin 0 -> 202 bytes .../ui-bg_highlight-soft_50_4eb305_1x100.png | Bin 0 -> 200 bytes .../ui-bg_highlight-soft_60_4ca20b_1x100.png | Bin 0 -> 202 bytes .../ui-bg_inset-soft_10_285c00_1x100.png | Bin 0 -> 198 bytes .../images/ui-icons_4eb305_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_72b42d_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/le-frog/jquery-ui.css | 1311 ++ .../jqueryui/themes/le-frog/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/le-frog/theme.css | 443 + .../lib/jqueryui/themes/le-frog/theme.min.css | 1 + .../images/ui-bg_glass_15_5f391b_1x400.png | Bin 0 -> 189 bytes .../ui-bg_gloss-wave_20_1c160d_500x100.png | Bin 0 -> 4698 bytes .../ui-bg_gloss-wave_25_453326_500x100.png | Bin 0 -> 4693 bytes .../ui-bg_gloss-wave_30_44372c_500x100.png | Bin 0 -> 4706 bytes .../ui-bg_highlight-soft_20_201913_1x100.png | Bin 0 -> 194 bytes .../ui-bg_highlight-soft_20_619226_1x100.png | Bin 0 -> 196 bytes .../ui-bg_inset-soft_10_201913_1x100.png | Bin 0 -> 200 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_9bcc60_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_add978_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e3ddc9_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f1fd86_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/mint-choc/jquery-ui.css | 1311 ++ .../themes/mint-choc/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/mint-choc/theme.css | 443 + .../jqueryui/themes/mint-choc/theme.min.css | 1 + .../images/ui-bg_glass_100_f8f8f8_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_35_dddddd_1x400.png | Bin 0 -> 128 bytes .../images/ui-bg_glass_60_eeeeee_1x400.png | Bin 0 -> 128 bytes .../ui-bg_inset-hard_75_999999_1x100.png | Bin 0 -> 114 bytes .../ui-bg_inset-soft_50_c9c9c9_1x100.png | Bin 0 -> 120 bytes .../images/ui-icons_3383bb_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_70b2e1_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_999999_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_fbc856_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/overcast/jquery-ui.css | 1311 ++ .../themes/overcast/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/overcast/theme.css | 443 + .../jqueryui/themes/overcast/theme.min.css | 1 + .../ui-bg_diagonal-maze_20_6e4f1c_10x10.png | Bin 0 -> 133 bytes .../ui-bg_diagonal-maze_40_000000_10x10.png | Bin 0 -> 101 bytes .../ui-bg_fine-grain_10_eceadf_60x60.png | Bin 0 -> 3648 bytes .../ui-bg_fine-grain_10_f8f7f6_60x60.png | Bin 0 -> 3629 bytes .../ui-bg_fine-grain_15_eceadf_60x60.png | Bin 0 -> 3647 bytes .../ui-bg_fine-grain_15_f7f3de_60x60.png | Bin 0 -> 3650 bytes .../ui-bg_fine-grain_15_ffffff_60x60.png | Bin 0 -> 3060 bytes .../ui-bg_fine-grain_65_654b24_60x60.png | Bin 0 -> 3661 bytes .../ui-bg_fine-grain_68_b83400_60x60.png | Bin 0 -> 3661 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_3572ac_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_8c291d_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_b83400_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_fbdb93_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../themes/pepper-grinder/jquery-ui.css | 1311 ++ .../themes/pepper-grinder/jquery-ui.min.css | 7 + .../jqueryui/themes/pepper-grinder/theme.css | 443 + .../themes/pepper-grinder/theme.min.css | 1 + .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 188 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 191 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 185 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 4706 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 172 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 152 bytes .../images/ui-icons_217bc0_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_469bdd_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_6da8d5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f9bd01_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/redmond/jquery-ui.css | 1311 ++ .../jqueryui/themes/redmond/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/redmond/theme.css | 443 + .../lib/jqueryui/themes/redmond/theme.min.css | 1 + .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 183 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 73 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 126 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 128 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 185 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 122 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/smoothness/jquery-ui.css | 1311 ++ .../themes/smoothness/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/smoothness/theme.css | 443 + .../jqueryui/themes/smoothness/theme.min.css | 1 + .../images/ui-bg_glass_55_fcf0ba_1x400.png | Bin 0 -> 187 bytes .../ui-bg_gloss-wave_100_ece8da_500x100.png | Bin 0 -> 4660 bytes .../ui-bg_highlight-hard_100_f5f3e5_1x100.png | Bin 0 -> 173 bytes .../ui-bg_highlight-hard_100_fafaf4_1x100.png | Bin 0 -> 161 bytes .../ui-bg_highlight-hard_15_459e00_1x100.png | Bin 0 -> 181 bytes .../ui-bg_highlight-hard_95_cccccc_1x100.png | Bin 0 -> 115 bytes .../ui-bg_highlight-soft_25_67b021_1x100.png | Bin 0 -> 205 bytes .../ui-bg_highlight-soft_95_ffedad_1x100.png | Bin 0 -> 167 bytes .../ui-bg_inset-soft_15_2b2922_1x100.png | Bin 0 -> 186 bytes .../images/ui-icons_808080_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_847e71_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_8DC262_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_eeeeee_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../themes/south-street/jquery-ui.css | 1311 ++ .../themes/south-street/jquery-ui.min.css | 7 + .../jqueryui/themes/south-street/theme.css | 443 + .../themes/south-street/theme.min.css | 1 + .../images/ui-bg_glass_45_0078ae_1x400.png | Bin 0 -> 195 bytes .../images/ui-bg_glass_55_f8da4e_1x400.png | Bin 0 -> 200 bytes .../images/ui-bg_glass_75_79c9ec_1x400.png | Bin 0 -> 199 bytes .../ui-bg_gloss-wave_45_e14f1c_500x100.png | Bin 0 -> 4707 bytes .../ui-bg_gloss-wave_50_6eac2c_500x100.png | Bin 0 -> 4722 bytes .../ui-bg_gloss-wave_75_2191c0_500x100.png | Bin 0 -> 4756 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 152 bytes .../start/images/ui-icons_0078ae_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_056b93_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_e0fdff_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_f5e175_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_f7a50d_256x240.png | Bin 0 -> 3767 bytes .../start/images/ui-icons_fcd113_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/start/jquery-ui.css | 1311 ++ .../jqueryui/themes/start/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/start/theme.css | 443 + .../lib/jqueryui/themes/start/theme.min.css | 1 + ...ui-bg_diagonals-medium_20_d34d17_40x40.png | Bin 0 -> 170 bytes .../ui-bg_gloss-wave_45_817865_500x100.png | Bin 0 -> 4708 bytes .../ui-bg_gloss-wave_60_fece2f_500x100.png | Bin 0 -> 4617 bytes .../ui-bg_gloss-wave_70_ffdd57_500x100.png | Bin 0 -> 4481 bytes .../ui-bg_gloss-wave_90_fff9e5_500x100.png | Bin 0 -> 4417 bytes .../ui-bg_highlight-soft_100_feeebd_1x100.png | Bin 0 -> 188 bytes .../ui-bg_inset-soft_30_ffffff_1x100.png | Bin 0 -> 69 bytes .../sunny/images/ui-icons_3d3d3d_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_bd7b00_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_d19405_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_eb990f_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_ed9f26_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_fadc7a_256x240.png | Bin 0 -> 3767 bytes .../sunny/images/ui-icons_ffe180_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/sunny/jquery-ui.css | 1311 ++ .../jqueryui/themes/sunny/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/sunny/theme.css | 443 + .../lib/jqueryui/themes/sunny/theme.min.css | 1 + .../images/ui-bg_diamond_10_4f4221_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_20_372806_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_25_675423_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_25_d5ac5d_10x8.png | Bin 0 -> 132 bytes .../images/ui-bg_diamond_8_261803_10x8.png | Bin 0 -> 130 bytes .../images/ui-bg_diamond_8_443113_10x8.png | Bin 0 -> 130 bytes .../ui-bg_highlight-hard_65_fee4bd_1x100.png | Bin 0 -> 167 bytes .../images/ui-icons_070603_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e8e2b5_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_e9cd86_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_efec9f_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f2ec64_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_f9f2bd_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ff7519_256x240.png | Bin 0 -> 3767 bytes .../themes/swanky-purse/jquery-ui.css | 1311 ++ .../themes/swanky-purse/jquery-ui.min.css | 7 + .../jqueryui/themes/swanky-purse/theme.css | 443 + .../themes/swanky-purse/theme.min.css | 1 + .../ui-bg_diagonals-small_50_262626_40x40.png | Bin 0 -> 114 bytes .../images/ui-bg_glass_40_0a0a0a_1x400.png | Bin 0 -> 118 bytes .../images/ui-bg_glass_55_f1fbe5_1x400.png | Bin 0 -> 188 bytes .../images/ui-bg_glass_60_000000_1x400.png | Bin 0 -> 123 bytes .../ui-bg_gloss-wave_55_000000_500x100.png | Bin 0 -> 3185 bytes .../ui-bg_gloss-wave_85_9fda58_500x100.png | Bin 0 -> 4733 bytes .../ui-bg_gloss-wave_95_f6ecd5_500x100.png | Bin 0 -> 4664 bytes .../images/ui-icons_000000_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_1f1f1f_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_9fda58_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_b8ec79_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/trontastic/jquery-ui.css | 1311 ++ .../themes/trontastic/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/trontastic/theme.css | 443 + .../jqueryui/themes/trontastic/theme.min.css | 1 + .../images/ui-bg_glass_20_555555_1x400.png | Bin 0 -> 122 bytes .../images/ui-bg_glass_40_0078a3_1x400.png | Bin 0 -> 193 bytes .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin 0 -> 166 bytes .../ui-bg_gloss-wave_25_333333_500x100.png | Bin 0 -> 3088 bytes .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin 0 -> 128 bytes .../ui-bg_inset-soft_25_000000_1x100.png | Bin 0 -> 111 bytes .../ui-bg_inset-soft_30_f58400_1x100.png | Bin 0 -> 192 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_4b8e0b_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_a83300_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_cccccc_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../jqueryui/themes/ui-darkness/jquery-ui.css | 1311 ++ .../themes/ui-darkness/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/ui-darkness/theme.css | 443 + .../jqueryui/themes/ui-darkness/theme.min.css | 1 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 195 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 154 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 123 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 191 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 73 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 4664 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 125 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 166 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 3767 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 3767 bytes .../themes/ui-lightness/jquery-ui.css | 1311 ++ .../themes/ui-lightness/jquery-ui.min.css | 7 + .../jqueryui/themes/ui-lightness/theme.css | 443 + .../themes/ui-lightness/theme.min.css | 1 + .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 185 bytes .../ui-bg_gloss-wave_16_121212_500x100.png | Bin 0 -> 3147 bytes .../ui-bg_highlight-hard_15_888888_1x100.png | Bin 0 -> 111 bytes .../ui-bg_highlight-hard_55_555555_1x100.png | Bin 0 -> 110 bytes .../ui-bg_highlight-soft_35_adadad_1x100.png | Bin 0 -> 125 bytes .../ui-bg_highlight-soft_60_dddddd_1x100.png | Bin 0 -> 126 bytes .../ui-bg_inset-soft_15_121212_1x100.png | Bin 0 -> 120 bytes .../vader/images/ui-icons_666666_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_aaaaaa_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_bbbbbb_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_c98000_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_cccccc_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3767 bytes .../vader/images/ui-icons_f29a00_256x240.png | Bin 0 -> 3767 bytes .../lib/jqueryui/themes/vader/jquery-ui.css | 1311 ++ .../jqueryui/themes/vader/jquery-ui.min.css | 7 + .../lib/jqueryui/themes/vader/theme.css | 443 + .../lib/jqueryui/themes/vader/theme.min.css | 1 + 1208 files changed, 186342 insertions(+), 1690 deletions(-) create mode 100644 SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs create mode 100644 SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs create mode 100644 SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs create mode 100644 SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-DataExport.cs create mode 100644 SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-FTP.cs create mode 100644 SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs create mode 100644 SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs create mode 100644 SaBusMgrCoreProcs/Procs/Reports/SbmPrint_Footer.cs create mode 100644 SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs create mode 100644 SaBusMgrCoreProcs/SaBusMgrCoreProcs.csproj rename SaBusinessMgrCoreWebOnline/SaBusinessMgrCoreWebOnline.csproj => SaBusMgrCoreWeb/SaBusMgrCoreWeb.csproj (59%) create mode 100644 SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs create mode 100644 SaBusMgrCoreWeb/Web/App/SbmLocaliser.cs create mode 100644 SaBusMgrCoreWeb/Web/App/SbmSessionConfig.cs create mode 100644 SaBusMgrCoreWeb/Web/App/SbmSessionContext_Web.cs create mode 100644 SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs create mode 100644 SaBusMgrCoreWeb/Web/App/SbmStartup_Web.cs create mode 100644 SaBusMgrCoreWeb/Web/App/SbmSystem_Web.cs create mode 100644 SaBusMgrCoreWeb/Web/App/SbmUserContext_Web.cs create mode 100644 SaBusMgrCoreWeb/Web/Consoles/SbmEmailConsole_Web.cs create mode 100644 SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs create mode 100644 SaBusMgrCoreWeb/Web/Helpers/SbmEmailConfigHelper.cs create mode 100644 SaBusMgrCoreWeb/Web/Helpers/SbmSessionConfigHelper.cs create mode 100644 SaBusMgrCoreWeb/Web/Middleware/SbmAuthenticationHandler.cs create mode 100644 SaBusMgrCoreWeb/Web/Middleware/SbmMetadataProvider.cs create mode 100644 SaBusMgrCoreWeb/Web/Middleware/SbmModelBinder.cs create mode 100644 SaBusMgrCoreWeb/Web/Middleware/SbmModelBinderProvider.cs create mode 100644 SaBusMgrCoreWeb/Web/Middleware/ValidateAntiForgeryTokenMiddleware.cs create mode 100644 SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs create mode 100644 SaBusMgrStandardBase/Base/App/Sbm-Version.cs rename SaBusMgrStandardBase/Base/App/{SbmDfn.cs => Sbm.cs} (94%) delete mode 100644 SaBusMgrStandardBase/Base/App/SbmConsoleHelper.cs create mode 100644 SaBusMgrStandardBase/Base/App/SbmSessionData.cs create mode 100644 SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs create mode 100644 SaBusMgrStandardBase/Base/Helpers/SbmPasswordHelper.cs create mode 100644 SaBusMgrStandardBase/Base/Helpers/SbmResourceHelper.cs rename SaBusMgrStandardDbas/Dbas/App/{SbmSystem_WinDbas.cs => SbmSystem_Dbas.cs} (96%) create mode 100644 SaBusMgrStandardDbas/Dbas/App/SbmUserContext_Dbas.cs rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl/Control/App}/Program.cs (53%) create mode 100644 SaBusinessMgrCoreWebControl/Control/App/SbmApplication_Admin.cs create mode 100644 SaBusinessMgrCoreWebControl/Control/App/SbmLocaliser_Admin.cs create mode 100644 SaBusinessMgrCoreWebControl/Control/App/SbmStartup_Admin.cs rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Controllers/HomeController.cs (89%) create mode 100644 SaBusinessMgrCoreWebControl/Localisation/SbmControlProperties.resx rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Models/ErrorViewModel.cs (78%) create mode 100644 SaBusinessMgrCoreWebControl/Properties/launchSettings.json create mode 100644 SaBusinessMgrCoreWebControl/SaBusinessMgrCoreWebControl.csproj rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Views/Home/Index.cshtml (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Views/Home/Privacy.cshtml (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Views/Shared/Error.cshtml (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Views/Shared/_Layout.cshtml (88%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Views/Shared/_ValidationScriptsPartial.cshtml (100%) create mode 100644 SaBusinessMgrCoreWebControl/Views/_ViewImports.cshtml rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/Views/_ViewStart.cshtml (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/appsettings.Development.json (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/appsettings.json (100%) create mode 100644 SaBusinessMgrCoreWebControl/libman.json rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/css/site.css (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/favicon.ico (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/js/site.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/LICENSE (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery/LICENSE.txt (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery/dist/jquery.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebControl}/wwwroot/lib/jquery/dist/jquery.min.map (100%) create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/images/ui-icons_444444_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/images/ui-icons_555555_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/images/ui-icons_777620_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/images/ui-icons_777777_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/images/ui-icons_cc0000_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.js create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.min.js create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.structure.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.structure.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/jquery-ui.theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/images/ui-icons_444444_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/images/ui-icons_555555_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/images/ui-icons_777620_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/images/ui-icons_777777_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/images/ui-icons_cc0000_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/base/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_diagonals-thick_8_333333_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_glass_40_111111_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_glass_55_1c1c1c_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_highlight-hard_40_aaaaaa_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_highlight-soft_50_aaaaaa_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_inset-hard_45_cd0a0a_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_inset-hard_55_ffeb80_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_4ca300_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_bbbbbb_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_ededed_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_ffcf29_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/black-tie/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-icons_004276_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-icons_cc0000_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/blitzer/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_2694e8_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_2e83ff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_3d80b3_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_72a7cf_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/cupertino/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_loop_25_000000_21x21.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_4b8e0b_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_a83300_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_cccccc_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dark-hive/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-medium_30_0b58a2_4x4.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-small_20_333333_2x2.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-small_30_a32d00_2x2.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-small_40_00498f_2x2.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_gloss-wave_20_111111_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_00498f_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_98d2fb_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_9ccdfc_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/dot-luv/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_734d99_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_8d78a5_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_a8a3ae_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_ebccce_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/eggplant/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_0a82eb_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_0b54d5_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_5fa5e3_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_fcdd4a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/excite-bike/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_0073ea_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_666666_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_ff0084_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/flick/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_40_db4865_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_93c3cd_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_ff3853_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_75_ccd232_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_dots-medium_80_ffff38_4x4.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_dots-small_35_35414f_2x2.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_white-lines_85_f7f7ba_40x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_88a206_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_c02669_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_e1e463_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_ffeb33_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/hot-sneaks/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_glass_25_cb842e_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_glass_70_ede4d4_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_c47a23_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_cb672b_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_f08000_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_f35f07_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_ff7519_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/humanity/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_diagonals-thick_15_444444_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_diagonals-thick_95_ffdc2e_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_glass_55_fbf5d0_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-hard_30_285c00_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-soft_33_3a8104_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-soft_50_4eb305_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-soft_60_4ca20b_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_inset-soft_10_285c00_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_4eb305_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_72b42d_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/le-frog/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_9bcc60_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_add978_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_e3ddc9_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_f1fd86_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/mint-choc/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_glass_100_f8f8f8_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_glass_35_dddddd_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_glass_60_eeeeee_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_inset-hard_75_999999_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_inset-soft_50_c9c9c9_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_3383bb_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_70b2e1_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_999999_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_fbc856_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/overcast/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_diagonal-maze_40_000000_10x10.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_10_f8f7f6_60x60.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_15_eceadf_60x60.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_15_f7f3de_60x60.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_65_654b24_60x60.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_3572ac_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_8c291d_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_b83400_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_fbdb93_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/pepper-grinder/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_217bc0_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_2e83ff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_469bdd_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_6da8d5_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_d8e7f3_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_f9bd01_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/redmond/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_888888_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/smoothness/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_glass_55_fcf0ba_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_gloss-wave_100_ece8da_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_100_f5f3e5_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_100_fafaf4_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_15_459e00_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_95_cccccc_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-soft_25_67b021_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-soft_95_ffedad_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_inset-soft_15_2b2922_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_808080_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_847e71_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_8DC262_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_eeeeee_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/south-street/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-bg_glass_45_0078ae_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-bg_glass_55_f8da4e_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-bg_glass_75_79c9ec_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-bg_gloss-wave_75_2191c0_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-icons_0078ae_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-icons_056b93_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-icons_d8e7f3_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-icons_e0fdff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-icons_f5e175_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-icons_f7a50d_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/images/ui-icons_fcd113_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/start/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_diagonals-medium_20_d34d17_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_45_817865_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_60_fece2f_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_70_ffdd57_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_90_fff9e5_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_highlight-soft_100_feeebd_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_inset-soft_30_ffffff_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_3d3d3d_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_bd7b00_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_d19405_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_eb990f_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_ed9f26_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_fadc7a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_ffe180_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/sunny/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_070603_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_e8e2b5_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_e9cd86_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_efec9f_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_f2ec64_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_f9f2bd_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_ff7519_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/swanky-purse/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_diagonals-small_50_262626_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_glass_40_0a0a0a_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_glass_55_f1fbe5_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_glass_60_000000_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_gloss-wave_55_000000_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_gloss-wave_85_9fda58_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_gloss-wave_95_f6ecd5_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_000000_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_1f1f1f_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_9fda58_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_b8ec79_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/trontastic/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_glass_20_555555_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_4b8e0b_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_a83300_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_cccccc_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-darkness/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/ui-lightness/theme.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_gloss-wave_16_121212_500x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-hard_15_888888_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-hard_55_555555_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-soft_35_adadad_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-soft_60_dddddd_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_inset-soft_15_121212_1x100.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_666666_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_aaaaaa_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_bbbbbb_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_c98000_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_cccccc_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_f29a00_256x240.png create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/theme.css create mode 100644 SaBusinessMgrCoreWebControl/wwwroot/lib/jqueryui/themes/vader/theme.min.css delete mode 100644 SaBusinessMgrCoreWebOnline/Startup.cs delete mode 100644 SaBusinessMgrCoreWebOnline/Views/_ViewImports.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Localisation/SbmPortalProperties.resx create mode 100644 SaBusinessMgrCoreWebPortal/Portal/App/Program.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/App/SbmApplication_Portal.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/App/SbmLocaliser_Portal.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/App/SbmSessionData_Portal.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/App/SbmStartup_Portal.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Controllers/HomeController.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Controllers/SbmController_Portal.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Controllers/SecurityController-Ajax.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Controllers/SecurityController.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Models/ErrorViewModel.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Models/Model_Home.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Models/Model_Security.cs create mode 100644 SaBusinessMgrCoreWebPortal/Portal/Models/SbmModel_Portal.cs rename {SaBusinessMgrCoreWebOnline => SaBusinessMgrCoreWebPortal}/Properties/launchSettings.json (100%) create mode 100644 SaBusinessMgrCoreWebPortal/SaBusinessMgrCoreWebPortal.csproj create mode 100644 SaBusinessMgrCoreWebPortal/Views/Home/Index.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/Home/Privacy.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/Security/ChangePassword.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/Security/RequestPassword.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/Security/Signin.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/Shared/Error.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/Shared/_Layout.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/Shared/_ValidationScriptsPartial.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/_ViewImports.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/Views/_ViewStart.cshtml create mode 100644 SaBusinessMgrCoreWebPortal/appsettings.Development.json create mode 100644 SaBusinessMgrCoreWebPortal/appsettings.json create mode 100644 SaBusinessMgrCoreWebPortal/libman.json create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/css/sbm-base.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/css/sbm-data.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/css/sbm-form.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/css/sbm-main.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/favicon.ico create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-af.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ar-DZ.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ar.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-az.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-be.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-bg.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-bs.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ca.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-cs.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-cy-GB.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-da.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-de-AT.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-de-CH.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-de.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-el.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-en-AU.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-en-GB.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-en-NZ.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-eo.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-es.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-et.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-eu.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-fa.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-fi.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-fo.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-fr-CA.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-fr-CH.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-fr.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-gl.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-he.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-hi.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-hr.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-hu.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-hy.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-id.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-is.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-it-CH.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-it.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ja.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ka.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-kk.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-km.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ko.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ky.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-lb.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-lt.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-lv.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-mk.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ml.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ms.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-nb.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-nl-BE.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-nl.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-nn.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-no.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-pl.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-pt-BR.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-pt.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-rm.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ro.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ru.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-sk.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-sl.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-sq.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-sr-SR.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-sr.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-sv.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-ta.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-th.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-tj.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-tr.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-uk.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-vi.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-zh-CN.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-zh-HK.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/jqui-i18n/datepicker-zh-TW.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-main.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/js/sbm-security.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/LICENSE create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation/LICENSE.md create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation/dist/additional-methods.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation/dist/additional-methods.min.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation/dist/jquery.validate.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery/LICENSE.txt create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery/dist/jquery.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery/dist/jquery.min.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jquery/dist/jquery.min.map create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/images/ui-icons_444444_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/images/ui-icons_555555_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/images/ui-icons_777620_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/images/ui-icons_777777_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/images/ui-icons_cc0000_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.min.js create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.structure.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.structure.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/jquery-ui.theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/images/ui-icons_444444_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/images/ui-icons_555555_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/images/ui-icons_777620_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/images/ui-icons_777777_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/images/ui-icons_cc0000_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/base/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_diagonals-thick_8_333333_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_glass_40_111111_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_glass_55_1c1c1c_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_highlight-hard_40_aaaaaa_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_highlight-soft_50_aaaaaa_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_inset-hard_45_cd0a0a_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-bg_inset-hard_55_ffeb80_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_4ca300_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_bbbbbb_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_ededed_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_ffcf29_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/black-tie/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-icons_004276_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-icons_cc0000_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/blitzer/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_2694e8_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_2e83ff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_3d80b3_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_72a7cf_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/cupertino/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-bg_loop_25_000000_21x21.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_4b8e0b_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_a83300_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_cccccc_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dark-hive/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-medium_30_0b58a2_4x4.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-small_20_333333_2x2.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-small_30_a32d00_2x2.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_dots-small_40_00498f_2x2.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-bg_gloss-wave_20_111111_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_00498f_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_98d2fb_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_9ccdfc_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/dot-luv/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_734d99_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_8d78a5_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_a8a3ae_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_ebccce_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/eggplant/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_0a82eb_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_0b54d5_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_5fa5e3_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_fcdd4a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/excite-bike/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_0073ea_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_666666_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_ff0084_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/flick/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_40_db4865_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_93c3cd_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_ff3853_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_diagonals-small_75_ccd232_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_dots-medium_80_ffff38_4x4.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_dots-small_35_35414f_2x2.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-bg_white-lines_85_f7f7ba_40x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_88a206_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_c02669_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_e1e463_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_ffeb33_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/hot-sneaks/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_glass_25_cb842e_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_glass_70_ede4d4_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_c47a23_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_cb672b_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_f08000_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_f35f07_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_ff7519_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/humanity/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_diagonals-thick_15_444444_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_diagonals-thick_95_ffdc2e_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_glass_55_fbf5d0_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-hard_30_285c00_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-soft_33_3a8104_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-soft_50_4eb305_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_highlight-soft_60_4ca20b_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-bg_inset-soft_10_285c00_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_4eb305_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_72b42d_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/le-frog/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_9bcc60_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_add978_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_e3ddc9_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_f1fd86_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/mint-choc/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_glass_100_f8f8f8_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_glass_35_dddddd_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_glass_60_eeeeee_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_inset-hard_75_999999_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-bg_inset-soft_50_c9c9c9_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_3383bb_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_70b2e1_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_999999_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/images/ui-icons_fbc856_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/overcast/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_diagonal-maze_40_000000_10x10.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_10_f8f7f6_60x60.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_15_eceadf_60x60.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_15_f7f3de_60x60.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_65_654b24_60x60.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_3572ac_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_8c291d_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_b83400_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_fbdb93_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/pepper-grinder/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_217bc0_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_2e83ff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_469bdd_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_6da8d5_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_d8e7f3_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/images/ui-icons_f9bd01_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/redmond/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_454545_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_888888_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/smoothness/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_glass_55_fcf0ba_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_gloss-wave_100_ece8da_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_100_f5f3e5_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_100_fafaf4_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_15_459e00_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-hard_95_cccccc_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-soft_25_67b021_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_highlight-soft_95_ffedad_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-bg_inset-soft_15_2b2922_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_808080_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_847e71_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_8DC262_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_eeeeee_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/south-street/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-bg_glass_45_0078ae_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-bg_glass_55_f8da4e_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-bg_glass_75_79c9ec_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-bg_gloss-wave_75_2191c0_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-icons_0078ae_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-icons_056b93_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-icons_d8e7f3_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-icons_e0fdff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-icons_f5e175_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-icons_f7a50d_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/images/ui-icons_fcd113_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/start/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_diagonals-medium_20_d34d17_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_45_817865_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_60_fece2f_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_70_ffdd57_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_gloss-wave_90_fff9e5_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_highlight-soft_100_feeebd_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-bg_inset-soft_30_ffffff_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_3d3d3d_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_bd7b00_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_d19405_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_eb990f_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_ed9f26_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_fadc7a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/images/ui-icons_ffe180_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/sunny/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_070603_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_e8e2b5_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_e9cd86_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_efec9f_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_f2ec64_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_f9f2bd_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/images/ui-icons_ff7519_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/swanky-purse/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_diagonals-small_50_262626_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_glass_40_0a0a0a_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_glass_55_f1fbe5_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_glass_60_000000_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_gloss-wave_55_000000_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_gloss-wave_85_9fda58_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-bg_gloss-wave_95_f6ecd5_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_000000_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_1f1f1f_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_9fda58_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_b8ec79_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/trontastic/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_glass_20_555555_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_4b8e0b_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_a83300_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_cccccc_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-darkness/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/ui-lightness/theme.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_gloss-wave_16_121212_500x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-hard_15_888888_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-hard_55_555555_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-soft_35_adadad_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_highlight-soft_60_dddddd_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-bg_inset-soft_15_121212_1x100.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_666666_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_aaaaaa_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_bbbbbb_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_c98000_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_cccccc_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_cd0a0a_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/images/ui-icons_f29a00_256x240.png create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/jquery-ui.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/jquery-ui.min.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/theme.css create mode 100644 SaBusinessMgrCoreWebPortal/wwwroot/lib/jqueryui/themes/vader/theme.min.css diff --git a/BusinessMgr.sln b/BusinessMgr.sln index 4def401..2d39672 100644 --- a/BusinessMgr.sln +++ b/BusinessMgr.sln @@ -20,7 +20,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardAccounts", "..\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaBusMgrStandardDbas", "SaBusMgrStandardDbas\SaBusMgrStandardDbas.csproj", "{C1C4109F-D8A0-49CD-8715-A9956EEE8928}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaBusinessMgrCoreWebOnline", "SaBusinessMgrCoreWebOnline\SaBusinessMgrCoreWebOnline.csproj", "{00ED5C97-C659-49FF-8153-CF1859954714}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaBusMgrCoreProcs", "SaBusMgrCoreProcs\SaBusMgrCoreProcs.csproj", "{259265C1-98A9-4AFA-9ECA-612CA3D699A1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaBusMgrCoreWeb", "SaBusMgrCoreWeb\SaBusMgrCoreWeb.csproj", "{E9CB9C95-42E5-448D-8666-88B626422F4B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardProc", "..\..\Common-VS\Workspace\SacsStandardProc\SacsStandardProc.csproj", "{91A86CA2-15DF-432F-ACCB-BBF0AEEA2D11}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaBusinessMgrCoreWebControl", "SaBusinessMgrCoreWebControl\SaBusinessMgrCoreWebControl.csproj", "{EB0D8A3C-FF26-4086-84AA-597FA6DBA806}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaBusinessMgrCoreWebPortal", "SaBusinessMgrCoreWebPortal\SaBusinessMgrCoreWebPortal.csproj", "{C7BA3DCA-5A4E-4541-899C-BF8208E276D5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -52,10 +60,26 @@ Global {C1C4109F-D8A0-49CD-8715-A9956EEE8928}.Debug|Any CPU.Build.0 = Debug|Any CPU {C1C4109F-D8A0-49CD-8715-A9956EEE8928}.Release|Any CPU.ActiveCfg = Release|Any CPU {C1C4109F-D8A0-49CD-8715-A9956EEE8928}.Release|Any CPU.Build.0 = Release|Any CPU - {00ED5C97-C659-49FF-8153-CF1859954714}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00ED5C97-C659-49FF-8153-CF1859954714}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00ED5C97-C659-49FF-8153-CF1859954714}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00ED5C97-C659-49FF-8153-CF1859954714}.Release|Any CPU.Build.0 = Release|Any CPU + {259265C1-98A9-4AFA-9ECA-612CA3D699A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {259265C1-98A9-4AFA-9ECA-612CA3D699A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {259265C1-98A9-4AFA-9ECA-612CA3D699A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {259265C1-98A9-4AFA-9ECA-612CA3D699A1}.Release|Any CPU.Build.0 = Release|Any CPU + {E9CB9C95-42E5-448D-8666-88B626422F4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9CB9C95-42E5-448D-8666-88B626422F4B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9CB9C95-42E5-448D-8666-88B626422F4B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9CB9C95-42E5-448D-8666-88B626422F4B}.Release|Any CPU.Build.0 = Release|Any CPU + {91A86CA2-15DF-432F-ACCB-BBF0AEEA2D11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91A86CA2-15DF-432F-ACCB-BBF0AEEA2D11}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91A86CA2-15DF-432F-ACCB-BBF0AEEA2D11}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91A86CA2-15DF-432F-ACCB-BBF0AEEA2D11}.Release|Any CPU.Build.0 = Release|Any CPU + {EB0D8A3C-FF26-4086-84AA-597FA6DBA806}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB0D8A3C-FF26-4086-84AA-597FA6DBA806}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB0D8A3C-FF26-4086-84AA-597FA6DBA806}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB0D8A3C-FF26-4086-84AA-597FA6DBA806}.Release|Any CPU.Build.0 = Release|Any CPU + {C7BA3DCA-5A4E-4541-899C-BF8208E276D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7BA3DCA-5A4E-4541-899C-BF8208E276D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7BA3DCA-5A4E-4541-899C-BF8208E276D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7BA3DCA-5A4E-4541-899C-BF8208E276D5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs b/SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs new file mode 100644 index 0000000..fd4e39a --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Consoles/SbmProcessConsole.cs @@ -0,0 +1,237 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Core.Procs.Interfaces; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.Procs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Sarand.Net.Standard.Base.Utils; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Consoles +{ + //======================================================================= + public class SbmProcessConsole + { + //------------------------------------------------------------------- + // I n t e r f a c e O p t i o n D e f i n i t i o n s + //------------------------------------------------------------------- + public static List GetInterfaceItemOptionDfns(SbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType) + { + switch (interfaceCategory) + { + case SaInterfaceCategory.Website: + { + break; + } + case SaInterfaceCategory.Accounts: + { + return new SbmAccountsDfn(userContext).GetInterfaceItemOptionDfns((Sbm.InterfaceType_Accounts)interfaceType); + } + case SaInterfaceCategory.System: + { + //if (interfaceType == (int)Sbm.InterfaceType_System.MSOutlook) + //return SbmInterface_System_MSOutlook.GetInterfaceItemOptionDfns(); + break; + } + case SaInterfaceCategory.File: + { + if (interfaceType == (short)Sbm.InterfaceType_File.CommodityExport) + { + SbmInterfaceProcess_Commodity_Export.Config processConfig = new SbmInterfaceProcess_Commodity_Export.Config(userContext); + SbmInterfaceProcess_Commodity_Export process = new SbmInterfaceProcess_Commodity_Export(processConfig); + return process.GetInterfaceItemOptionDfns(); + } + break; + } + } + return new List(); + } + + //------------------------------------------------------------------- + // P r o c e s s i n g O p t i o n s + //------------------------------------------------------------------- + public static List GetProcessingOptions(SbmUserContext userContext, SaInterface interfaceObj) + { + if (interfaceObj == null || !SysId.IsValid(interfaceObj.Id)) return new List(); + List optionGroups = null; + switch (interfaceObj.Category) + { + case SaInterfaceCategory.System: + { + break; + } + case SaInterfaceCategory.Website: + { + break; + } + case SaInterfaceCategory.Accounts: + { + break; + } + case SaInterfaceCategory.File: + { + if (interfaceObj.Type == (short)Sbm.InterfaceType_File.CommodityExport) + optionGroups = SbmInterfaceProcess_Commodity_Export.GetProcessingOptions(userContext, interfaceObj); + break; + } + } + return optionGroups ?? new List(); + } + + //------------------------------------------------------------------- + // C o n f i g u r e P r o c e s s + //------------------------------------------------------------------- + public static SbmInterfaceProcess ConfigureProcess(SbmUserContext userContext, SaInterface interfaceObj, SaProcess_Base.GroupData processGroup) + { + if (interfaceObj == null || !SysId.IsValid(interfaceObj.Id)) return null; + switch (interfaceObj.Category) + { + case SaInterfaceCategory.System: + { + break; + } + case SaInterfaceCategory.Website: + { + break; + } + case SaInterfaceCategory.Accounts: + { + break; + } + case SaInterfaceCategory.File: + { + if (interfaceObj.Type == (short)Sbm.InterfaceType_File.CommodityExport) + return SbmInterfaceProcess_Commodity_Export.ConfigureProcess(userContext, interfaceObj, processGroup); + break; + } + } + return null; + } + + //------------------------------------------------------------------- + // P r o c e s s I n t e r f a c e + //------------------------------------------------------------------- + public static bool ProcessInterface(SbmUserContext userContext, SaInterface interfaceObj) + { + if (interfaceObj == null || !SysId.IsValid(interfaceObj.Id)) return false; + switch (interfaceObj.Category) + { + case SaInterfaceCategory.System: + { + break; + } + case SaInterfaceCategory.Website: + { + break; + } + case SaInterfaceCategory.Accounts: + { + break; + } + case SaInterfaceCategory.File: + { + break; + } + } + return false; + } + + //------------------------------------------------------------------- + // I n v o k e P r o c e s s D e f i n i t i o n + //------------------------------------------------------------------- + // Invoke process based on definition from command line argument. + public static bool InvokeProcessDefinition(SbmUserContext userContext, SacsProcessDefinition processDfn) + { + //---------------------------------------------------------------- + // Log process definition. + SaLogger.Info("Running process: " + processDfn.ProcessName + "." + (processDfn.Params.Count > 0 ? " Params: " + processDfn.Params.Concat() : ""), true); + SbmProcessConsole_Notifier processNotifier = new SbmProcessConsole_Notifier(); + + //---------------------------------------------------------------- + // Hapag-Lloyd EDI. + if (processDfn.ProcessName.EqualsCI("ApplicationParameterName...")) + { + String caption = "System Interface ..."; + SaInterface saInterface = GetSystemInterfaceByType(userContext, (short)Sbm.InterfaceType_System.MSOutlook, caption); + if (saInterface != null) + { + /* + SbmInterface_System_HapagLloyd_Import.Config configInterface = new SbmInterface_System_HapagLloyd_Import.Config(dbUpdateInfo); + configInterface.InterfaceId = saInterface.Id; + configInterface.ImportNotifications = true; + configInterface.Automated = true; + SbmInterface_System_HapagLloyd_Import process = new SbmInterface_System_HapagLloyd_Import(configInterface); + process.ProcessNotifier = processNotifier; + process.RunProcess(); + if (process.HasProcessError()) + SaLogger.Warn(caption + " reported: " + process.GetProcessError(), true); + else if (process.IsInterrupted) + SaLogger.Warn(caption + " interrupted - processing may be incomplete.", true); + else + SaLogger.Info(caption + " run successfully", true); + */ + } + } + + //---------------------------------------------------------------- + return false; + } + + //------------------------------------------------------------------- + // Retrieve interface. + private static SaInterface GetSystemInterfaceByType(SbmUserContext userContext, short interfaceType, String caption) + { + return GetInterfaceByCategoryType(userContext, SaInterfaceCategory.System, interfaceType, caption); + } + private static SaInterface GetInterfaceByCategoryType(SbmUserContext userContext, SaInterfaceCategory interfaceCategory, short interfaceType, String caption) + { + SaInterface saInterface = null; + SaInterface.Params prmInterface = new SaInterface.Params(); + prmInterface.InterfaceCategory = interfaceCategory; + prmInterface.IncludedInterfaceTypes.Add(interfaceType); + prmInterface.StatusCat = SaInterface.StatusCat.Any; + using (SaInterfaceConsole interfaceConsole = SbmGlobals.Application.CreateInterfaceConsole(userContext)) + { + saInterface = interfaceConsole.GetInterface(prmInterface); + if (saInterface == null) + { + SaLogger.Warn("Unable to run " + caption + " - Interface not found", true); + return null; + } + if (!saInterface.Active) + { + SaLogger.Warn("Unable to run " + caption + " - Interface is not active", true); + return null; + } + } + return saInterface; + } + + //------------------------------------------------------------------- + } + //======================================================================= + /// + /// Process Notificer for Process Console. + /// + class SbmProcessConsole_Notifier : ISacsProcessNotifier + { + public void OnStartProcess() + { + } + public void OnEndProcess() + { + } + public void SetProgressInfo(List progressInfo) + { + } + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs new file mode 100644 index 0000000..afb1d23 --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess.cs @@ -0,0 +1,271 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Core.Procs.Procs; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.IO; +using Sarand.Net.Standard.Base.ItemOptions; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; +using Sarand.Net.Standard.Base.Utils; +using System.IO; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces +{ + //======================================================================= + public abstract class SbmInterfaceProcess : SbmProcess_Base + { + //------------------------------------------------------------------- + // Configuration. + public enum InterfaceProcessCreation + { + None, + OnStartProcessing, + OnLogMessage, + } + public new class Config : SbmProcess_Base.Config + { + protected Config (SbmUserContext userContext) : base(userContext) + { + } + public SysId InterfaceId { get; set; } + public List ItemIds { get; } = new List(); + public InterfaceProcessCreation InterfaceProcessCreation { get; set; } = InterfaceProcessCreation.OnLogMessage; + } + + //------------------------------------------------------------------- + // Definitions. + /// Interface processing groups - used for popup 'Process Interface' form. + public enum InterfaceProcessGroup + { + Import, + Export, + } + /// Interface configuration parameters. + public class InterfaceParams : SbmProcess_Base.ProcessParams + { + } + /// Process parameters - processing control properties. + public new class ProcessParams : SbmProcess_Base.ProcessParams + { + } + + //------------------------------------------------------------------- + // Data members. + private Config config = null; + private static List interfaceProcessGroups = null; + private SaInterface interfaceObj = null; + private SaInterfaceProcess interfaceProcess = null; + + //------------------------------------------------------------------- + // Static initialisation. + static SbmInterfaceProcess () + { + // Interface process groups. + interfaceProcessGroups = new List(); + interfaceProcessGroups.Add(InterfaceProcessGroup.Import, "Import", "Import"); + interfaceProcessGroups.Add(InterfaceProcessGroup.Export, "Export", "Export"); + } + + //------------------------------------------------------------------- + // Construction. + protected SbmInterfaceProcess (Config config) : base(config) + { + this.config = config; + interfaceObj = InterfaceConsole.GetInterfaceById(config.InterfaceId); + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + if (interfaceProcess != null) interfaceProcess.Dispose(); interfaceProcess = null; + if (interfaceObj != null) interfaceObj.Dispose(); interfaceObj = null; + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected String InterfaceCaptionSuffix { get; set; } = " [Interface]"; + protected static List InterfaceProcessGroups { get { return new List(interfaceProcessGroups); } } + protected SaInterface Interface { get { return interfaceObj; } } + + //------------------------------------------------------------------- + // Validate configuration. + protected virtual bool ValidateConfig () + { + return OK; + } + + //------------------------------------------------------------------- + // P r o c e s s i n g + //------------------------------------------------------------------- + protected override void ResetProcess () + { + base.ResetProcess(); + } + + //------------------------------------------------------------------- + // I t e m O p t i o n D e f i n i t i o n s + //------------------------------------------------------------------- + protected static SaItemOptionDfn InitItemOptionDfn (String itemOptionName, String itemOptionCaption, List optionContexts = null) + { + SaItemOptionDfn itemOptionDfn = new SaItemOptionDfn(); + itemOptionDfn.Name = itemOptionName; + itemOptionDfn.DisplayOptions.Caption = itemOptionCaption; + if (optionContexts != null) + { + itemOptionDfn.DisplayOptions.Contexts.AddRange(optionContexts); + itemOptionDfn.DisplayOptions.RequiresContext = true; + } + itemOptionDfn.DisplayOptions.NonDisplayTemplate = true; + itemOptionDfn.DisplayOptions.CanAddOption = true; + itemOptionDfn.DisplayOptions.CanRemoveOption = true; + return itemOptionDfn; + } + + //------------------------------------------------------------------- + // P r o c e s s i n g E v e n t s + //------------------------------------------------------------------- + protected override void OnProcessStarting () + { + base.OnProcessStarting(); + if (config.InterfaceProcessCreation == InterfaceProcessCreation.OnStartProcessing) + OpenInterfaceProcess(); + } + protected override void OnProcessEnding () + { + CloseInterfaceProcess(); + base.OnProcessEnding(); + } + + //------------------------------------------------------------------- + // I n t e r f a c e P r o c e s s + //------------------------------------------------------------------- + private bool OpenInterfaceProcess () + { + if (!SysId.IsValid(config.InterfaceId)) return false; + + // Check if interface process already created. + if (interfaceProcess != null && interfaceProcess.InterfaceId.Equals(config.InterfaceId)) return true; + + // Create interface process. + SaInterfaceProcessDirection processDirection = SaInterfaceProcessDirection.Inbound; + if (config.Export) processDirection = SaInterfaceProcessDirection.Outbound; + int processSequence = (InterfaceConsole.GetMaxProcessSequence(config.InterfaceId, processDirection, false) + 1); + interfaceProcess = InterfaceConsole.StartInterfaceProcess(config.InterfaceId, processDirection, DateUtil.Format(StartedAt, "yyyyMMddHHmmss"), StartedAt, processSequence, DbUpdateInfo); + + return (interfaceProcess != null && interfaceProcess.InterfaceId.Equals(config.InterfaceId)); + } + private bool CloseInterfaceProcess () + { + if (interfaceProcess == null) return false; + + interfaceProcess.ElapseSecs = ElapsedSecs; + if (OK) + { + interfaceProcess.Status = SaStatus.Completed; + LogInterfaceProcessMessage("Processing completed successfully"); + } + else + { + // Process has not completed. + interfaceProcess.Status = SaStatus.Cancelled; + if (HasProcessError()) LogInterfaceProcessMessage(GetProcessError(), SaMessageLevel.Error); + if (IsInterrupted) LogInterfaceProcessMessage("Processing cancelled by user", SaMessageLevel.Warning); + } + if (InterfaceConsole.StoreInterfaceProcess(interfaceProcess, DbUpdateInfo)) + { } + else if (!HasProcessError()) + SetProcessError("Failed to store interface process: " + InterfaceConsole.ErrorStateMessage); + + // Clean-up. + interfaceProcess.Dispose(); + interfaceProcess = null; + + return true; + } + + //------------------------------------------------------------------- + protected bool LogInterfaceProcessMessage (String message, SaMessageLevel messageLevel = SaMessageLevel.Info) + { + if (!OpenInterfaceProcess()) return false; + + // Log interface process message. + InterfaceConsole.LogInterfaceProcessMessage(interfaceProcess.Id, DbUpdateInfo, message, messageLevel); + + // Errors and warnings wil retunr false. + return (messageLevel == SaMessageLevel.Info || messageLevel == SaMessageLevel.Debug || messageLevel == SaMessageLevel.Trace); + } + + //------------------------------------------------------------------- + // I n t e r f a c e D a t a I t e m s + //------------------------------------------------------------------- + protected bool StoreInterfaceDataItem (SaInterfaceDataItem interfaceDataItem, SaStatus processStatus, SaStatus itemStatus, String itemCaption) + { + if (!OK) return false; + DateTime now = DateTime.Now; + + // Process status. + if ((int)processStatus > 0) + { + interfaceDataItem.ProcessStatus = processStatus; + interfaceDataItem.ProcessStatusAt = now; + interfaceDataItem.ProcessStatusBy = DbUpdateInfo.UserId; + } + + // Item status. + if ((int)itemStatus > 0) + { + interfaceDataItem.ItemStatus = itemStatus; + interfaceDataItem.ItemStatusAt = now; + interfaceDataItem.ItemStatusBy = DbUpdateInfo.UserId; + } + + // Store interface data item. + if (!InterfaceConsole.StoreInterfaceDataItem(interfaceDataItem, DbUpdateInfo)) + SetProcessError("Failed to save Interface data item" + (!StringUtil.IsEmpty(itemCaption) ? " for " + itemCaption : "") + " - " + InterfaceConsole.ErrorStateMessage); + + return OK; + } + + //------------------------------------------------------------------- + // A r c h i v e F i l e + //------------------------------------------------------------------- + protected bool SaveFileDataToArchive (String archiveRootFolder, String fileName, String fileExtension, String fileData, String fn) + { + if (!OK) return false; + + DateTime today = DateTime.Today; + String archiveFolder = + archiveRootFolder.TrimEnd(new char[] { Path.DirectorySeparatorChar }) + Path.DirectorySeparatorChar + + DateUtil.Format(today, "yyyy") + Path.DirectorySeparatorChar + + DateUtil.Format(today, "yyyyMM"); + SaLogger.Debug(fn + " Archive folder: " + archiveFolder); + if (FileUtil.ValidateDirectory(archiveFolder, true)) + { + for (int fileIdx = 0; fileIdx < 10000; fileIdx++) + { + String archiveFilename = fileName + (fileIdx > 0 ? "." + StringUtil.PadLeft(fileIdx.ToString(), 4, '0') : "") + (!StringUtil.IsEmpty(fileExtension) ? "." + fileExtension : ""); + String archivePath = archiveFolder + Path.DirectorySeparatorChar + archiveFilename; + SaLogger.Debug(fn + " Archive path: " + archivePath); + if (!FileUtil.IsFile(archivePath)) + { + File.WriteAllText(archivePath, fileData); + break; + } + } + } + else return LogInterfaceProcessMessage("Failed to validate archive folder '" + archiveFolder + "'.", SaMessageLevel.Warning); + + return OK; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs new file mode 100644 index 0000000..c652eb7 --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Interfaces/SbmInterfaceProcess_Commodity_Export.cs @@ -0,0 +1,1105 @@ + +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.IO; +using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.Procs; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Sarand.Net.Standard.Proc.Excel; +using Sarand.Net.Standard.Base.Data; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Interfaces +{ + //======================================================================= + public class SbmInterfaceProcess_Commodity_Export : SbmInterfaceProcess + { + //------------------------------------------------------------------- + // Configuration. + public new class Config : SbmInterfaceProcess.Config + { + public Config (SbmUserContext userContext) : base(userContext) + { + ItemType = Sbm.ItemType.Commodity; + ProcessType = ProcessType.ExportData; + InterfaceProcessCreation = InterfaceProcessCreation.OnStartProcessing; + } + public bool ExportCommodities { get; set; } + public SbmCommodity.Params CommodityParams { get; set; } + } + + //------------------------------------------------------------------- + // Definitions. + private enum OptionContext_Value + { + None = 0, + OutputFolder = 1, + FirstDataRow, + MarginLeftCm, + MarginRightCm, + MarginTopCm, + MarginBottomCm, + MarginHeaderCm, + MarginFooterCm, + DataRowHeightCm, + Font_Name, + Font_Size_Header, + Font_Size_Data, + BackgroundColour_Header, + }; + private enum OptionContext_Flag + { + None = 0, + IncludeColumnHeadings = 1, + }; + /// Interface configuration parameters. + public new class InterfaceParams + { + public Sbm.FileInterface_Mode ExportMode { get; set; } = Sbm.FileInterface_Mode.Unknown; + public String OutputFolder { get; set; } = ""; + public uint FirstDataRow { get; set; } = 1; + public uint FirstDataColumn { get; set; } = 1; + public double MarginLeftCm { get; set; } = 0.0; + public double MarginRightCm { get; set; } = 0.0; + public double MarginTopCm { get; set; } = 0.0; + public double MarginBottomCm { get; set; } = 0.0; + public double MarginHeaderCm { get; set; } = 0.0; + public double MarginFooterCm { get; set; } = 0.0; + public double DataRowHeightCm { get; set; } = 0.0; + public String Font_Name { get; set; } = ""; + public short Font_Size_Header { get; set; } = 0; + public short Font_Size_Data { get; set; } = 0; + public int BackgroundColour_Header { get; set; } = -1; + public bool IncludeColumnHeadings { get; set; } = false; + public List Columns { get; } = new List(); + } + /// Process parameters - processing control properties + public new class ProcessParams : SbmInterfaceProcess.ProcessParams + { + public long CommodityCountTotal { get; set; } = -1; + public bool CommodityProcessesExist { get; set; } = false; + public uint HomeColumn { get; set; } = 1; + public uint HomeRow { get; set; } = 1; + public uint FreezeColumn { get; set; } = 0; + public uint HeaderCaptionRow { get; set; } = 1; + public uint FirstDataRow { get; set; } = 2; + public uint FirstDataColumn { get; set; } = 1; + public uint ItemBeingExported { get; set; } = 0; + } + /// Processing statistics - keep track of number of items actioned. + public enum ProcessingStatistic + { + CommoditiesExported, + } + + //------------------------------------------------------------------- + // Data members. + private Config config = null; + private InterfaceParams interfaceParams = null; + private static int kiMaxDataColumn = 99; + private List interfaceOptions; + private List optionContexts_Value; + private List optionContexts_Flag; + private List optionContexts_Column; + private List optionValues_Column; + private List optionValues_Mode; + + //------------------------------------------------------------------- + // Construction. + public SbmInterfaceProcess_Commodity_Export (Config config) : base(config) + { + this.config = config; + interfaceOptions = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.InterfaceOption); + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected ProcessParams Params { get; } = new ProcessParams(); + public override string ProcessDescription { get { return StringUtil.OnEmpty(Interface?.Caption ?? "", "Commodity Export") + InterfaceCaptionSuffix; } } + public override List ProcessComments + { + get + { + List processComments = new List(); + CalculateItemCount(); + processComments.Add("Commodities to export: " + Params.CommodityCountTotal); + processComments.AddRange(GetParams().GetDisplayValues(UserContext).Concat("=")); + processComments.AddRange(base.ProcessComments); + return processComments; + } + } + /// Processing statistics. + public override List ProcessingStatistics + { + get + { + List stats = new List(); + if (GetStatistic(ProcessingStatistic.CommoditiesExported) > 0) stats.Add("Commodities exported", GetStatistic(ProcessingStatistic.CommoditiesExported).ToString()); + return stats; + } + } + + //------------------------------------------------------------------- + // Utilities. + private void CalculateItemCount () + { + if (Params.CommodityCountTotal >= 0 || !OK) return; + Params.CommodityCountTotal = CommodityMgr.GetCommodityCount(GetParams()); + } + + //------------------------------------------------------------------- + // I n t e r f a c e P a r a m e t e r s + //------------------------------------------------------------------- + private bool PopulateInterfaceParams () + { + interfaceParams = new InterfaceParams(); + + // Retrieve interface options. + InitOptionDefinitions(); + List processOptions = ItemOptionConsole.GetItemOptionsForItem(new ItemId((short)Sbm.ItemType.Interface, config.InterfaceId)); + SetProcessingOptions(processOptions); + + // Interface option codes. + String optionName_Value = interfaceOptions.GetCodeForType(Sbm.InterfaceOption.Value); + String optionName_Flag = interfaceOptions.GetCodeForType(Sbm.InterfaceOption.Flag); + String optionName_Mode = interfaceOptions.GetCodeForType(Sbm.InterfaceOption.Mode); + String optionName_Column = interfaceOptions.GetCodeForType(Sbm.InterfaceOption.File_ItemColumn); + + // Discrete values. + interfaceParams.ExportMode = (Sbm.FileInterface_Mode)optionValues_Mode.GetTypeForCode(processOptions.GetOptionValue(optionName_Mode, "")); + interfaceParams.OutputFolder = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.OutputFolder)); + interfaceParams.FirstDataRow = (uint)Math.Max(1, processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.FirstDataRow)).ToLong()); + interfaceParams.MarginLeftCm = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.MarginLeftCm)).ToDouble(); + interfaceParams.MarginRightCm = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.MarginRightCm)).ToDouble(); + interfaceParams.MarginTopCm = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.MarginTopCm)).ToDouble(); + interfaceParams.MarginBottomCm = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.MarginBottomCm)).ToDouble(); + interfaceParams.MarginHeaderCm = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.MarginHeaderCm)).ToDouble(); + interfaceParams.MarginFooterCm = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.MarginFooterCm)).ToDouble(); + interfaceParams.DataRowHeightCm = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.DataRowHeightCm)).ToDouble(); + interfaceParams.Font_Name = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.Font_Name)); + interfaceParams.Font_Size_Header = (short)processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.Font_Size_Header)).ToLong(); + interfaceParams.Font_Size_Data = (short)processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.Font_Size_Data)).ToLong(); + + // Font defaults. + if (interfaceParams.Font_Name.IsEmpty()) interfaceParams.Font_Name = "Arial"; + if (interfaceParams.Font_Size_Header < 6 || interfaceParams.Font_Size_Header > 20) interfaceParams.Font_Size_Header = 9; + if (interfaceParams.Font_Size_Data < 6 || interfaceParams.Font_Size_Data > 20) interfaceParams.Font_Size_Data = 8; + + // Header background colour: + String backgroundColour_Header = processOptions.GetOptionValue(optionName_Value, optionContexts_Value.GetCodeForType(OptionContext_Value.BackgroundColour_Header)); + if (!StringUtil.IsEmpty(backgroundColour_Header)) + { + if (StringUtil.IsNumeric(backgroundColour_Header)) + interfaceParams.BackgroundColour_Header = StringUtil.ToInt(backgroundColour_Header); + else if (backgroundColour_Header.Length == 7 && backgroundColour_Header.Left(1) == "#" && StringUtil.IsHex(backgroundColour_Header.Right(6))) + { + // HTML colour code (#hhhhhh): + interfaceParams.BackgroundColour_Header = + (StringUtil.ToHex(backgroundColour_Header[5], backgroundColour_Header[6]) * 256 * 256) + + (StringUtil.ToHex(backgroundColour_Header[3], backgroundColour_Header[4]) * 256) + + StringUtil.ToHex(backgroundColour_Header[1], backgroundColour_Header[2]); + } + } + + // Flags. + interfaceParams.IncludeColumnHeadings = processOptions.GetOptionValue(optionName_Flag, optionContexts_Flag.GetCodeForType(OptionContext_Flag.IncludeColumnHeadings)).ToBool(); + + // Columns. + ColumnDfn columnNull = new ColumnDfn(-1, ""); + int previousColumnPos = 0; + foreach (SaItemOption columnOption in processOptions.FindAll(item => item.Name.EqualsCI(optionName_Column)).OrderBy(item => StringUtil.ToInt(item.Context))) + { + int columnPos = StringUtil.ToInt(columnOption.Context); + SbmCommodity.Column eCol = (SbmCommodity.Column)optionValues_Column.GetTypeForCode(columnOption.Value); + if (columnPos <= previousColumnPos) + return SetProcessError("Out of sequence column found in configuration: '" + columnOption.Value + "' for column '" + columnOption.Context + "'"); + if (columnPos > 0 && columnPos <= kiMaxDataColumn) + { + ColumnDfn col = CommodityMgr.GetCommodityColumnDfn(eCol); + if (col.Id > 0) + { + // Add columns up to the current position. + while (interfaceParams.Columns.Count < columnPos) + interfaceParams.Columns.Add(columnNull); + interfaceParams.Columns[columnPos - 1] = col; + } + else return SetProcessError("Invalid field specified in configuration: '" + columnOption.Value + "' for column '" + columnOption.Context + "'"); + } + else return SetProcessError("Invalid column specified in configuration: '" + columnOption.Value + "'"); + } + return true; + } + + //------------------------------------------------------------------- + // P r o c e s s i n g + //------------------------------------------------------------------- + protected override bool Run () + { + SetProgress("Preparing to export commodities."); + SaLogger.Info("Process: " + ProcessDescription); + if (!ValidateConfig()) return false; + ResetProcess(); + if (!StringUtil.IsEmpty(interfaceParams.OutputFolder)) LogInterfaceProcessMessage("Export folder: " + interfaceParams.OutputFolder); + + // Run process. + Params.ItemBeingExported = 0; + if (interfaceParams.ExportMode == Sbm.FileInterface_Mode.Csv) + ExportCommodityData_Csv(); + else if (interfaceParams.ExportMode == Sbm.FileInterface_Mode.MsExcel) + ExportCommodityData_Excel(); + else return SetProcessError("Invalid Commodity export mode: " + interfaceParams.ExportMode.ToString()); + + // Log statistics. + int commoditiesExported = GetStatistic(ProcessingStatistic.CommoditiesExported); + if (commoditiesExported > 0) LogInterfaceProcessMessage("Commodites exported: " + commoditiesExported.ToString()); + + return !HasProcessError(); + } + + //------------------------------------------------------------------- + protected override void ResetProcess () + { + base.ResetProcess(); + + // Reset parameters. + Params.FirstDataRow = Math.Max(1, interfaceParams.FirstDataRow); + Params.FirstDataColumn = Math.Max(1, interfaceParams.FirstDataColumn); + Params.HomeColumn = 1; + Params.HomeRow = Params.FirstDataRow; + Params.FreezeColumn = 0; + } + + //------------------------------------------------------------------- + protected override bool ValidateConfig () + { + if (!base.ValidateConfig()) return false; + + // Configuration: + if (!SysId.IsValid(config.InterfaceId)) return SetProcessError("Interface Id must be supplied."); + if (!config.ExportCommodities) return SetProcessError("No processing options selected."); + + // Processing parameters. + if (!PopulateInterfaceParams()) return false; + if (interfaceParams.ExportMode <= 0) return SetProcessError("Invalid export mode specified."); + if (interfaceParams.ExportMode == Sbm.FileInterface_Mode.Csv && StringUtil.IsEmpty(interfaceParams.OutputFolder)) + return SetProcessError("Output folder must be specified for 'CSV' mode."); + + if (interfaceParams.FirstDataRow < 1 || interfaceParams.FirstDataRow > 100) + return SetProcessError("Invalid first data row (" + (interfaceParams.FirstDataRow) + ")"); + + // Validate the output folder. + if (!StringUtil.IsEmpty(interfaceParams.OutputFolder) && !DirectoryUtil.DirectoryExists(interfaceParams.OutputFolder)) + return SetProcessError("Invalid export folder specified - " + interfaceParams.OutputFolder); + + if (interfaceParams.Columns.Count < 1) + return SetProcessError("At least one data column must be specified"); + + return OK; + } + + //------------------------------------------------------------------- + /// Construct the commodity filter parameters. + public SbmCommodity.Params GetParams () + { + SbmCommodity.Params prmCommodity = config.CommodityParams ?? new SbmCommodity.Params(); + prmCommodity.IncludedIds.AddRange(config.ItemIds); + return prmCommodity; + } + private DbResultSet ExecuteQuery () + { + if (!OK) return null; + + // Duplicate the columns to be output so that additional + // fields can be added to the query if necessary: + List queryColumns = new List(interfaceParams.Columns); + if (!queryColumns.HasId(SbmCommodity.Column.Id)) queryColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Id)); + if (!queryColumns.HasId(SbmCommodity.Column.Code)) queryColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Code)); + // Query data. + SbmCommodity.Params prmCommodity =GetParams(); + DbResultSet resultSet = CommodityMgr.ExecuteCommodityQuery(queryColumns, prmCommodity); + if (resultSet == null) SetProcessError("Failed to query data - " + CommodityMgr.ErrorStateMessage); + return resultSet; + } + private DataValue GetDataValue (ColumnDfn column, NamedValue.Map values) + { + DataValue value = new DataValue(); + SbmCommodity.Column columnId = (SbmCommodity.Column)column.Id; + switch (columnId) + { + case SbmCommodity.Column.Pos: + value = new DataValue(Params.ItemBeingExported.ToString() + "."); + break; + case SbmCommodity.Column.Notes: + // Avoid truncating the notes. + break; + default: + value = CommodityMgr.GetCommodityDataValue(column, values); + break; + } + if (!value.IsValid()) + value = new DataValue(column.FormatValue(values)); + return value; + } + + //------------------------------------------------------------------- + // E x p o r t T o C S V + //------------------------------------------------------------------- + private bool ExportCommodityData_Csv () + { + String fn = this.GetFn("ExportCommodityData_Csv"); + if (!OK) return false; + + String progressPrefix = "Exporting data to CSV file"; + SetProgress(progressPrefix); + + try + { + // Progress is refreshed every few rows. + Params.CommodityCountTotal = CommodityMgr.GetCommodityCount(GetParams()); + int progressRefreshRows = (int)Math.Max(5,Params.CommodityCountTotal/(Params.CommodityCountTotal>1000?1000:100)); + + // Open the output file. + String sFilename = FileUtil.FormatFilename("SaBusMgr_CommodityExport_" + DateUtil.Format(DateTime.Now,"yyyyMMddHHmmss") + ".csv"); + String sOutputPath = interfaceParams.OutputFolder + FileUtil.GetPathDelim(interfaceParams.OutputFolder) + sFilename; + using (StreamWriter textWriter = new StreamWriter(sFilename, false)) + { + // Skip to first data row. + for (int i = 1; i < interfaceParams.FirstDataRow; i++) textWriter.WriteLine(); + // Column headings. + if (OK && interfaceParams.IncludeColumnHeadings) + textWriter.WriteLine(SacsCsvHandler.ToCsv(interfaceParams.Columns.GetCaptions())); + // Query data. + SetProgress(progressPrefix + "\nQuerying data"); + using (DbResultSet resultSet = ExecuteQuery()) + { + if (resultSet.HasErrorState()) return SetProcessError(resultSet.ErrorState.Message); + if (resultSet == null) return SetProcessError("Failed to query commodity data"); + while (OK && resultSet != null && resultSet.NextRecord()) + { + Params.ItemBeingExported++; + if (Params.ItemBeingExported % progressRefreshRows == 0 || Params.ItemBeingExported == 1) + SetProgress(progressPrefix); + NamedValue.Map values = resultSet.GetRecordValues(); + + // Extract and format each of the data values. + List dataValues = new List(); + foreach (ColumnDfn columnDfn in interfaceParams.Columns) + { + dataValues.Add(columnDfn.FormatValue(GetDataValue(columnDfn, values))); + } + String sRec = SacsCsvHandler.ToCsv(dataValues); + textWriter.WriteLine(sRec); + IncrementStatistic(ProcessingStatistic.CommoditiesExported); + } + } + textWriter.Close(); + } + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + ExceptionUtil.GetLogMessage(exc)); + return SetProcessError(ExceptionUtil.GetErrorStateMessage(exc)); + } + return OK; + } + + //------------------------------------------------------------------- + // E x p o r t T o E x c e l + //------------------------------------------------------------------- + private bool ExportCommodityData_Excel () + { + String fn = this.GetFn("ExportCommodityData_Excel"); + if (!OK) return false; + + String progressPrefix = "Exporting data to Excel"; + SetProgress(progressPrefix + "\nPreparing spreadsheet"); + + // Open Excel workbook. + try + { + using (SaMsSpreadsheet spreadsheet = new SaMsSpreadsheet_POI()) + { + spreadsheet.CreateWorkbook(); + spreadsheet.SetWorksheetCount(1); + OpenWorkSheet(spreadsheet, 1, "Commodities"); + + SaMsExcelItemAttr attrSheet = new SaMsExcelItemAttr(); + attrSheet.FontName = interfaceParams.Font_Name; + attrSheet.FontSize = interfaceParams.Font_Size_Data; + spreadsheet.SetWorksheetAttr(attrSheet); + + // Margins. + SaMsExcelPageSetup_Config cfgPageSetup = new SaMsExcelPageSetup_Config(); + cfgPageSetup.Unit = SaExcelLogicalUnit.Cm; + cfgPageSetup.MarginLeft = interfaceParams.MarginLeftCm; + cfgPageSetup.MarginRight = interfaceParams.MarginRightCm; + cfgPageSetup.MarginTop = interfaceParams.MarginTopCm; + cfgPageSetup.MarginBottom = interfaceParams.MarginBottomCm; + cfgPageSetup.MarginHeader = interfaceParams.MarginHeaderCm; + cfgPageSetup.MarginFooter = interfaceParams.MarginFooterCm; + spreadsheet.SetPageSetup(cfgPageSetup); + + // Column headings. + if (OK && interfaceParams.IncludeColumnHeadings) + { + SetProgress(progressPrefix + "\nPopulating column headers"); + SaMsExcelColumnHeading_Config cfgHeadings = new SaMsExcelColumnHeading_Config(); + cfgHeadings.HeadingFontSize = interfaceParams.Font_Size_Header; + cfgHeadings.FirstHeadingRow = Params.FirstDataRow; + int colPos_Code = interfaceParams.Columns.GetPosForId(SbmCommodity.Column.Code); + if (colPos_Code > 0) + Params.FreezeColumn = (uint)(colPos_Code + Params.FirstDataColumn); + cfgHeadings.FreezeColumn = Params.FreezeColumn; + if (interfaceParams.BackgroundColour_Header != -1) + cfgHeadings.InteriorColour = interfaceParams.BackgroundColour_Header; + spreadsheet.SetColumnHeadings(interfaceParams.Columns, cfgHeadings); + Params.FirstDataRow++; + } + Params.HomeColumn = Params.FreezeColumn; + Params.HomeRow = Params.FirstDataRow; + + ExportDataToExcel(spreadsheet, progressPrefix); + + // Complete worksheet and make visible. + SetProgressInfo("Releasing document and opening Excel."); + spreadsheet.OpenWorksheet(1); + spreadsheet.SetActiveCell(Params.HomeColumn, Params.HomeRow); + //spreadsheet.MakeVisible(true); + } + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + ExceptionUtil.GetLogMessage(exc)); + return SetProcessError(ExceptionUtil.GetErrorStateMessage(exc)); + } + + return OK; + } + + //------------------------------------------------------------------- + private bool ExportDataToExcel (SaMsSpreadsheet spreadsheet, String progressPrefix) + { + if (!OK) return false; + String dataName_Code = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Code).DataName; + + // Progress is refreshed every few rows. + Params.CommodityCountTotal = CommodityMgr.GetCommodityCount(GetParams()); + int progressRefreshRows = (int)Math.Max(5,Params.CommodityCountTotal/(Params.CommodityCountTotal>1000?1000:100)); + + // Query data. + SetProgress(progressPrefix + "\nQuerying data"); + using (DbResultSet resultSet = ExecuteQuery()) + { + if (resultSet.HasErrorState()) return SetProcessError(resultSet.ErrorState.Message); + if (resultSet == null) return SetProcessError("Failed to query commodity data"); + while (OK && resultSet != null && resultSet.NextRecord()) + { + Params.ItemBeingExported++; + if (Params.ItemBeingExported % progressRefreshRows == 0 || Params.ItemBeingExported == 1) + SetProgress(progressPrefix); + NamedValue.Map values = resultSet.GetRecordValues(); + uint rowPos = Params.ItemBeingExported + Params.FirstDataRow - 1; + String commodityCode = values.GetString(dataName_Code); + + // Extract and format each of the data values. + List dataValues = new List(); + foreach (ColumnDfn columnDfn in interfaceParams.Columns) + { + dataValues.Add(columnDfn.FormatValue(GetDataValue(columnDfn, values))); + } + + // Set data row height. + if (interfaceParams.DataRowHeightCm > 0) + spreadsheet.SetRowHeight(rowPos, interfaceParams.DataRowHeightCm, SaExcelLogicalUnit.Cm); + + // Extract and format each of the data values: + List cellValues = new List(); + for (int colIdx = 0; colIdx < interfaceParams.Columns.Count; colIdx++) + { + ColumnDfn columnDfn = interfaceParams.Columns[colIdx]; + uint colPos = (uint)(colIdx + Params.FirstDataColumn); + SbmCommodity.Column eColId = (SbmCommodity.Column)columnDfn.Id; + DataValue cellValue = new DataValue(); + switch (eColId) + { + // Columns requiring special handling. + case SbmCommodity.Column.Id: + break; + case SbmCommodity.Column.Image: + { + // Retrieve the image path. + String sImagePath = GetDataValue(columnDfn, values).ToString(); + // Configure image. + SaMsExcelImage_Config cfgImg = new SaMsExcelImage_Config(); + cfgImg.ImagePath = CommodityMgr.GetActualImagePath(sImagePath); + cfgImg.ColPos = colPos; + cfgImg.RowPos = rowPos; + cfgImg.Unit = SaExcelLogicalUnit.Cm; + if (FileUtil.IsFile(cfgImg.ImagePath)) + { + if (interfaceParams.DataRowHeightCm > 0) + cfgImg.TargetHeight = interfaceParams.DataRowHeightCm; + spreadsheet.InsertImage(cfgImg); + } + break; + } + case SbmCommodity.Column.BarcodeImage: + { + SaMsExcelImage_Config cfgImg = new SaMsExcelImage_Config(); + cfgImg.ImagePath = CommodityMgr.GetBarcodeImagePath(commodityCode); + cfgImg.ColPos = colPos; + cfgImg.RowPos = rowPos; + cfgImg.Unit = SaExcelLogicalUnit.Cm; + if (FileUtil.IsFile(cfgImg.ImagePath)) + { + if (interfaceParams.DataRowHeightCm > 0) + cfgImg.TargetHeight = interfaceParams.DataRowHeightCm; + spreadsheet.InsertImage(cfgImg); + } + break; + } + default: + { + cellValue = GetDataValue(columnDfn, values); + if (!columnDfn.ShowZeroValues && cellValue.IsNumeric() && cellValue.ToNumeric() == 0.0) + cellValue = new DataValue(); // Blank value. + break; + } + } + cellValues.Add(cellValue); + } + // Populate values to spreadesheet row. + spreadsheet.SetRangeFormulas(new SaMsExcelRange(Params.FirstDataColumn, rowPos, (uint)(Params.FirstDataColumn + cellValues.Count - 1), rowPos), cellValues.ToObjectList()); + IncrementStatistic(ProcessingStatistic.CommoditiesExported); + //if (Params.ItemBeingExported >= 10) break; + } + } + + return OK; + } + + //------------------------------------------------------------------- + // P r o g r e s s I n f o r m a t i o n + //------------------------------------------------------------------- + // Display progress information - redirected to dialog: + protected void SetProgress (String message) + { + // Progress message: + List progressMessages = new List(); + if (!StringUtil.IsEmpty(message)) + progressMessages.AddRange(StringListUtil.Split(message, "\n")); + + // Statistics. + long commoditiesToExport = Params.CommodityCountTotal; + long exported_Commodites = GetStatistic(ProcessingStatistic.CommoditiesExported); + if (!ProcessEnded && commoditiesToExport > 0 && exported_Commodites > 0 && exported_Commodites < commoditiesToExport) + progressMessages.Add("Commodites exported: " + (exported_Commodites * 100.0 / commoditiesToExport).ToString(commoditiesToExport < 1000 ? "N0" : "N1") + "% of " + commoditiesToExport); + + progressMessages.RemoveBlanks(); + SetProgressInfo(progressMessages); + } + + //------------------------------------------------------------------- + // I n t e r f a c e I t e m O p t i o n s + //------------------------------------------------------------------- + public List GetInterfaceItemOptionDfns () + { + InitOptionDefinitions(); + List interfaceOptionDfns = new List(); + + // 'Mode' option. + SaItemOptionDfn optionDfn = InitItemOptionDfn(interfaceOptions.GetCodeForType(Sbm.InterfaceOption.Mode), "Export mode"); + optionDfn.DisplayOptions.Values.AddRange(optionValues_Mode); + interfaceOptionDfns.Add(optionDfn); + + // 'Value' options. + optionDfn = InitItemOptionDfn(interfaceOptions.GetCodeForType(Sbm.InterfaceOption.Value), "Value", optionContexts_Value); + interfaceOptionDfns.Add(optionDfn); + + // 'Flag' options. + optionDfn = InitItemOptionDfn(interfaceOptions.GetCodeForType(Sbm.InterfaceOption.Flag), "Flag", optionContexts_Flag); + optionDfn.DisplayOptions.Values.AddRange(Sbm.ValuesYesNo); + interfaceOptionDfns.Add(optionDfn); + + // 'Column' options. + optionDfn = InitItemOptionDfn(interfaceOptions.GetCodeForType(Sbm.InterfaceOption.File_ItemColumn), "Data Column", optionContexts_Column); + optionDfn.DisplayOptions.Values.AddRange(optionValues_Column); + interfaceOptionDfns.Add(optionDfn); + + return interfaceOptionDfns; + } + + //------------------------------------------------------------------- + private void InitOptionDefinitions () + { + if (optionContexts_Value == null) + { + optionContexts_Value = new List(); + optionContexts_Value.Add(OptionContext_Value.OutputFolder, "OutputFolder", "Output folder", "To store saved files"); + optionContexts_Value.Add(OptionContext_Value.FirstDataRow, "FirstDataRow", "First data row", "First row will be populated with column headings if included"); + optionContexts_Value.Add(OptionContext_Value.MarginLeftCm, "MarginLeftCm", "Margin - left (cm)", "[Excel only]"); + optionContexts_Value.Add(OptionContext_Value.MarginRightCm, "MarginRightCm", "Margin - right (cm)", "[Excel only]"); + optionContexts_Value.Add(OptionContext_Value.MarginTopCm, "MarginTopCm", "Margin - top (cm)", "[Excel only]"); + optionContexts_Value.Add(OptionContext_Value.MarginBottomCm, "MarginBottomCm", "Margin - bottom (cm)", "[Excel only]"); + optionContexts_Value.Add(OptionContext_Value.MarginHeaderCm, "MarginHeaderCm", "Margin - header (cm)", "[Excel only]"); + optionContexts_Value.Add(OptionContext_Value.MarginFooterCm, "MarginFooterCm", "Margin - footer (cm)", "[Excel only]"); + optionContexts_Value.Add(OptionContext_Value.DataRowHeightCm, "DataRowHeightCm", "Data row height (cm)", ""); + optionContexts_Value.Add(OptionContext_Value.Font_Name, "FontName", "Font name", "Default: 'Arial' [Excel only]"); + optionContexts_Value.Add(OptionContext_Value.Font_Size_Header, "FontSizeHeader", "Font size - header", "[Excel only]"); + optionContexts_Value.Add(OptionContext_Value.Font_Size_Data, "FontSizeData", "Font size - data", "[Excel only]"); + //optionContexts_Value.Add(InterfaceOption_Value.BackgroundColour_Header,"BckgrndColourHeader","Background colour - header","Excel colour index (numeric) [Excel only]"); + } + if (optionContexts_Flag == null) + { + optionContexts_Flag = new List(); + optionContexts_Flag.Add(OptionContext_Flag.IncludeColumnHeadings, "IncludeColumnHeadings", "Include column headings", ""); + } + if (optionContexts_Column == null) + { + optionContexts_Column = new List(); + for (int i = 1; i <= kiMaxDataColumn; i++) + optionContexts_Column.Add(i, StringUtil.PadLeft(i.ToString(), 3, '0'), "Column " + StringUtil.PadLeft(i.ToString(), 2, '0')); + } + optionValues_Mode = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.FileInterface_Mode); + if (optionValues_Column == null) + { + optionValues_Column = new List(); + // Fields that can be exported: + AddColumnValue(SbmCommodity.Column.Pos, "Cmd_Pos", "Pos"); + //AddColumnValue(SbmCommodity.Column.Id, "Cmd_Id", "Id"); + AddColumnValue(SbmCommodity.Column.Type_Desc, "Cmd_TypeDesc", "Type"); + AddColumnValue(SbmCommodity.Column.Code, "Cmd_Code", "Code"); + AddColumnValue(SbmCommodity.Column.DescBrief, "Cmd_DescBrief", "Brief description"); + AddColumnValue(SbmCommodity.Column.DescOrder, "Cmd_DescOrder", "Order description"); + AddColumnValue(SbmCommodity.Column.DescDetail, "Cmd_DescDetail", "Detail description"); + AddColumnValue(SbmCommodity.Column.DrawingNo, "Cmd_DrawingNo", "Drawing no"); + AddColumnValue(SbmCommodity.Column.DrawingIssue, "Cmd_DrawingIssue", "Drawing issue"); + AddColumnValue(SbmCommodity.Column.ImagePath, "Cmd_ImagePath", "Image path"); + AddColumnValue(SbmCommodity.Column.Image, "Cmd_Image", "Image", "", "", "The actual image [Excel only]"); + AddColumnValue(SbmCommodity.Column.Category1Code, "Cmd_CategoryCode", "Category code"); + AddColumnValue(SbmCommodity.Column.Category1_Desc, "Cmd_CategoryDesc", "Category description"); + if (CommodityMgr.ColumnExists(SbmDbDfn.ColumnIdx.Commodity_Category2)) + { + AddColumnValue(SbmCommodity.Column.Category2Code, "Cmd_Category2Code", "Category 2 code"); + AddColumnValue(SbmCommodity.Column.Category2_Desc, "Cmd_Category2Desc", "Category 2 description"); + } + if (CommodityMgr.ColumnExists(SbmDbDfn.ColumnIdx.Commodity_Category3)) + { + AddColumnValue(SbmCommodity.Column.Category3Code, "Cmd_Category3Code", "Category 3 code"); + AddColumnValue(SbmCommodity.Column.Category3_Desc, "Cmd_Category3Desc", "Category 3 description"); + } + AddColumnValue(SbmCommodity.Column.Location, "Cmd_Location", "Location"); + AddColumnValue(SbmCommodity.Column.Department, "Cmd_Department", "Department"); + if (UserContext.GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn.Commodity_CatalogRef)) + AddColumnValue(SbmCommodity.Column.CatalogRef, "Cmd_CatalogRef", "Catalog ref"); + AddColumnValue(SbmCommodity.Column.Weight, "Cmd_Weight", "Weight"); + //AddColumnValue(SbmCommodity.Column.WeightUomId, "Cmd_WeightUomId", "Weight","UOM Id"); + AddColumnValue(SbmCommodity.Column.Weight_ValueUnits, "Cmd_Weight_ValueUnits", "Weight", "", "", "value & units"); + AddColumnValue(SbmCommodity.Column.Length, "Cmd_Length", "Length"); + //AddColumnValue(SbmCommodity.Column.LengthUomId, "Cmd_LengthUomId", "Length","UOM Id"); + AddColumnValue(SbmCommodity.Column.Length_ValueUnits, "Cmd_Length_ValueUnits", "Length", "", "", "value & units"); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_Volume)) + { + AddColumnValue(SbmCommodity.Column.Volume, "Cmd_Volume", "Volume"); + //AddColumnValue(SbmCommodity.Column.VolumeUomId, "Cmd_VolumeUomId", "Volume","UOM Id"); + AddColumnValue(SbmCommodity.Column.Volume_ValueUnits, "Cmd_Volume_ValueUnits", "Volume", "", "", "value & units"); + } + AddColumnValue(SbmCommodity.Column.Density, "Cmd_Density", "Density"); + //AddColumnValue(SbmCommodity.Column.DensityUomId, "Cmd_DensityUomId", "Density","UOM Id"); + AddColumnValue(SbmCommodity.Column.Density_ValueUnits, "Cmd_Density_ValueUnits", "Density", "", "", "value & units"); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_BoxQuantity)) + { + AddColumnValue(SbmCommodity.Column.BoxQuantity, "Cmd_BoxQuantity", "Box qty"); + //AddColumnValue(SbmCommodity.Column.BoxUomId, "Cmd_BoxUomId", "Box","UOM Id"); + AddColumnValue(SbmCommodity.Column.BoxQuantity_ValueUnits, "Cmd_BoxQuantity_ValueUnits", "Box", "", "", "quantity & units"); + } + AddColumnValue(SbmCommodity.Column.Dimensions, "Cmd_Dimensions", "Dimensions"); + AddColumnValue(SbmCommodity.Column.SpecSummary, "Cmd_SpecSummary", "Specification"); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode)) + AddColumnValue(SbmCommodity.Column.ICNTariffCode, "Cmd_ICNTariffCode", "Tariff code"); + // Codings: + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityRange)) + { + AddColumnValue(SbmCommodity.Column.RangeCode, "Cmd_RangeCode", "Range", "", "code", ""); + AddColumnValue(SbmCommodity.Column.RangeDesc, "Cmd_RangeDesc", "Range", "", "description", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityColour)) + { + AddColumnValue(SbmCommodity.Column.ColourCode, "Cmd_ColourCode", "Colour", "", "code", ""); + AddColumnValue(SbmCommodity.Column.ColourDesc, "Cmd_ColourDesc", "Colour", "", "description", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommoditySource)) + { + AddColumnValue(SbmCommodity.Column.SourceCode, "Cmd_SourceCode", "Source", "", "code", ""); + AddColumnValue(SbmCommodity.Column.SourceDesc, "Cmd_SourceDesc", "Source", "", "description", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommoditySupplyMethod)) + { + AddColumnValue(SbmCommodity.Column.SupplyMethodCode, "Cmd_SupplyMethodCode", "Supply method", "", "code", ""); + AddColumnValue(SbmCommodity.Column.SupplyMethodDesc, "Cmd_SupplyMethodDesc", "Supply method", "", "desc", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityHandling)) + { + AddColumnValue(SbmCommodity.Column.HandlingCode, "Cmd_HandlingCode", "Handling", "", "code", ""); + AddColumnValue(SbmCommodity.Column.HandlingDesc, "Cmd_HandlingDesc", "Handling", "", "desc", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityDelivery)) + { + AddColumnValue(SbmCommodity.Column.DeliveryCode, "Cmd_DeliveryCode", "Delivery", "", "code", ""); + AddColumnValue(SbmCommodity.Column.DeliveryDesc, "Cmd_DeliveryDesc", "Delivery", "", "desc", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityMaterial)) + { + AddColumnValue(SbmCommodity.Column.MaterialCode, "Cmd_MaterialCode", "Material", "", "code", ""); + AddColumnValue(SbmCommodity.Column.MaterialDesc, "Cmd_MaterialDesc", "Material", "", "desc", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityFinish)) + { + AddColumnValue(SbmCommodity.Column.FinishCode, "Cmd_FinishCode", "Finish", "", "code", ""); + AddColumnValue(SbmCommodity.Column.FinishDesc, "Cmd_FinishDesc", "Finish", "", "desc", ""); + } + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityPromotion)) + { + AddColumnValue(SbmCommodity.Column.PromotionCode, "Cmd_PromotionCode", "Promotion", "", "code", ""); + AddColumnValue(SbmCommodity.Column.PromotionDesc, "Cmd_PromotionDesc", "Promotion", "", "desc", ""); + } + AddColumnValue(SbmCommodity.Column.NominalCode, "Cmd_NominalCode", "Nominal code - sales"); + AddColumnValue(SbmCommodity.Column.NominalCodePurchase, "Cmd_NominalCodePurchase", "Nominal code - purchase"); + // Purchasing: + AddColumnValue(SbmCommodity.Column.Supplier_Name, "Cmd_SupplierName", "Supplier name"); + AddColumnValue(SbmCommodity.Column.Supplier_Ref, "Cmd_SupplierRef", "Supplier ref"); + AddColumnValue(SbmCommodity.Column.CostPrice, "Cmd_CostPrice", "Cost price"); + AddColumnValue(SbmCommodity.Column.CostPrice_Fmt, "Cmd_CostPrice_Fmt", "Cost price (fmt)"); + AddColumnValue(SbmCommodity.Column.PlaceOfOrigin, "Cmd_PlaceOfOrigin", "Place of origin"); + AddColumnValue(SbmCommodity.Column.MaterialCost, "Cmd_MaterialCost", "Material cost"); + AddColumnValue(SbmCommodity.Column.MaterialCost_Fmt, "Cmd_MaterialCost_Fmt", "Material cost & currency"); + AddColumnValue(SbmCommodity.Column.MaterialCurrency_Code, "Cmd_MaterialCurrency_Code", "Material currency code"); + AddColumnValue(SbmCommodity.Column.MaterialCurrency_Symbol, "Cmd_MaterialCurrency_Symbol", "Material currency symbol"); + AddColumnValue(SbmCommodity.Column.ExWorksCost, "Cmd_ExWorksCost", "Ex-works cost"); + AddColumnValue(SbmCommodity.Column.ExWorksCost_Fmt, "Cmd_ExWorksCost_Fmt", "Ex-works cost & currency"); + AddColumnValue(SbmCommodity.Column.ExWorksCurrency_Symbol, "Cmd_ExWorksCurrency_Symbol", "Ex-works currency symbol"); + AddColumnValue(SbmCommodity.Column.ExWorksCurrency_Code, "Cmd_ExWorksCurrency_Code", "Ex-works currency code"); + AddColumnValue(SbmCommodity.Column.ReorderLevel, "Cmd_ReorderLevel", "Reorder level"); + AddColumnValue(SbmCommodity.Column.ReorderQty, "Cmd_ReorderQty", "Reorder qty"); + AddColumnValue(SbmCommodity.Column.QtyOnOrder, "Cmd_QtyOnOrder", "Qty on order"); + // Sales: + if (ConfigConsole.AllowOption(UserContext, Sbm.ConfigOption.CommodityExclusiveToCustomer)) + AddColumnValue(SbmCommodity.Column.Customer_Name, "Cmd_CustomerName", "Customer name"); + AddColumnValue(SbmCommodity.Column.SalesPrice, "Cmd_SalesPrice", "Sales price"); + AddColumnValue(SbmCommodity.Column.SalesPrice_Fmt, "Cmd_SalesPrice_Fmt", "Sales price (fmt)"); + AddColumnValue(SbmCommodity.Column.RetailPrice, "Cmd_RetailPrice", "Retail price"); + AddColumnValue(SbmCommodity.Column.RetailPrice_Fmt, "Cmd_RetailPrice_Fmt", "Retail price (fmt)"); + AddColumnValue(SbmCommodity.Column.RetailPricePlanned, "Cmd_RetailPricePlanned", "Planned retail price"); + AddColumnValue(SbmCommodity.Column.RetailPricePlanned_Fmt, "Cmd_RetailPricePlanned_Fmt", "Planned retail price (fmt)"); + AddColumnValue(SbmCommodity.Column.GrossPrice, "Cmd_GrossPrice", "Gross price"); + AddColumnValue(SbmCommodity.Column.GrossPrice_Fmt, "Cmd_GrossPrice_Fmt", "Gross price (fmt)"); + AddColumnValue(SbmCommodity.Column.UnitOfSale, "Cmd_UnitOfSale", "Unit of sale"); + if (CommodityMgr.ColumnExists(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative)) + { + AddColumnValue(SbmCommodity.Column.CarriageCostIndicative, "Cmd_CarriageCostInd", "Carriage cost (ind)"); + AddColumnValue(SbmCommodity.Column.CarriageCostIndicative_Fmt, "Cmd_CarriageCostInd_Fmt", "Carriage cost (ind) (fmt)"); + } + if (CommodityMgr.ColumnExists(SbmDbDfn.ColumnIdx.Commodity_MinOrderQty)) + AddColumnValue(SbmCommodity.Column.MinOrderQty, "Cmd_MinOrderQty", "Min order qty"); + AddColumnValue(SbmCommodity.Column.PackQtySale, "Cmd_PackQtySale", "Pack qty - Sale"); + AddColumnValue(SbmCommodity.Column.TaxCode, "Cmd_TaxCode", "Tax code"); + AddColumnValue(SbmCommodity.Column.TaxRate, "Cmd_TaxRate", "Tax rate"); + AddColumnValue(SbmCommodity.Column.LastOrderDate, "Cmd_LastOrderDate", "Last order date"); + AddColumnValue(SbmCommodity.Column.LastOrderQty, "Cmd_LastOrderQty", "Last order qty"); + // Customer definition: + if (ConfigConsole.AllowOption(UserContext, Sbm.ConfigOption.CommodityCustomers) && CommodityMgr.TableExists(SbmDbDfn.TableIdx.CommodityCustomer)) + { + String commodityCustomerComment = "Only relevant for customer commodity exports"; + AddColumnValue(SbmCommodity.Column.Cust_ProductCode, "CmdCust_ProductCode", "Customer product code", "", "", commodityCustomerComment); + AddColumnValue(SbmCommodity.Column.Cust_AmountRetail, "CmdCust_AmountRetail", "Customer retail amount", "", "", commodityCustomerComment); + AddColumnValue(SbmCommodity.Column.Cust_AmountRetail_Fmt, "CmdCust_AmountRetailFmt", "Customer retail amount (fmt)", "", "", commodityCustomerComment); + //AddColumnValue(SbmCommodity.Column.Cust_CurrencyIdRetail, "CmdCust_CurrIdRetail", "Customer retail currency Id","","",sCmdCustCmt); + AddColumnValue(SbmCommodity.Column.Cust_CurrencyIdRetail_Code, "CmdCust_CurrIdRetailCode", "Customer retail currency code", "", "", commodityCustomerComment); + AddColumnValue(SbmCommodity.Column.Cust_CurrencyIdRetail_Symbol, "CmdCust_CurrIdRetailSymbol", "Customer retail currency symbol", "", "", commodityCustomerComment); + AddColumnValue(SbmCommodity.Column.Cust_PromotionCode, "CmdCust_PromotionCode", "Customer promotion code", "", "", commodityCustomerComment); + AddColumnValue(SbmCommodity.Column.Cust_PromotionDesc, "CmdCust_PromotionDesc", "Customer promotion", "", "", commodityCustomerComment); + } + // Stock: + AddColumnValue(SbmCommodity.Column.QtyInStock, "Cmd_QtyInStock", "Qty in stock"); + AddColumnValue(SbmCommodity.Column.QtyAllocated, "Cmd_QtyAllocated", "Qty allocated"); + AddColumnValue(SbmCommodity.Column.FreeStock, "Cmd_FreeStock", "Free stock"); + AddColumnValue(SbmCommodity.Column.StockTakeDate, "Cmd_StockTakeDate", "Stock take date (stored)"); + AddColumnValue(SbmCommodity.Column.StockTakeQty, "Cmd_StockTakeQty", "Stock take qty"); + AddColumnValue(SbmCommodity.Column.Notes, "Cmd_Notes", "Notes"); + AddColumnValue(SbmCommodity.Column.Status_Current_X, "Cmd_Status_Current", "Status"); + // Stock take: + AddColumnValue(SbmCommodity.Column.StockTake_Date, "Cmd_StockTake_Date", "Stock take date (derived)"); + // Sales budget: + if (UserContext.GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption.Commodity_SalesBudget)) + { + AddColumnValue(SbmCommodity.Column.SalesProj_Annual, "Cmd_SalesProj_Annual", "Sales proj - Annual"); + AddColumnValue(SbmCommodity.Column.SalesProj_Jan, "Cmd_SalesProj_Jan", "Sales proj - Jan"); + AddColumnValue(SbmCommodity.Column.SalesProj_Feb, "Cmd_SalesProj_Feb", "Sales proj - Feb"); + AddColumnValue(SbmCommodity.Column.SalesProj_Mar, "Cmd_SalesProj_Mar", "Sales proj - Mar"); + AddColumnValue(SbmCommodity.Column.SalesProj_Apr, "Cmd_SalesProj_Apr", "Sales proj - Apr"); + AddColumnValue(SbmCommodity.Column.SalesProj_May, "Cmd_SalesProj_May", "Sales proj - May"); + AddColumnValue(SbmCommodity.Column.SalesProj_Jun, "Cmd_SalesProj_Jun", "Sales proj - Jun"); + AddColumnValue(SbmCommodity.Column.SalesProj_Jul, "Cmd_SalesProj_Jul", "Sales proj - Jul"); + AddColumnValue(SbmCommodity.Column.SalesProj_Aug, "Cmd_SalesProj_Aug", "Sales proj - Aug"); + AddColumnValue(SbmCommodity.Column.SalesProj_Sep, "Cmd_SalesProj_Sep", "Sales proj - Sep"); + AddColumnValue(SbmCommodity.Column.SalesProj_Oct, "Cmd_SalesProj_Oct", "Sales proj - Oct"); + AddColumnValue(SbmCommodity.Column.SalesProj_Nov, "Cmd_SalesProj_Nov", "Sales proj - Nov"); + AddColumnValue(SbmCommodity.Column.SalesProj_Dec, "Cmd_SalesProj_Dec", "Sales proj - Dec"); + AddColumnValue(SbmCommodity.Column.SalesProj_Period, "Cmd_SalesProj_Period", "Sales proj - Period"); + } + // Sales: + AddColumnValue(SbmCommodity.Column.SalesYtdFinancial, "Cmd_SalesYtdFinancial", "Sales - YTD financial"); + AddColumnValue(SbmCommodity.Column.SalesYtdCalendar, "Cmd_SalesYtdCalendar", "Sales - YTD calendar"); + AddColumnValue(SbmCommodity.Column.SalesPyFinancial, "Cmd_SalesPyFinancial", "Sales - PY financial"); + AddColumnValue(SbmCommodity.Column.SalesPyCalendar, "Cmd_SalesPyCalendar", "Sales - PY calendar"); + AddColumnValue(SbmCommodity.Column.SalesMonthCurrent, "Cmd_SalesMonthCurrent", "Sales - month current"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast01, "Cmd_SalesMonthPast01", "Sales - month past 01"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast02, "Cmd_SalesMonthPast02", "Sales - month past 02"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast03, "Cmd_SalesMonthPast03", "Sales - month past 03"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast04, "Cmd_SalesMonthPast04", "Sales - month past 04"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast05, "Cmd_SalesMonthPast05", "Sales - month past 05"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast06, "Cmd_SalesMonthPast06", "Sales - month past 06"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast07, "Cmd_SalesMonthPast07", "Sales - month past 07"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast08, "Cmd_SalesMonthPast08", "Sales - month past 08"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast09, "Cmd_SalesMonthPast09", "Sales - month past 09"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast10, "Cmd_SalesMonthPast10", "Sales - month past 10"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast11, "Cmd_SalesMonthPast11", "Sales - month past 11"); + AddColumnValue(SbmCommodity.Column.SalesMonthPast12, "Cmd_SalesMonthPast12", "Sales - month past 12"); + // Quantity of stock sold: + AddColumnValue(SbmCommodity.Column.StockSold_Period, "Cmd_StockSold_Period", "Stock sold period"); + // Stock Levels: + AddColumnValue(SbmCommodity.Column.Stock_CurrentLevel, "Cmd_Stock_CurrentLevel", "Stock - current level", "", "", "Selected location"); + AddColumnValue(SbmCommodity.Column.Stock_CurrentLevel_Sales, "Cmd_Stock_CurrentLevel_Sales", "Stock - current level (sales)"); + AddColumnValue(SbmCommodity.Column.Stock_CurrentLevel_Calc, "Cmd_Stock_CurrentLevel_Stock", "Stock - current level (stock)"); + AddColumnValue(SbmCommodity.Column.Stock_CurrentLevel_All, "Cmd_Stock_CurrentLevel_All", "Stock - current level (all)"); + AddColumnValue(SbmCommodity.Column.Stock_ImminentLevel, "Cmd_Stock_ImminentLevel", "Stock - imminent level"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated, "Cmd_Stock_Allocated", "Stock - allocated"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Sales, "Cmd_Stock_Allocated_Sales", "Stock - allocated (sales)"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Calc, "Cmd_Stock_Allocated_Calc", "Stock - allocated (calc)"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_All, "Cmd_Stock_Allocated_All", "Stock - allocated (all)"); + AddColumnValue(SbmCommodity.Column.Stock_Available, "Cmd_Stock_Available", "Stock - available"); + AddColumnValue(SbmCommodity.Column.Stock_Available_MinZero, "Cmd_Stock_Available_MinZero", "Stock - available (min zero)"); + AddColumnValue(SbmCommodity.Column.Stock_ImminentAvailable, "Cmd_Stock_ImminentAvailable", "Stock - imminent available"); + AddColumnValue(SbmCommodity.Column.Stock_CurrentVsReorder, "Cmd_Stock_CurrentVsReorder", "Stock - current vs reorder"); + AddColumnValue(SbmCommodity.Column.Stock_ImminentVsReorder, "Cmd_Stock_ImminentVsReorder", "Stock - imminent vs reorder"); + AddColumnValue(SbmCommodity.Column.Stock_AvailVsReorder, "Cmd_Stock_AvailVsReorder", "Stock - avail vs reorder"); + AddColumnValue(SbmCommodity.Column.Stock_ImminentAvailVsReorder, "Cmd_Stock_ImminentAvailVsReorder", "Stock - imminent avail vs reorder"); + // Stock bays by location. + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.StockLevel_Bay1)) + AddColumnValue(SbmCommodity.Column.Stock_Bays, "Cmd_Stock_Bays", "Stock bays"); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.StockLevel_Bay1)) + AddColumnValue(SbmCommodity.Column.Stock_Bay1, "Cmd_Stock_Bay1", "Bay 1", "Stock - ", "", "Selected location"); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.StockLevel_Bay2)) + AddColumnValue(SbmCommodity.Column.Stock_Bay2, "Cmd_Stock_Bay2", "Bay 2", "Stock - ", "", "Selected location"); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.StockLevel_Bay3)) + AddColumnValue(SbmCommodity.Column.Stock_Bay3, "Cmd_Stock_Bay3", "Bay 3", "Stock - ", "", "Selected location"); + // Stock due: + AddColumnValue(SbmCommodity.Column.Stock_NextDue_Commodity_Date, "Cmd_Stock_NextDue_Commodity_Date", "Stock - next date due commodity"); + AddColumnValue(SbmCommodity.Column.Stock_NextDue_Commodity_Quantity, "Cmd_Stock_NextDue_Commodity_Quantity", "Stock - next quantity due commodity"); + AddColumnValue(SbmCommodity.Column.Stock_NextDue_Container_Date, "Cmd_Stock_NextDue_Container_Date", "Stock - next date due container"); + AddColumnValue(SbmCommodity.Column.Stock_NextDue_Container_Quantity, "Cmd_Stock_NextDue_Container_Quantity", "Stock - next quantity due container"); + AddColumnValue(SbmCommodity.Column.Stock_Due_Imminently, "Cmd_Stock_Due_Imminently", "Stock - due imminently"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week1, "Cmd_Stock_DueIn_Week1", "Stock due in - week 1"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week2, "Cmd_Stock_DueIn_Week2", "Stock due in - week 2"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week3, "Cmd_Stock_DueIn_Week3", "Stock due in - week 3"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week4, "Cmd_Stock_DueIn_Week4", "Stock due in - week 4"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week5, "Cmd_Stock_DueIn_Week5", "Stock due in - week 5"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week6, "Cmd_Stock_DueIn_Week6", "Stock due in - week 6"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week7, "Cmd_Stock_DueIn_Week7", "Stock due in - week 7"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week8, "Cmd_Stock_DueIn_Week8", "Stock due in - week 8"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week9, "Cmd_Stock_DueIn_Week9", "Stock due in - week 9"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week10, "Cmd_Stock_DueIn_Week10", "Stock due in - week 10"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week11, "Cmd_Stock_DueIn_Week11", "Stock due in - week 11"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week12, "Cmd_Stock_DueIn_Week12", "Stock due in - week 12"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week1To2, "Cmd_Stock_DueIn_Week1To2", "Stock due in - week 1 to 2"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week3To4, "Cmd_Stock_DueIn_Week3To4", "Stock due in - week 3 to 4"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week5To6, "Cmd_Stock_DueIn_Week5To6", "Stock due in - week 5 to 6"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week7To8, "Cmd_Stock_DueIn_Week7To8", "Stock due in - week 7 to 8"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week9To10, "Cmd_Stock_DueIn_Week9To10", "Stock due in - week 9 to 10"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week11To12, "Cmd_Stock_DueIn_Week11To12", "Stock due in - week 11 to 12"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week7On, "Cmd_Stock_DueIn_Week7On", "Stock due in - week 7 on"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Week13On, "Cmd_Stock_DueIn_Week13On", "Stock due in - week 13 on"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_MonthCurrent, "Cmd_Stock_DueIn_MonthCurrent", "Stock due in - current month"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month01, "Cmd_Stock_DueIn_Month01", "Stock due in - month 1"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month02, "Cmd_Stock_DueIn_Month02", "Stock due in - month 2"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month03, "Cmd_Stock_DueIn_Month03", "Stock due in - month 3"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month04, "Cmd_Stock_DueIn_Month04", "Stock due in - month 4"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month05, "Cmd_Stock_DueIn_Month05", "Stock due in - month 5"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month06, "Cmd_Stock_DueIn_Month06", "Stock due in - month 6"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month07, "Cmd_Stock_DueIn_Month07", "Stock due in - month 7"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month08, "Cmd_Stock_DueIn_Month08", "Stock due in - month 8"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month09, "Cmd_Stock_DueIn_Month09", "Stock due in - month 9"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month10, "Cmd_Stock_DueIn_Month10", "Stock due in - month 10"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month11, "Cmd_Stock_DueIn_Month11", "Stock due in - month 11"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month12, "Cmd_Stock_DueIn_Month12", "Stock due in - month 12"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_MonthTo03, "Cmd_Stock_DueIn_MonthTo03", "Stock due in - to month 3"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_MonthTo06, "Cmd_Stock_DueIn_MonthTo06", "Stock due in - to month 6"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_MonthTo09, "Cmd_Stock_DueIn_MonthTo09", "Stock due in - to month 9"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_MonthTo12, "Cmd_Stock_DueIn_MonthTo12", "Stock due in - to month 12"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month04To06, "Cmd_Stock_DueIn_Month04To06", "Stock due in - month 4 to 6"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month07To09, "Cmd_Stock_DueIn_Month07To09", "Stock due in - month 7 to 9"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month10To12, "Cmd_Stock_DueIn_Month10To12", "Stock due in - month 10 to 12"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month07To12, "Cmd_Stock_DueIn_Month07To12", "Stock due in - month 7 to 12"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month04On, "Cmd_Stock_DueIn_Month04On", "Stock due in - month 4 on"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month05On, "Cmd_Stock_DueIn_Month05On", "Stock due in - month 5 on"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month06On, "Cmd_Stock_DueIn_Month06On", "Stock due in - month 6 on"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month07On, "Cmd_Stock_DueIn_Month07On", "Stock due in - month 7 on"); + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Month13On, "Cmd_Stock_DueIn_Month13On", "Stock due in - month 13 on"); + // Stock Provisional due in (via containers): + AddColumnValue(SbmCommodity.Column.Stock_DueIn_Provisional, "Cmd_Stock_DueIn_Provisional", "Stock due in - provisional"); + // Stock allocations: tions: + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week1, "Cmd_Stock_Allocated_Week1", "Stock - allocated week 1"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week2, "Cmd_Stock_Allocated_Week2", "Stock - allocated week 2"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week3To4, "Cmd_Stock_Allocated_Week3To4", "Stock - allocated week 3 to 4"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week5To6, "Cmd_Stock_Allocated_Week5To6", "Stock - allocated week 5 to 6"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week7To8, "Cmd_Stock_Allocated_Week7To8", "Stock - allocated week 7 to 8"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week9To10, "Cmd_Stock_Allocated_Week9To10", "Stock - allocated week 9 to 10"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week11To12, "Cmd_Stock_Allocated_Week11To12", "Stock - allocated week 11 to 12"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Week13On, "Cmd_Stock_Allocated_Week13On", "Stock - allocated week 13 on"); + //++++++++++++++ + AddColumnValue(SbmCommodity.Column.Stock_Allocated_MonthCurrent, "Cmd_Stock_Allocated_MonthCurrent", "Stock - allocated current month"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month01, "Cmd_Stock_Allocated_Month01", "Stock - allocated month 01"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month02, "Cmd_Stock_Allocated_Month02", "Stock - allocated month 02"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month03, "Cmd_Stock_Allocated_Month03", "Stock - allocated month 03"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month04, "Cmd_Stock_Allocated_Month04", "Stock - allocated month 04"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month05, "Cmd_Stock_Allocated_Month05", "Stock - allocated month 05"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month06, "Cmd_Stock_Allocated_Month06", "Stock - allocated month 06"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month07, "Cmd_Stock_Allocated_Month07", "Stock - allocated month 07"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month08, "Cmd_Stock_Allocated_Month08", "Stock - allocated month 08"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month09, "Cmd_Stock_Allocated_Month09", "Stock - allocated month 09"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month10, "Cmd_Stock_Allocated_Month10", "Stock - allocated month 10"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month11, "Cmd_Stock_Allocated_Month11", "Stock - allocated month 11"); + AddColumnValue(SbmCommodity.Column.Stock_Allocated_Month12, "Cmd_Stock_Allocated_Month12", "Stock - allocated month 12"); + // End of month stock level in future (derived): + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_Current, "Cmd_Stock_EndOfMonth_Current", "Stock - end of current month"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_01, "Cmd_Stock_EndOfMonth_01", "Stock - end of month 01"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_02, "Cmd_Stock_EndOfMonth_02", "Stock - end of month 02"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_03, "Cmd_Stock_EndOfMonth_03", "Stock - end of month 03"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_04, "Cmd_Stock_EndOfMonth_04", "Stock - end of month 04"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_05, "Cmd_Stock_EndOfMonth_05", "Stock - end of month 05"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_06, "Cmd_Stock_EndOfMonth_06", "Stock - end of month 06"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_07, "Cmd_Stock_EndOfMonth_07", "Stock - end of month 07"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_08, "Cmd_Stock_EndOfMonth_08", "Stock - end of month 08"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_09, "Cmd_Stock_EndOfMonth_09", "Stock - end of month 09"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_10, "Cmd_Stock_EndOfMonth_10", "Stock - end of month 10"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_11, "Cmd_Stock_EndOfMonth_11", "Stock - end of month 11"); + AddColumnValue(SbmCommodity.Column.Stock_EndOfMonth_12, "Cmd_Stock_EndOfMonth_12", "Stock - end of month 12"); + // Requirements. + AddColumnValue(SbmCommodity.Column.Reqnt_AmountUnit_Earliest_ById, "Cmd_Reqnt_AmountUnit_Earliest_ById", "Earliest item price (regardless of item status)"); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_DrawingIssue)) + AddColumnValue(SbmCommodity.Column.Reqnt_AmountUnit_Earliest_ByCode, "Cmd_Reqnt_AmountUnit_Earliest_ByCode", "Earliest item price (regardless of issue or item status"); + // Processes: + if (ProcessMgr.HasProcesses(Sbm.ProcessCategory.Commodity)) + AddColumnValue(SbmCommodity.Column.Process_Count, "Cmd_ProcessCount", "Process count"); + // Portfolio items: + AddColumnValue(SbmCommodity.Column.PortfolioItem_Count, "Cmd_Portfolio_ItemCount", "Portfolio item count"); + // Barcode images (if a barcode image path is defined): + if (!UserContext.GetOwnerOption_Folder(Sbm.OrgOption_Folder.CommodityBarcodeImage).IsEmpty()) + { + AddColumnValue(SbmCommodity.Column.BarcodeImagePath, "Cmd_BarcodeImagePath", "Barcode image path"); + AddColumnValue(SbmCommodity.Column.BarcodeImage, "Cmd_BarcodeImage", "Barcode image"); + } + } + } + private bool AddColumnValue (SbmCommodity.Column eCol, String sCode, String sDesc) + { + return AddColumnValue(eCol, sCode, sDesc, null, null, null); + } + private bool AddColumnValue + (SbmCommodity.Column eCol, String sCode, String sDesc, + String pcDescPrefix, String pcDescSuffix, String pcComment) + { + // Determine whether the specified column is allowed in the export definition. + bool bAddValue = false; + bool allowColumn = true; + SbmDbDfn.ColumnIdx eDbCol = (SbmDbDfn.ColumnIdx)CommodityMgr.GetCommodityColumnDfn(eCol).DbColumn; + // Some columns excluded by console. + if (allowColumn) allowColumn = ((int)eDbCol < 1 || ConfigConsole.DisplayAttribute(UserContext, eDbCol)); + if (allowColumn) + { + // Some tables require console permission. + switch (SbmDbDfn.GetTableForColumn(eDbCol)) + { + case SbmDbDfn.TableIdx.PortfolioItem: + allowColumn = ConfigConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowPortfolios); + if (allowColumn) + allowColumn = CommodityMgr.PortfolioDatabaseIsValid; + break; + case SbmDbDfn.TableIdx.StockLevel: + allowColumn = ConfigConsole.GetStockControlConfig(UserContext).AllowStockControl(); + if (allowColumn) + allowColumn = StockMgr.DatabaseIsValid(); + break; + case SbmDbDfn.TableIdx.Transaction: + case SbmDbDfn.TableIdx.Requirement: + allowColumn = ConfigConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowTransactions); + break; + + } + } + if (allowColumn) + { + String sDescPrefix = pcDescPrefix; + String sDescSuffix = pcDescSuffix; + optionValues_Column.Add(eCol, sCode, (sDescPrefix + " " + ConfigConsole.GetAttributeCaption(UserContext, eDbCol, sDesc) + " " + sDescSuffix).Trim(), pcComment); + bAddValue = true; + } + return bAddValue; + } + + //------------------------------------------------------------------- + // I n t e r f a c e P r o c e s s i n g + //------------------------------------------------------------------- + private enum ProcessOption + { + Export_Commodities, + } + /// Configure processing options. + public static List GetProcessingOptions (SbmUserContext userContext, SaInterface interfaceObj) + { + List optionGroups = new List(); + + // Export. + SaProcess_Base.GroupData groupExport = new GroupData(InterfaceProcessGroups.GetEntryForType(InterfaceProcessGroup.Export)); + groupExport.Options.Add(new OptionData(new TypeCodeDesc((int)ProcessOption.Export_Commodities, "Export_Commodities", StringUtil.OnEmpty(interfaceObj?.Caption ?? "", "Export Commodities")))); + if (groupExport.Options.Count > 0) + optionGroups.Add(groupExport); + + return optionGroups; + } + + //------------------------------------------------------------------- + /// Process interface using selected options. + public static SbmInterfaceProcess ConfigureProcess (SbmUserContext userContext, SaInterface interfaceObj, SaProcess_Base.GroupData processGroup) + { + if (processGroup.OptionGroup.Type == (int)InterfaceProcessGroup.Export) + { + SbmInterfaceProcess_Commodity_Export.Config configExport = new SbmInterfaceProcess_Commodity_Export.Config(userContext); + configExport.InterfaceId = interfaceObj.Id; + configExport.ExportCommodities = true; + return new SbmInterfaceProcess_Commodity_Export(configExport); + } + return null; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-DataExport.cs b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-DataExport.cs new file mode 100644 index 0000000..7100229 --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-DataExport.cs @@ -0,0 +1,39 @@ +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Utils; +using Sarand.Net.Standard.Proc.Excel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Procs +{ + //======================================================================= + // D a t a E x p o r t P r o c e s s + //======================================================================= + partial class SbmProcess_Base + { + //------------------------------------------------------------------- + /// + /// Open Excel worksheet. + /// Additional sheets are added up to the position specified if less are currently populated. + /// + protected bool OpenWorkSheet (SaMsSpreadsheet spreadsheet, uint worksheetPos = 1, String worksheetName = "") + { + if (!OK) return false; + if (worksheetPos < 1) worksheetPos = 1; + + while (spreadsheet.WorksheetCount < worksheetPos) + spreadsheet.AddWorksheet("Sheet " + (spreadsheet.WorksheetCount + 1)); + spreadsheet.OpenWorksheet(worksheetPos); + if (!StringUtil.IsEmpty(StringUtil.TrimAll(worksheetName, new char[] { ' ' }))) + spreadsheet.WorksheetName = worksheetName; + + return OK; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-FTP.cs b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-FTP.cs new file mode 100644 index 0000000..90469f8 --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base-FTP.cs @@ -0,0 +1,276 @@ +using Sarand.BusinessMgr.Net.Core.Procs.Procs; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Procs +{ + //======================================================================= + // F T P + //======================================================================= + partial class SbmProcess_Base + { + //------------------------------------------------------------------- + // Definitions. + public class FtpConfig + { + public String Host { get; set; } + public String Username { get; set; } + public String Password { get; set; } + } + + //------------------------------------------------------------------- + // F T P U t i l i t i e s + //------------------------------------------------------------------- + private String GetFtpUrl (FtpConfig ftpConfig, String path) + { + return "ftp://" + ftpConfig.Host + "/" + FtpUtil.CleansePath(path); + } + private FtpWebRequest CreateFtpRequest (FtpConfig ftpConfig, String path, bool keepAlive = true) + { + FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(GetFtpUrl(ftpConfig, path)); + // Credentials. + if (!StringUtil.IsEmpty(ftpConfig.Username) || StringUtil.IsEmpty(ftpConfig.Password)) + ftpRequest.Credentials = new NetworkCredential(ftpConfig.Username, ftpConfig.Password); + ftpRequest.UseBinary = true; + // Keep alive = true will reuse the connection (behind the scenes) even though + // a new FTP Web Request is created for each request. Don't know how! + // Ref. https://stackoverflow.com/questions/7132246/how-to-reuse-ftpwebrequest-connection/7132428#7132428 + // Network tracing: https://stackoverflow.com/questions/9664650/output-log-using-ftpwebrequest/9666598#9666598 + ftpRequest.KeepAlive = keepAlive; + ftpRequest.Timeout = 5000; + ftpRequest.UsePassive = true; + return ftpRequest; + } + private WebClient CreateFtpWebClient (FtpConfig ftpConfig) + { + WebClient webClient = new WebClient(); + // Credentials. + if (!StringUtil.IsEmpty(ftpConfig.Username) || StringUtil.IsEmpty(ftpConfig.Password)) + webClient.Credentials = new NetworkCredential(ftpConfig.Username, ftpConfig.Password); + return webClient; + } + + //------------------------------------------------------------------- + // Test connection. + protected bool TestFtpConnection (FtpConfig ftpConfig) + { + String fn = GetType().Name + ".TestFtpConnection"; + WebResponse response = null; + try + { + // FTP request. + FtpWebRequest ftpRequest = CreateFtpRequest(ftpConfig, ""); + ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; + // Send request. + response = ftpRequest.GetResponse(); + using (Stream responseStream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(responseStream)) + { + String responseData = reader.ReadToEnd(); + SaLogger.Debug(fn + ": Items in root: " + responseData.ReplaceAll("\r\n", ", ")); + } + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + exc.GetType().Name + ": " + exc.Message, true); + return SetProcessError("Unable to connect to FTP host"); + } + finally + { + if (response != null) response.Dispose(); + } + return true; + } + protected bool CloseFtpConnection (FtpConfig ftpConfig) + { + WebResponse response = null; + try + { + // FTP request with KeepAlive=false to close connection. + FtpWebRequest ftpRequest = CreateFtpRequest(ftpConfig, "", false); + ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; + response = ftpRequest.GetResponse(); + } + catch { } + finally + { + if (response != null) response.Dispose(); + } + return true; + } + + //------------------------------------------------------------------- + protected bool FtpFolderExists (FtpConfig ftpConfig, String folder) + { + String fn = GetType().Name + ".FtpFolderExists"; + WebResponse response = null; + try + { + String parentFolder = FtpUtil.GetParentFolder(folder); + String itemName = FtpUtil.GetItemName(folder); + // FTP request. + FtpWebRequest ftpRequest = CreateFtpRequest(ftpConfig, parentFolder); + ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; + // Send request. + String data = ""; + response = ftpRequest.GetResponse(); + using (Stream responseStream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(responseStream)) + { + data = reader.ReadToEnd().Replace("\r", ""); + } + String[] directoryItems = data.Split(new String[] { "\n" }, StringSplitOptions.None); + foreach (String directoryItemData in directoryItems) + { + FtpUtil.FtpDirectoryItem directoryItem = FtpUtil.GetDirectoryItem(directoryItemData); + if (directoryItem != null && directoryItem.Name.EqualsCI(itemName)) + return directoryItem.IsDirectory; + } + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + exc.GetType().Name + ": " + exc.Message, true); + return false; + } + finally + { + if (response != null) response.Dispose(); + } + return false; + } + + //------------------------------------------------------------------- + /// Get list of items in remote FTP folder. + protected List GetFtpFileItems (FtpConfig ftpConfig, String folder) + { + return GetFtpItems(ftpConfig, folder).FindAll(item => !item.IsDirectory); + } + /// Get list of items in remote FTP folder. + protected List GetFtpItems (FtpConfig ftpConfig, String folder) + { + String fn = this.GetType().Name + ".GetFtpItems"; + List files = new List(); + WebResponse response = null; + try + { + // FTP request. + FtpWebRequest ftpRequest = CreateFtpRequest(ftpConfig, folder); + ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; + // Send request. + // Send request. + response = ftpRequest.GetResponse(); + String data = ""; + using (Stream responseStream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(responseStream)) + { + data = reader.ReadToEnd().Replace("\r", ""); + } + String[] directoryItems = data.Split(new String[] { "\n" }, StringSplitOptions.None); + foreach (String directoryItemData in directoryItems) + { + FtpUtil.FtpDirectoryItem directoryItem = FtpUtil.GetDirectoryItem(directoryItemData); + if (directoryItem != null) + files.Add(directoryItem); + } + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + exc.GetType().Name + ": " + exc.Message, true); + } + finally + { + if (response != null) response.Dispose(); + } + return files; + } + + //------------------------------------------------------------------- + protected String GetFtpFileData (FtpConfig ftpConfig, String folder, String filename) + { + String fn = GetType() + ".GetFtpFileData"; + WebClient ftpClient = null; + try + { + ftpClient = CreateFtpWebClient(ftpConfig); + String ftpUrl = GetFtpUrl(ftpConfig, folder + "/" + filename); + byte[] fileData = ftpClient.DownloadData(ftpUrl); + return System.Text.Encoding.UTF8.GetString(fileData); + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + exc.GetType().Name + ": " + exc.Message, true); + } + finally + { + if (ftpClient != null) ftpClient.Dispose(); + } + return ""; + } + + //------------------------------------------------------------------- + protected bool WriteDataToFtpFile (FtpConfig ftpConfig, String folder, String filename, String data) + { + String fn = GetType() + ".WriteDataToFtpFile"; + bool dataWrittenToFile = false; + FtpWebResponse response = null; + try + { + FtpWebRequest ftpRequest = CreateFtpRequest(ftpConfig, folder + Path.DirectorySeparatorChar + filename); + ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; + ftpRequest.ContentLength = data.Length; + using (Stream request_stream = ftpRequest.GetRequestStream()) + { + byte[] bytes = Encoding.UTF8.GetBytes(data); + request_stream.Write(bytes, 0, data.Length); + request_stream.Close(); + } + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + exc.GetType().Name + ": " + exc.Message, true); + } + finally + { + if (response != null) response.Dispose(); + } + return dataWrittenToFile; + } + + //------------------------------------------------------------------- + protected bool DeleteFtpFile (FtpConfig ftpConfig, String folder, String filename) + { + String fn = GetType() + ".DeleteFtpData"; + bool fileDeleted = false; + FtpWebResponse response = null; + try + { + // FTP request. + FtpWebRequest ftpRequest = CreateFtpRequest(ftpConfig, folder + Path.DirectorySeparatorChar + filename); + ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile; + response = (FtpWebResponse)ftpRequest.GetResponse(); + if (EnhancedLogging) SaLogger.Info(ProcessDescription + " - Delete FTP file: Response: " + response.StatusDescription, true); + fileDeleted = true; + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + exc.GetType().Name + ": " + exc.Message, true); + } + finally + { + if (response != null) response.Dispose(); + } + return fileDeleted; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs new file mode 100644 index 0000000..db46124 --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Base.cs @@ -0,0 +1,300 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.CodeTypes; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.UpdateLog; +using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.ItemDocs; +using Sarand.Net.Standard.Base.ReferenceData; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.Utils; +using Sarand.Net.Standard.Proc.Procs; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Procs +{ + //======================================================================= + public abstract partial class SbmProcess_Base : SaProcess + { + //------------------------------------------------------------------- + // Configuration. + public enum DataFormatType + { + Unknown, + Flat, + Csv, + Excel, + Word, + } + public new class Config : SaProcess.Config + { + protected Config (SbmUserContext userContext) : base() + { + UserContext = userContext; + } + public SbmUserContext UserContext { get; } + /// Specific type of data item being handled. + public Sbm.ItemType ItemType { get; set; } = Sbm.ItemType.Unknown; + /// Format to import/export data. + public DataFormatType DataFormat { get; set; } = DataFormatType.Unknown; + /// Application managers and consoles - to share parent's internals. + public SbmInternals Internals { get; set; } + /// Extended logging messages. + public bool EnhancedLogging { get; set; } + } + + //------------------------------------------------------------------- + // Definitions. + /// Process parameters - processing control properties + public class ProcessParams + { + } + + //------------------------------------------------------------------- + // Data members. + private Config config; + private SbmInternals internals = null; + private List processingOptions = null; + + //------------------------------------------------------------------- + // Construction. + protected SbmProcess_Base (Config config) : base(config) + { + this.config = config; + if (!EnhancedLogging) EnhancedLogging = config.EnhancedLogging; + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + if (internals != null) internals.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected bool EnhancedLogging { get; set; } + /// Comments are populated with list of processing options by default. + public override List ProcessComments + { + get + { + List comments = new List(base.ProcessComments); + List optionDfns = GetProcessingOptionDfns(); + foreach (SaItemOption itemOption in GetProcessingOptions()) + { + SaItemOptionDfn optionDfn = optionDfns.GetItemOptionDfnByName(itemOption.Name); + String context = optionDfn?.GetContextDesc(itemOption.Context) ?? itemOption.Context; + String caption = itemOption.Name + (!StringUtil.IsEmpty(context) ? " - " + context : ""); + String value = StringUtil.EmptyOnNull(itemOption.Value); + comments.Add(caption + ": " + value); + } + return comments; + } + } + // Context. + public SbmUserContext UserContext { get { return config.UserContext; } } + public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } + protected SbmInternals Internals + { + get + { + // Use supplied internals if available. + if (config.Internals != null) return config.Internals; + // Otherwise use local instance. + if (internals == null) + internals = new SbmInternals(UserContext); + return internals; + } + } + protected SbmAccountsDfn AccountsDfn { get { return Internals.AccountsDfn; } } + protected DbUpdateInfo DbUpdateInfo { get { return Internals.DbUpdateInfo; } } + // Excel export. + public static Color ExcelColumnHeadingColor { get; } = Color.LightYellow; + // Security. + protected SbmSecurityProfile SecurityProfile { get { return Internals.SecurityProfile; } } + protected bool UserCanUpdateContacts { get { return (SecurityProfile != null && SecurityProfile.Contacts.CanUpdate); } } + protected bool UserCanCreateContacts { get { return (SecurityProfile != null && SecurityProfile.Contacts.CanCreate); } } + protected bool UserCanViewFinancials { get { return (SecurityProfile != null && SecurityProfile.Financial.CanViewFinancials); } } + protected bool UserCanUpdateFinancials { get { return (SecurityProfile != null && SecurityProfile.Financial.CanUpdateFinancials); } } + protected bool UserCanManageFinancials { get { return (SecurityProfile != null && SecurityProfile.Financial.CanViewFinancials); } } + // ToDo SbmForm SecurityProfile Assets. + /* + protected bool UserCanManageAssets { get { return (SecurityProfile != null && SecurityProfile.Assets.CanManage); } } + protected bool UserCanUpdateAssets { get { return (SecurityProfile != null && SecurityProfile.Assets.CanUpdate); } } + protected bool UserCanViewAssets { get { return (SecurityProfile != null && SecurityProfile.Assets.CanView); } } + */ + // Managers. + protected SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } } + protected SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } } + protected SbmPriceMgr PriceMgr { get { return Internals.PriceMgr; } } + protected SbmTransactionMgr TransactionMgr { get { return Internals.TransactionMgr; } } + protected SbmStockMgr StockMgr { get { return Internals.StockMgr; } } + protected SbmProcessMgr ProcessMgr { get { return Internals.ProcessMgr; } } + protected SbmDataItemMgr DataItemMgr { get { return Internals.DataItemMgr; } } + // Consoles. + protected SbmConfigConsole ConfigConsole { get { return Internals.ConfigConsole; } } + protected SaSecurityConsole SecurityConsole { get { return Internals.SecurityConsole; } } + protected SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } } + protected SaReferenceDataConsole ReferenceDataConsole { get { return Internals.ReferenceDataConsole; } } + protected SaItemOptionConsole ItemOptionConsole { get { return Internals.ItemOptionConsole; } } + protected SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } } + protected SaInterfaceConsole InterfaceConsole { get { return Internals.InterfaceConsole; } } + protected SaItemDocConsole ItemDocConsole { get { return Internals.ItemDocConsole; } } + // Configurations. + protected SbmStockControlConfig StockControlConfig { get { return Internals.StockControlConfig; } } + protected SbmRequirementCostingConfig RequirementCostingConfig { get { return Internals.RequirementCostingConfig; } } + // Currencies. + protected List GetCurrencies () + { + return Internals.GetCurrencies(); + } + + protected SaCurrency GetCurrencyById (SysId currencyId) + { + return Internals.GetCurrencyById(currencyId); + } + protected SaCurrency GetCurrencyByCode (String currencyCode) + { + return Internals.GetCurrencyByCode(currencyCode); + } + protected static byte CurrencyDecimalsDefault { get { return SbmInternals.CurrencyDecimalsDefault; } } + protected byte GetCurrencyDecimalsForCurrencyById (SysId currencyId) + { + return Internals.GetCurrencyDecimalsForCurrencyById(currencyId); + } + + //------------------------------------------------------------------- + // P r o c e s s i n g + //------------------------------------------------------------------- + protected virtual void ResetProcess () + { + ClearStatistics(); + } + + //------------------------------------------------------------------- + // P r o c e s s i n g O p t i o n s + //------------------------------------------------------------------- + /// Are options supported - False by default. + public virtual bool HasProcessingOptions () + { + return false; + } + /// Are required options populated - True by default. + public virtual bool AreProcessingOptionsComplete () + { + return true; + } + /// Processing option definitions. + public virtual List GetProcessingOptionDfns () + { + return new List(); + } + /// Processing options. + public virtual List GetProcessingOptions () + { + return new List(processingOptions ?? new List()); + } + public String GetProcessingOptionValue (String name, String context, String defaultValue = "") + { + if (processingOptions == null) + SetProcessingOptions(GetProcessingOptions()); + SaItemOption itemOption = processingOptions.Find(item => item.Name.EqualsCI(name) && item.Context.EqualsCI(context)); + return itemOption?.Value ?? defaultValue; + } + /// Store processing options. + public virtual bool SetProcessingOptions (List processingOptions) + { + this.processingOptions = new List(processingOptions); + return true; + } + /// Allow process to update its own options. + public virtual bool UpdateProcessingOptions () + { + return true; + } + /// Allow process to update its own options. + public virtual bool UpdateOptions () + { + return false; + } + + //------------------------------------------------------------------- + // P r o c e s s i n g S t a t i s t i c s + //------------------------------------------------------------------- + protected class StatisticsData + { + public class Stat + { + public Stat (int statType, int initialValue = 0) + { + StatType = statType; + InitialValue = initialValue; + } + public int StatType { get; } + public int InitialValue { get; } + } + public void Clear () { } + public Dictionary Statistics { get; } = new Dictionary(); + } + private readonly StatisticsData stats = new StatisticsData(); + protected int GetStatistic (int statisticType) + { + return stats.Statistics.GetValue(statisticType, 0); + } + protected int GetStatistic (T statisticType) where T : struct, IConvertible + { + if (!(statisticType is Enum)) + throw new ArgumentException(this.GetFn("GetStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); + return GetStatistic((int)(statisticType as IConvertible)); + } + protected int SetStatistic (int statisticType, int value) + { + return stats.Statistics[statisticType] = value; + } + protected int SetStatistic (T statisticType, int value) where T : struct, IConvertible + { + if (!(statisticType is Enum)) + throw new ArgumentException(this.GetFn("SetStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); + return SetStatistic((int)(statisticType as IConvertible), value); + } + protected int IncrementStatistic (int statisticType, int increment = 1) + { + return stats.Statistics[statisticType] = GetStatistic(statisticType) + increment; + } + protected int IncrementStatistic (T statisticType, int increment = 1) where T : struct, IConvertible + { + if (!(statisticType is Enum)) + throw new ArgumentException(this.GetFn("IncrementStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); + return IncrementStatistic((int)(statisticType as IConvertible), increment); + } + protected void ClearStatistic (int statisticType) + { + if (stats.Statistics.ContainsKey(statisticType)) + stats.Statistics.Remove(statisticType); + } + protected void ClearStatistic (T statisticType) where T : struct, IConvertible + { + if (!(statisticType is Enum)) + throw new ArgumentException(this.GetFn("ClearStatistic") + " parameter must be an enumerated type. Type supplied: " + typeof(T).Name); + ClearStatistic((int)(statisticType as IConvertible)); + } + private void ClearStatistics () + { + stats.Statistics.Clear(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs new file mode 100644 index 0000000..640400b --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Procs/SbmProcess_Commodity_Export.cs @@ -0,0 +1,859 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.IO; +using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.Utils; +using Sarand.Net.Standard.Proc.Excel; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Procs +{ + //======================================================================= + public class SbmProcess_Commodity_Export : SbmProcess_Base + { + //------------------------------------------------------------------- + // Configuration. + public new class Config : SbmProcess_Base.Config + { + public Config (SbmUserContext userContext) : base(userContext) + { + ItemType = Sbm.ItemType.Commodity; + DataFormat = DataFormatType.Excel; + ProcessType = ProcessType.ExportData; + ConfirmInterruption = true; + } + public ExportType ExportType { get; set; } = ExportType.Overview; + public SbmCommodity.Params CommodityParams { get; set; } + } + + //------------------------------------------------------------------- + // Definitions. + public enum ExportType + { + Overview, + StockControl, + PurchasePlanning, + PurchasePlanning_ImminentStock, + ActualSales, + ProjectedSales, + }; + public enum ProcessOptionFlag + { + Unknown = 0, + IncludeCol_MaterialCost, + IncludeCol_CostPrice, + IncludeCol_RetailPrice, + IncludeCol_StockCurrent, + IncludeCol_StockAvailable, + IncludeCol_StockDue_MonthTo03, + IncludeCol_StockDue_MonthTo06, + }; + /// Process parameters - processing control properties + public new class ProcessParams : SbmProcess_Base.ProcessParams + { + public bool CommodityProcessesExist { get; set; } = false; + public uint HomeColumn { get; set; } = 1; + public uint HomeRow { get; set; } = 1; + public long CommodityCountTotal { get; set; } = -1; + public uint HeaderCaptionRow { get; set; } = 1; + public uint FirstDataRow { get; set; } = 2; + public uint FirstDataColumn { get; set; } = 1; + // Processing options. + public bool IncludeCol_MaterialCost { get; set; } + public bool IncludeCol_CostPrice { get; set; } + public bool IncludeCol_RetailPrice { get; set; } + public bool IncludeCol_StockCurrent { get; set; } + public bool IncludeCol_StockAvailable { get; set; } + public bool IncludeCol_StockDue_3Months { get; set; } + public bool IncludeCol_StockDue_6Months { get; set; } + } + /// Processing statistics - keep track of number of items actioned. + public enum ProcessingStatistic + { + CommoditiesExported, + } + + //------------------------------------------------------------------- + // Data members. + private Config config; + private static String OptionName_Flag = "Flag"; + private List optionContexts_Flag = new List(); + private List processingOptionDfns = new List(); + private List processingOptions = new List(); + private readonly List displayColumns = new List(); + private readonly List additionalQueryColumns = new List(); + + //------------------------------------------------------------------- + // Construction. + public SbmProcess_Commodity_Export (Config config) : base(config) + { + this.config = config; + Params.CommodityProcessesExist = ProcessMgr.HasProcesses(Sbm.ProcessCategory.Commodity); + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + protected ProcessParams Params { get; } = new ProcessParams(); + public override string ProcessDescription + { + get + { + String processDescription = "Commodities to Excel"; + if (config.ExportType == ExportType.Overview) + processDescription += " - Overview"; + else if (config.ExportType == ExportType.StockControl) + processDescription += " - Stock"; + else if (config.ExportType == ExportType.PurchasePlanning) + processDescription += " - Purchasing"; + else if (config.ExportType == ExportType.PurchasePlanning_ImminentStock) + processDescription += " - Purchasing (imminent stock)"; + else if (config.ExportType == ExportType.ActualSales) + processDescription += " - Actual Sales"; + else if (config.ExportType == ExportType.ProjectedSales) + processDescription += " - Projected Sales"; + return processDescription; + } + } + public override List ProcessComments + { + get + { + List processComments = new List(); + CalculateItemCount(); + processComments.Add("Commodities to export: " + Params.CommodityCountTotal); + processComments.AddRange(config.CommodityParams.GetDisplayValues(UserContext).Concat("=")); + processComments.AddRange(base.ProcessComments); + return processComments; + } + } + /// Processing statistics. + public override List ProcessingStatistics + { + get + { + List stats = new List(); + if (GetStatistic(ProcessingStatistic.CommoditiesExported) > 0) stats.Add("Commodities exported", GetStatistic(ProcessingStatistic.CommoditiesExported).ToString()); + return stats; + } + } + // Control values. + public static decimal ReorderPercGreen { get; } = 125.0m; + public static decimal ReorderPercRed { get; } = 75.0m; + public static decimal BudgetPercGreen { get; } = 125.0m; + public static decimal BudgetPercRed { get; } = 75.0m; + + //------------------------------------------------------------------- + // Utilities. + private void CalculateItemCount () + { + if (Params.CommodityCountTotal >= 0 || !OK) return; + Params.CommodityCountTotal = CommodityMgr.GetCommodityCount(config.CommodityParams); + } + + //------------------------------------------------------------------- + // P r o c e s s i n g O p t i o n s + //------------------------------------------------------------------- + public override bool HasProcessingOptions () + { + PopulateProcessingOptionDfns(); + return true; + } + private void PopulateProcessingOptionDfns () + { + if (processingOptionDfns.Count > 0) return; + if (config.ExportType == ExportType.ActualSales || config.ExportType == ExportType.ProjectedSales) + { + // Processing options - flags. + if (optionContexts_Flag.Count == 0) + { + optionContexts_Flag.Add(ProcessOptionFlag.IncludeCol_MaterialCost, "IncludeCol_MaterialCost", "Include column - " + ConfigConsole.GetAttributeCaption(UserContext, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, "Material cost")); + optionContexts_Flag.Add(ProcessOptionFlag.IncludeCol_CostPrice, "IncludeCol_CostPrice", "Include column - " + ConfigConsole.GetAttributeCaption(UserContext, SbmDbDfn.ColumnIdx.Commodity_CostPrice, "Cost price")); + optionContexts_Flag.Add(ProcessOptionFlag.IncludeCol_RetailPrice, "IncludeCol_RetailPrice", "Include column - " + ConfigConsole.GetAttributeCaption(UserContext, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, "Retail price")); + optionContexts_Flag.Add(ProcessOptionFlag.IncludeCol_StockCurrent, "IncludeCol_StockCurrent", "Include column - Stock: current"); + optionContexts_Flag.Add(ProcessOptionFlag.IncludeCol_StockAvailable, "IncludeCol_StockAvailable", "Include column - Stock: available"); + optionContexts_Flag.Add(ProcessOptionFlag.IncludeCol_StockDue_MonthTo03, "IncludeCol_StockDue_MonthTo03", "Include column - Stock: due to 3 months"); + optionContexts_Flag.Add(ProcessOptionFlag.IncludeCol_StockDue_MonthTo06, "IncludeCol_StockDue_MonthTo06", "Include column - Stock: due to 6 months"); + } + SaItemOptionDfn optionDfn = new SaItemOptionDfn(); + optionDfn.Name = OptionName_Flag; + optionDfn.DisplayOptions.Contexts.AddRange(optionContexts_Flag.ToCodeDescList()); + optionDfn.DisplayOptions.RequiresContext = true; + optionDfn.DisplayOptions.Values.AddRange(Sbm.ValuesYesNo); + optionDfn.DefaultValue = Sbm.ValueNo; + processingOptionDfns.Add(optionDfn); + // Item options - flags. + foreach (TypeCodeDesc optionContext_Flag in optionContexts_Flag) + { + // Ignore option if already defined. + if (processingOptions.IsOptionDefined(OptionName_Flag, optionContext_Flag.Code)) continue; + SaItemOption option = ItemOptionConsole.CreateItemOption(null, OptionName_Flag, optionContext_Flag.Code); + option.Value = Sbm.ValueNo; + processingOptions.Add(option); + } + } + } + + //------------------------------------------------------------------- + // P r o c e s s i n g + //------------------------------------------------------------------- + protected override bool Run () + { + SetProgressInfo("Preparing to export data to Excel."); + ResetProcess(); + ValidateConfig(); + + // ToDo Save Folder... + String saveFolder = ""; //GetOption_SaveFolder(); + if (OK && !StringUtil.IsEmpty(saveFolder) && !DirectoryUtil.DirectoryExists(saveFolder)) + SetProcessError("Invalid output folder specified."); + + // Perform export. + if (OK) + ExportData(); + + SetProgressInfo("Cleaning up ..."); + + return OK; + } + + //------------------------------------------------------------------- + protected override void ResetProcess () + { + base.ResetProcess(); + + // Reset parameters. + Params.HomeColumn = 1; + Params.HomeRow = Params.FirstDataRow; + } + + //------------------------------------------------------------------- + private bool ValidateConfig () + { + if (!OK) return false; + + // Validate environment. + if (CommodityMgr == null) return SetProcessError("Unable to initialise commodity manager"); + if (ProcessMgr == null) return SetProcessError("Unable to initialise process manager"); + if (ReferenceDataConsole == null) return SetProcessError("Reference data console not available"); + + if (config.DataFormat != DataFormatType.Excel) return SetProcessError("Only Excel export format supported."); + + // Data field columns. + Params.IncludeCol_MaterialCost = StringUtil.ToBool(GetProcessingOptionValue(OptionName_Flag, optionContexts_Flag.GetCodeForType(ProcessOptionFlag.IncludeCol_MaterialCost))); + Params.IncludeCol_CostPrice = StringUtil.ToBool(GetProcessingOptionValue(OptionName_Flag, optionContexts_Flag.GetCodeForType(ProcessOptionFlag.IncludeCol_CostPrice))); + Params.IncludeCol_RetailPrice = StringUtil.ToBool(GetProcessingOptionValue(OptionName_Flag, optionContexts_Flag.GetCodeForType(ProcessOptionFlag.IncludeCol_RetailPrice))); + Params.IncludeCol_StockCurrent = StringUtil.ToBool(GetProcessingOptionValue(OptionName_Flag, optionContexts_Flag.GetCodeForType(ProcessOptionFlag.IncludeCol_StockCurrent))); + Params.IncludeCol_StockAvailable = StringUtil.ToBool(GetProcessingOptionValue(OptionName_Flag, optionContexts_Flag.GetCodeForType(ProcessOptionFlag.IncludeCol_StockAvailable))); + Params.IncludeCol_StockDue_3Months = StringUtil.ToBool(GetProcessingOptionValue(OptionName_Flag, optionContexts_Flag.GetCodeForType(ProcessOptionFlag.IncludeCol_StockDue_MonthTo03))); + Params.IncludeCol_StockDue_6Months = StringUtil.ToBool(GetProcessingOptionValue(OptionName_Flag, optionContexts_Flag.GetCodeForType(ProcessOptionFlag.IncludeCol_StockDue_MonthTo06))); + + return OK; + } + + //------------------------------------------------------------------- + // E x p o r t D a t a + //------------------------------------------------------------------- + private bool ExportData () + { + if (!OK) return false; + String fn = this.GetFn("ExportData"); + String progressPrefix = "Preparing worksheet"; + + //String saveFolder = ""; //GetOption_SaveFolder(); + + // Create a new spreadsheet. + SetProgressInfo("Opening Excel application."); + try + { + using (SaMsSpreadsheet spreadsheet = new SaMsSpreadsheet_POI()) + { + spreadsheet.CreateWorkbook(); + SetProgressInfo(progressPrefix); + spreadsheet.SetWorksheetCount(1); + OpenWorkSheet(spreadsheet, 1, "Commodities"); + + PrepareColumns(); + + // Headings. + SetProgressInfo(progressPrefix + " - Populating headings"); + SaMsExcelColumnHeading_Config configHeadings = new SaMsExcelColumnHeading_Config(); + configHeadings.HeadingFontSize = 10; + configHeadings.FirstHeadingRow = 1; + configHeadings.InteriorColour = ColorTranslator.ToOle(ExcelColumnHeadingColor); + configHeadings.BorderWeight = SaXlBorderWeight.Thin; + configHeadings.FreezeColumn = (uint)(displayColumns.GetPosForId(SbmCommodity.Column.Code) + 1); + spreadsheet.SetColumnHeadings(displayColumns, configHeadings); + + Params.HomeColumn = configHeadings.FreezeColumn + 1; + Params.HomeRow = Params.FirstDataRow; + + ExportCommoditiesToExcel(spreadsheet); + + // Complete worksheet and make visible. + SetProgressInfo("Releasing document and opening Excel."); + spreadsheet.OpenWorksheet(1); + spreadsheet.SetActiveCell(Params.HomeColumn, Params.HomeRow); + //spreadsheet.MakeVisible(true); + } + } + catch (Exception exc) + { + SaLogger.Error(fn + " " + ExceptionUtil.GetLogMessage(exc)); + return SetProcessError(exc.GetType().Name + " exporting data to Excel."); + } + + return OK; + } + + //------------------------------------------------------------------- + private void PrepareColumns () + { + displayColumns.Clear(); + additionalQueryColumns.Clear(); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Pos)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Code, "Code", 140)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.DescBrief, "Description", 240)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityCategory)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Category1_Desc)); + if (UserContext.GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn.Commodity_CatalogRef)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.CatalogRef)); + + if (config.ExportType == ExportType.StockControl) + { + // Stock control: + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Available)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderQty)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentVsReorder)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_AvailVsReorder)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesYtdCalendar)); + // Stock movements by future weeks. + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week1)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week1)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week2)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week2)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week3To4)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week3To4)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week5To6)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week5To6)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week7To8)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week7To8)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week9To10)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week9To10)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week11To12)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week11To12)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week13On)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_Week13On)); + } + else if (config.ExportType == ExportType.PurchasePlanning || config.ExportType == ExportType.PurchasePlanning_ImminentStock) + { + // Purchasing planning: + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesYtdCalendar)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderQty)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.StockTake_Date)); + if (config.ExportType == ExportType.PurchasePlanning) + { + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Available)); + } + else if (config.ExportType == ExportType.PurchasePlanning_ImminentStock) + { + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_ImminentLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_ImminentVsReorder)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_ImminentAvailable)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_ImminentAvailVsReorder)); + // Stock sold in past 12 weeks: + config.CommodityParams.ProjectedSalesFrom = DateTime.Today.StartOfWeek().IncrementDate(-12 * 7); + config.CommodityParams.StockSoldFrom = config.CommodityParams.ProjectedSalesFrom; + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesProj_Period, "Budget since " + DateUtil.Format(config.CommodityParams.ProjectedSalesFrom, "dd-MMM"))); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.StockSold_Period, "Sold since " + DateUtil.Format(config.CommodityParams.StockSoldFrom, "dd-MMM"))); + } + // Stock due by week from today. + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week1)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week2)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week3)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week4)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week5)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week6)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week7)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week8)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week9)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week10)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week11)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week12)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Week13On)); + // Other commodity details: + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Supplier_Name)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Supplier_Ref)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.MaterialCost_Fmt)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.CostPrice)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesPrice)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.RetailPrice)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.PackQtySale)); + if (UserContext.GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn.Commodity_Weight)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Weight_ValueUnits)); + if (UserContext.GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn.Commodity_PackQtySale)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.PackQtySale)); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_Volume)) + { + // Aug16 Cadix Was just SbmCommodity.Column.Volume_ValueUnits + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Volume)); + //displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Volume_Unit)); + } + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_BoxQuantity)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.BoxQuantity_ValueUnits)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Dimensions)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityMaterial)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.MaterialDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityFinish)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.FinishDesc)); + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ICNTariffCode)); + + if (config.ExportType == ExportType.PurchasePlanning) + { + } + else if (config.ExportType == ExportType.PurchasePlanning_ImminentStock) + { + // Additional columns required for query: + additionalQueryColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel)); + additionalQueryColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Due_Imminently)); + // Sales budget: + if (UserContext.GetOwnerOption_AllowOption(Sbm.OrgOption_AllowOption.Commodity_SalesBudget)) + { + for (int monthIdx = 0; monthIdx < 12; monthIdx++) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.SalesProj_Jan + monthIdx))); + } + } + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.DescDetail)); + } + else if (config.ExportType == ExportType.ActualSales) + { + // Optional columns: + if (Params.IncludeCol_MaterialCost) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.MaterialCost)); + if (Params.IncludeCol_CostPrice) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.CostPrice)); + if (Params.IncludeCol_RetailPrice) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.RetailPrice)); + if (Params.IncludeCol_StockCurrent) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel_All)); + if (Params.IncludeCol_StockAvailable) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_All)); + if (Params.IncludeCol_StockDue_3Months) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_MonthTo03)); + if (Params.IncludeCol_StockDue_6Months) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_MonthTo06)); + // Standard columns: + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderQty)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesProj_Annual)); + + // Derive appropriate columns for the current month and previous 11 months. + int iMonthCount = 0; + for (DateTime columnDate = DateTime.Today.StartOfMonth(); iMonthCount < 12; columnDate.EndOfMonth().IncrementDate(1), iMonthCount++) + { + // Actual sales. + if (iMonthCount == 0) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesMonthCurrent, "Sales " + DateUtil.Format(columnDate, "MMM-yy"))); + else if (iMonthCount <= 12) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.SalesMonthPast01 + iMonthCount - 1), "Sales " + DateUtil.Format(columnDate, "MMM-yy"))); + // Sales budget. + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.SalesProj_Jan + columnDate.Month - 1), "Budget " + DateUtil.Format(columnDate, "MMM-yy"))); + } + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesYtdCalendar)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesPyCalendar)); + } + else if (config.ExportType == ExportType.ProjectedSales) + { + // Optional columns: + if (Params.IncludeCol_MaterialCost) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.MaterialCost)); + if (Params.IncludeCol_CostPrice) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.CostPrice)); + if (Params.IncludeCol_RetailPrice) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.RetailPrice)); + if (Params.IncludeCol_StockCurrent) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel_All)); + if (Params.IncludeCol_StockAvailable) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated_All)); + if (Params.IncludeCol_StockDue_3Months) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_MonthTo03)); + if (Params.IncludeCol_StockDue_6Months) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_MonthTo06)); + // Fixed columns: + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderLevel)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderQty)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesProj_Annual)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel)); + + // 'Purchase budget' to be total of the proposed 'planned' status for containers. + // For each month: Projected sales, Due in, End of month stock: + int iMonthCount = 0; + for (DateTime columnDate = DateTime.Today.StartOfMonth(); iMonthCount < 12; columnDate.EndOfMonth().IncrementDate(1), iMonthCount++) + { + // Projected sales: + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.SalesProj_Jan + columnDate.Month - 1), "Sales " + DateUtil.Format(columnDate, "MMM-yy"))); + + // Allocations - to be queried to check whether they are greater than the budget: + if (iMonthCount <= 12) // Allows for current month and up to 12 in the future. + { + additionalQueryColumns.Add(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.Stock_Allocated_MonthCurrent + iMonthCount))); + } + + // Due in: + if (iMonthCount <= 12) // Allows for current month and up to 12 in the future. + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.Stock_DueIn_MonthCurrent + iMonthCount))); + + // End of month stock: + if (iMonthCount <= 12) // Allows for current month and up to 12 in the future. + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.Stock_EndOfMonth_Current + iMonthCount))); + } + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_DueIn_Provisional)); + } + else + { + // Standard column list. + if (ConfigConsole.DisplayAttribute(UserContext, SbmDbDfn.ColumnIdx.Commodity_DrawingIssue)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.DrawingIssue)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Status_Current_X)); + // Only show 'Type' column if type not selected: + if (config.CommodityParams.CommodityType <= 0) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Type_Desc)); + if (ConfigConsole.AllowOption(UserContext, Sbm.ConfigOption.CommodityExclusiveToCustomer)) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Customer_Name)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SalesPrice)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityRange)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.RangeDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityColour)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ColourDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommoditySource)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SourceDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommoditySupplyMethod)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.SupplyMethodDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityHandling)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.HandlingDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityDelivery)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.DeliveryDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityMaterial)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.MaterialDesc)); + if (CommodityMgr.CodeTypeHasCodes(Sbm.ApplCodeType.CommodityFinish)) displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.FinishDesc)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.CostPrice)); + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Supplier_Name)); + //displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.UnitOfSale)); + //displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.TaxCode)); + //displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.TaxRate)); + if (Params.CommodityProcessesExist) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Process_Count)); + } + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Notes)); + if (DebugMode) + displayColumns.Add(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Id)); + } + + //------------------------------------------------------------------- + private class ProjectedSalesData + { + public void Clear () + { + SalesBudget = 0.0m; + Allocated = 0.0m; + ProjectedSales = DueIn = 0.0m; + EndOfMonth = 0.0m; + } + public decimal SalesBudget { get; set; } + public decimal Allocated { get; set; } + public decimal ProjectedSales { get; set; } + public decimal DueIn { get; set; } + public decimal EndOfMonth { get; set; } + } + + //------------------------------------------------------------------- + // E x p o r t C o m m o d i t i e s T o E x c e l + //------------------------------------------------------------------- + private bool ExportCommoditiesToExcel (SaMsSpreadsheet spreadsheet) + { + if (!OK) return false; + String fn = this.GetFn("ExportCommoditiesToExcel"); + String progressPrefix = "Exporting commodities"; + SetProgressInfo(progressPrefix + " - Preparing data"); + + // Projected sales. + ProjectedSalesData[] projectedSales = new ProjectedSalesData [12]; + for (int projectedSaleIdx = 0; projectedSaleIdx < projectedSales.Length; projectedSaleIdx++) + projectedSales[projectedSaleIdx] = new ProjectedSalesData(); + decimal[]projectedSalesBudget = new decimal[12]; + + // Columns to query. + List queryColumns = new List (displayColumns); + foreach (ColumnDfn column in additionalQueryColumns) + { + if (!queryColumns.HasId(column.Id)) + queryColumns.Add(column); + } + bool bHasProjSalesData = queryColumns.HasId(SbmCommodity.Column.SalesProj_Jan); + + // Common column data names. + String col_Code = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Code).DataName; + String col_Status = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Status).DataName; + String col_DescDetail = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.DescDetail).DataName; + String col_Notes = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Notes).DataName; + String col_Type = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Type_Desc).DataName; + String col_LastStockTake = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.StockTake_Date).DataName; + String col_CurrentLevel = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel).DataName; + String col_DueImminently = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Due_Imminently).DataName; + String col_ReorderLevel = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.ReorderLevel).DataName; + String col_TotalAllocated = CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_Allocated).DataName; + + // Progress is refreshed every few rows. + long commodityCount = 0; + Params.CommodityCountTotal = CommodityMgr.GetCommodityCount(config.CommodityParams); + int progressRefreshRows = (int)Math.Max(5,Params.CommodityCountTotal/(Params.CommodityCountTotal>1000?1000:100)); + + using (DbResultSet resultSet = CommodityMgr.ExecuteCommodityQuery(queryColumns, config.CommodityParams)) + { + if (resultSet.HasErrorState()) return SetProcessError(resultSet.ErrorState.Message); + if (resultSet == null) return SetProcessError("Failed to query commodity data"); + while (OK && resultSet != null && resultSet.NextRecord()) + { + if (++commodityCount % progressRefreshRows == 0 || commodityCount == 1) + SetProgressInfo(progressPrefix + " - Populating data" + (Params.CommodityCountTotal > 0 ? " [" + (commodityCount * 100.0 / Params.CommodityCountTotal).ToString("N0") + "%]" : "")); + NamedValue.Map values = resultSet.GetRecordValues(); + uint iRow = (uint)(Params.FirstDataRow + commodityCount - 1); + + String commodityCode = values.GetValue(col_Code).ToString(); + + if (config.ExportType == ExportType.ProjectedSales) + { + // For each month: Projected sales, Due in, End of month stock: + for (int monthIdx = 0; monthIdx < 12; monthIdx++) + { + DateTime monthDate = DateTime.Today.StartOfMonth().IncrementMonth(monthIdx); + ProjectedSalesData projSales = projectedSales[monthIdx]; + projSales.Clear(); + projSales.SalesBudget = values.GetDecimal(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.SalesProj_Jan + monthDate.Month - 1)).DataName); + projSales.Allocated = values.GetDecimal(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.Stock_Allocated_MonthCurrent + monthIdx)).DataName); + projSales.ProjectedSales = Math.Max(projSales.SalesBudget, projSales.Allocated); + projSales.DueIn = values.GetDecimal(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.Stock_DueIn_MonthCurrent + monthIdx)).DataName); + projSales.EndOfMonth = monthIdx > 0 ? projectedSales[monthIdx - 1].EndOfMonth : values.GetDecimal(CommodityMgr.GetCommodityColumnDfn(SbmCommodity.Column.Stock_CurrentLevel).DataName); + projSales.EndOfMonth += projSales.DueIn - projSales.ProjectedSales; + } + } + // Retrieve budget sales figures by calendar month. + for (int i = 0; i < 12; i++) + projectedSalesBudget[i] = bHasProjSalesData ? values.GetDecimal(CommodityMgr.GetCommodityColumnDfn((SbmCommodity.Column)(SbmCommodity.Column.SalesProj_Jan + i)).DataName) : 0.0m; + + // Common values used in calculations. + // Currently in stock. + decimal currentStock = !col_CurrentLevel.IsEmpty() ? values.GetDecimal(col_CurrentLevel) : 0.0m; + // Stock due imminently. + decimal imminentStock = Math.Max(0.0m, !col_DueImminently.IsEmpty() ? values.GetDecimal(col_DueImminently) : 0.0m); + decimal reorderLevel = !col_ReorderLevel.IsEmpty() ? values.GetDecimal(col_ReorderLevel) : 0.0m; + decimal allocatedStock = !col_TotalAllocated.IsEmpty() ? values.GetDecimal(col_TotalAllocated) : 0.0m; + decimal availableStock = currentStock - allocatedStock; + + // Output the value for each column in turn. + List cellValues = new List(); + for (int columnIdx = 0; columnIdx < displayColumns.Count; columnIdx++) + { + ColumnDfn column = displayColumns[columnIdx]; + SaMsExcelItemAttr attrCell = new SaMsExcelItemAttr(); + bool cellAttributesPopulated = false; + + // Intercept specific values. + DataValue value = new DataValue(); + if (column.Id == (int)SbmCommodity.Column.Pos) + { + value = new DataValue("'" + commodityCount + "."); + } + + //--------------------------------------------------------- + else if (column.Id == (int)SbmCommodity.Column.Status_Current_X) + { + String statusCode = values.GetString(col_Status); + if (SacsSystem.GetStatusForCode(statusCode) != SaStatus.Current) + { + value = new DataValue("X"); + attrCell.Bold = true; + attrCell.FontColourIndex = SaXlColourIndex.Red; + cellAttributesPopulated = true; + } + } + //--------------------------------------------------------- + // Stock take: + else if (column.Id == (int)SbmCommodity.Column.StockTake_Date) + { + value = values.GetValue(col_LastStockTake); + } + //--------------------------------------------------------- + // Stock levels: + else if (column.Id == (int)SbmCommodity.Column.Stock_Available) + { + value = new DataValue(availableStock); + if (availableStock < -0.001m) + { + attrCell.Bold = true; + attrCell.FontColourIndex = SaXlColourIndex.Red; //38; // Pale red (pink). + cellAttributesPopulated = true; + } + } + else if (column.Id == (int)SbmCommodity.Column.Stock_CurrentVsReorder) + { + decimal currentPropReorder = (reorderLevel > 0.0m ? currentStock * 100.0m / reorderLevel : 0.0m); + value = new DataValue(currentPropReorder); + } + else if (column.Id == (int)SbmCommodity.Column.Stock_AvailVsReorder) + { + decimal availPropReorder = (reorderLevel > 0.0m ? Math.Max(0,availableStock) * 100.0m / reorderLevel : 0.0m); + value = new DataValue(availPropReorder); + } + //--------------------------------------------------------- + // Stock levels taking imminent stock into account: + else if (column.Id == (int)SbmCommodity.Column.Stock_ImminentLevel) + { + value = new DataValue(currentStock + imminentStock); + } + else if (column.Id == (int)SbmCommodity.Column.Stock_ImminentAvailable) + { + decimal imminentAvailable = Math.Max(0, (currentStock + imminentStock) - allocatedStock); + value = new DataValue(imminentAvailable); + } + else if (column.Id == (int)SbmCommodity.Column.Stock_ImminentVsReorder) + { + decimal imminentPropReorder = (reorderLevel > 0.0m ? (currentStock + imminentStock) * 100.0m / reorderLevel : 0.0m); + value = new DataValue(imminentPropReorder); + } + else if (column.Id == (int)SbmCommodity.Column.Stock_ImminentAvailVsReorder) + { + if (reorderLevel > 0.0m) + { + decimal imminentAvailable = Math.Max(0, (currentStock + imminentStock) - allocatedStock); + decimal imminentAvailablePropReorder = (imminentAvailable * 100.0m) / reorderLevel; + value = new DataValue(imminentAvailablePropReorder); + if (imminentAvailablePropReorder < ReorderPercRed) + attrCell.InteriorColourIndex = SaXlColourIndex.Rose; + else if (imminentAvailablePropReorder < ReorderPercGreen) + attrCell.InteriorColourIndex = SaXlColourIndex.Tan; + cellAttributesPopulated = true; + } + } + //--------------------------------------------------------- + // Projected sales: + else if (column.Id == (int)SbmCommodity.Column.SalesProj_Period || column.Id == (int)SbmCommodity.Column.StockSold_Period) + { + // Calculate the projected sales for the specified period: + decimal salesProjPeriod = 0.0m; + DateTime dTo = DateTime.Today; + if (DateUtil.IsValid(config.CommodityParams.ProjectedSalesTo)) dTo = config.CommodityParams.ProjectedSalesTo; + for (DateTime d = config.CommodityParams.ProjectedSalesFrom; DateUtil.IsValid(d) && d <= dTo; d.IncrementDate(1)) + { + decimal salesProjMonth = projectedSalesBudget[d.Month-1]; + salesProjPeriod += salesProjMonth / d.EndOfMonth().Day; + } + if (column.Id == (int)SbmCommodity.Column.SalesProj_Period) + value = new DataValue(salesProjPeriod); + else if (column.Id == (int)SbmCommodity.Column.StockSold_Period) + { + decimal stockSoldPeriod = values.GetDecimal(column.DataName); + decimal percSoldVsBudget = salesProjPeriod > 0.0m ? stockSoldPeriod / salesProjPeriod * 100.0m : 0.0m; + value = new DataValue(stockSoldPeriod); + if (percSoldVsBudget < BudgetPercRed) + attrCell.InteriorColourIndex = SaXlColourIndex.Rose; + else if (percSoldVsBudget < BudgetPercGreen) + attrCell.InteriorColourIndex = SaXlColourIndex.Tan; + cellAttributesPopulated = true; + } + } + else if (config.ExportType == ExportType.ProjectedSales && + (column.Id >= (int)SbmCommodity.Column.SalesProj_Jan && column.Id <= (int)SbmCommodity.Column.SalesProj_Dec)) + { + // Projected sales - the greater of either allocations or budget for the month: + int iMonth = column.Id - (int)SbmCommodity.Column.SalesProj_Jan; + if (iMonth >= 0 && iMonth <= 12) + { + ProjectedSalesData projSales = projectedSales[iMonth]; + value = new DataValue(projSales.ProjectedSales); + attrCell.BorderLeft.Weight = SaXlBorderWeight.Thin; + attrCell.BorderLeft.LineStyle = SaXlLineStyle.Continuous; + cellAttributesPopulated = true; + } + } + else if (config.ExportType == ExportType.ProjectedSales && + (column.Id >= (int)SbmCommodity.Column.Stock_EndOfMonth_Current && column.Id <= (int)SbmCommodity.Column.Stock_EndOfMonth_12)) + { + // End of month projected stock level: + int iMonth = column.Id - (int)SbmCommodity.Column.Stock_EndOfMonth_Current; + if (iMonth >= 0 && iMonth <= 12) + { + ProjectedSalesData projSales = projectedSales[iMonth]; + value = new DataValue(projSales.EndOfMonth); + + // Check month end stock level against reorder level. + if (projSales.EndOfMonth < 0.0m) + attrCell.InteriorColourIndex = SaXlColourIndex.Rose; + else if (reorderLevel > 0.0m && projSales.EndOfMonth <= reorderLevel) + attrCell.InteriorColourIndex = SaXlColourIndex.Tan; + cellAttributesPopulated = true; + } + } + else if (config.ExportType == ExportType.ProjectedSales && column.Id == (int)SbmCommodity.Column.Stock_DueIn_Provisional) + { + attrCell.BorderLeft.Weight = SaXlBorderWeight.Thin; + attrCell.BorderLeft.LineStyle = SaXlLineStyle.Continuous; + cellAttributesPopulated = true; + } + //--------------------------------------------------------- + // General cell value handling. + if (!value.IsValid()) + { + value = CommodityMgr.GetCommodityDataValue(column, values); + if (!value.IsValid()) + { + // General data value directly from the database: + value = values.GetValue(column.DataName); + } + if (config.ExportType == ExportType.ProjectedSales && column.Id == (int)SbmCommodity.Column.Stock_DueIn_Provisional) + { + attrCell.BorderLeft.Weight = SaXlBorderWeight.Thin; + attrCell.BorderLeft.LineStyle = SaXlLineStyle.Continuous; + cellAttributesPopulated = true; + } + } + if (!column.ShowZeroValues && value.IsNumeric() && value.ToNumeric() == 0.0) + value = new DataValue(); + cellValues.Add(value); + + // Populate the cell's attributes. + if (attrCell.InteriorColourIndex != SaXlColourIndex.NotSpecified) + { + attrCell.InteriorPattern = SaXlPattern.Solid; + attrCell.InteriorPatternColourIndex = SaXlColourIndex.Automatic; + cellAttributesPopulated = true; + } + if (cellAttributesPopulated) + spreadsheet.SetRangeAttr(new SaMsExcelRange(Params.FirstDataColumn + (uint)columnIdx, iRow), attrCell); + } + spreadsheet.SetRangeFormulas(new SaMsExcelRange(Params.FirstDataColumn, iRow, Params.FirstDataColumn + (uint)cellValues.Count - 1, iRow), cellValues.ToObjectList()); + IncrementStatistic(ProcessingStatistic.CommoditiesExported); + } + } + + return OK; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/Procs/Reports/SbmPrint_Footer.cs b/SaBusMgrCoreProcs/Procs/Reports/SbmPrint_Footer.cs new file mode 100644 index 0000000..80e8d31 --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Reports/SbmPrint_Footer.cs @@ -0,0 +1,121 @@ +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Text; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Reports +{ + //========================================================================== + public class SbmPrinter_Footer : SacsDisposable + { + //---------------------------------------------------------------------- + // Configuration. + public class Config + { + public Graphics Graphics { get; set; } + public Rectangle PrintArea { get; set; } + public int PageNumber { get; set; } = 0; + public int PageCount { get; set; } = 0; + public float PosY { get; set; } = 0.0f; + } + + //---------------------------------------------------------------------- + // Data members. + private String footerLeft = ""; + // Drawing tools. + private Font fontFooter; + private Brush brushFooter = new SolidBrush(SbmReport.PrintColor); + + //---------------------------------------------------------------------- + // Construction. + public SbmPrinter_Footer () + { + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + // Data members. + // Drawing tools. + if (fontFooter != null) fontFooter.Dispose(); + if (brushFooter != null) brushFooter.Dispose(); + } + } + + //---------------------------------------------------------------------- + // Initialise tools. + private void InitialiseTools (Config config) + { + // Font proprtional to width of page. + float fontFooterHeight = 12.0f * (config.PrintArea.Width * 0.00080f); + if (fontFooter == null || fontFooter.Size != fontFooterHeight) + { + if (fontFooter != null) fontFooter.Dispose(); + fontFooter = new Font(SbmReport.FontFamilyName, fontFooterHeight); + } + } + + //---------------------------------------------------------------------- + // Project info printing. + public void PrintFooter (Config config) + { + // Initialise tools. + InitialiseTools(config); + GraphicsUnit graphicsUnit = config.Graphics.PageUnit; + SmoothingMode smoothingMode = config.Graphics.SmoothingMode; + TextRenderingHint textRenderingHint = config.Graphics.TextRenderingHint; + + // Construct footer text. + if (StringUtil.IsEmpty(footerLeft)) + footerLeft = "Sarand::LogisticsMgr"; + + // Print footer - Format. + StringFormat footerLabelFormat = new StringFormat(); + footerLabelFormat.Alignment = StringAlignment.Near; + footerLabelFormat.LineAlignment = StringAlignment.Far; + + // Calculate text height to offset from bottom of page. + SizeF footerTextSize = config.Graphics.MeasureString("ABC", fontFooter); + float footerIndentX = config.PrintArea.Width * 0.02f; + float footerIndentY = config.PrintArea.Height * 0.02f; + float posYFooter = config.PrintArea.Bottom - footerIndentY; + + // By default, footer wil be printed at bottom of page bounds (less a margin). + // Specific position - footer position has been stated by caling proc. + if (config.PosY > 0.0f) + { + // Footer will be printed with this position at the top. + posYFooter = config.PosY; + footerLabelFormat.LineAlignment = StringAlignment.Near; + } + + // Print footer - Left. + PointF posFooterLeft = new PointF(config.PrintArea.Left + footerIndentX, posYFooter); + config.Graphics.DrawString(footerLeft, fontFooter, brushFooter, posFooterLeft, footerLabelFormat); + + // Print footer - Center. + if (config.PageNumber > 0 && config.PageCount > 1) + { + String footerCenter = "Page " + config.PageNumber + (config.PageCount > 0 ? " of " + config.PageCount : ""); + PointF posFooterCenter = new PointF(config.PrintArea.Left + (config.PrintArea.Width / 2.0f), posFooterLeft.Y); + footerLabelFormat.Alignment = StringAlignment.Center; + config.Graphics.DrawString(footerCenter, fontFooter, brushFooter, posFooterCenter, footerLabelFormat); + } + + // Print footer - Right. + String footerRight = "Printed: " + DateTime.Now.Format("ddd d-MMM-yyyy HH:mm"); + PointF posFooterRight = new PointF(config.PrintArea.Right - footerIndentX, posFooterLeft.Y); + footerLabelFormat.Alignment = StringAlignment.Far; + config.Graphics.DrawString(footerRight, fontFooter, brushFooter, posFooterRight, footerLabelFormat); + } + + //---------------------------------------------------------------------- + } + //========================================================================== +} diff --git a/SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs b/SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs new file mode 100644 index 0000000..2ce05c8 --- /dev/null +++ b/SaBusMgrCoreProcs/Procs/Reports/SbmReport.cs @@ -0,0 +1,335 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.BusinessMgr.Net.Standard.Base.Procs; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.CodeTypes; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Procs; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Printing; +using System.Drawing.Text; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Utils; + +namespace Sarand.BusinessMgr.Net.Core.Procs.Reports +{ + //======================================================================= + public abstract class SbmReport : SbmReport_Base + { + //------------------------------------------------------------------- + // Definitions. + public enum PrintPageResult + { + HasMorePages, + NoMorePages, + } + protected class PrintPageConfig + { + public PrintPageConfig (Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds, int pageNumber, int pageCount) + { + // Graphics for printing to physical device (printer or print preview control). + Graphics = graphics; + // Printing configuration. + PageSettings = pageSettings; + PageBounds = pageBounds; + Bounds = marginBounds; + PixelsPerInch = new SizeF(Graphics.DpiX, Graphics.DpiY); + TabX = (int)Math.Ceiling(Bounds.Width * 0.025f); + PageNumber = pageNumber; + } + /// Current graphics for printing on page. + public Graphics Graphics { get; private set; } + /// Current page number + public int PageNumber { get; } + /// Virtual page number + public int PageNumberVirtual { get; set; } = 1; + /// Total number of pages + public int PageCount { get; } + /// Page settings from PrintPage event - eg. to modify page length for continuous feed. + public PageSettings PageSettings { get; } + /// Page bounds from PrintPage event - eg. to modify page length for continuous feed. + public Rectangle PageBounds { get; } + // Page bounds. + public Rectangle Bounds { get; set; } + // Pixel sizes. + public SizeF PixelsPerInch { get; } + // Horizontal printing positions. + public int PosXLeft { get { return Bounds.Left; } } + public int PosXCenter { get { return (int)(Bounds.Left + (Bounds.Width * 0.5f)); } } + public int PosXRight { get { return Bounds.Right; } } + public int TabX { get; set; } + public int[] ColsX { get; set; } + // Current vertical print position. + public int PosY { get; set; } + public int PosYBodyTop { get; set; } + public int PosYBodyBottom { get; set; } + public int PosYFooterTop { get; set; } + // Line spacing - proportional to font size. + public float HeadingTextLineSpacing { get; set; } = 1.25f; + public float IntroTextLineSpacing { get; set; } = 1.20f; + public float DetailTextLineSpacing { get; set; } = 1.15f; + } + + //------------------------------------------------------------------- + // Configuration. + public new class Config : SbmReport_Base.Config + { + protected Config (SbmUserContext userContext) : + base(userContext) + { + } + } + + //------------------------------------------------------------------- + // Data members. + protected SbmSystem system = SbmGlobals.System; + private Config config; + /// Print mode controls whether physical printing to printer or preview control or to dummy device to determine page size. + private enum PrintMode { Physical, Virtual } + private PrintMode printMode = PrintMode.Physical; + // Printing tools. + private StringFormat stringFormat = StringFormat.GenericTypographic; + private static ColorConverter colorConverter = new ColorConverter(); + private SbmPrinter_Footer footerPrinter = new SbmPrinter_Footer(); + protected Brush brushBlack = new SolidBrush(Color.Black); + + //------------------------------------------------------------------- + // Construction. + protected SbmReport (Config config) : base(config) + { + this.config = config; + } + protected override void Dispose (bool disposing) + { + if (disposing) + { + stringFormat.Dispose(); + footerPrinter.Dispose(); + brushBlack.Dispose(); + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + public static String FontFamilyName { get; } = "Arial"; + public static Color PrintColor { get; } = Color.Black; + protected StringFormat StringFormat { get { return stringFormat; } } + protected static ColorConverter ColorConverter { get { return colorConverter; } } + // Report printing progress. + /// Check if currently printing to the preview device. + protected bool PreviewPrinting { get; private set; } + /// Check if the current print mode is 'Physical', ie. actually printing to the page. + protected bool PhysicalPrinting { get { return printMode == PrintMode.Physical; } } + /// Check if currently printing to file. + protected bool FilePrinting { get; private set; } + /// Total number of items to be printed + public virtual int ItemCount { get; protected set; } + /// Position of item currently being published in the list. + public virtual int ItemNumber { get; protected set; } + /// Progress based on the item being printed against the total number to be printed. + public override decimal ProgressPercent { get { return (ItemCount > 0 ? (decimal)ItemNumber / ItemCount : 0); } } + + //------------------------------------------------------------------- + // Text utilities. + protected SizeF DrawString (Graphics graphics, String text, Font font, Brush brush, PointF position, StringFormat format) + { + if (!VirtualPrint) + graphics.DrawString(text, font, brush, position, format); + // Calculate size of text. + SizeF sizeText = graphics.MeasureString(text, font); + return sizeText; + } + protected SizeF DrawString (Graphics graphics, String text, Font font, Brush brush, RectangleF position, StringFormat format) + { + if (!VirtualPrint) + graphics.DrawString(text, font, brush, position, format); + // For single lines of text, the height can be different for Physical (printing) and + // Virtual (dummy) graphics even though they appear to be all but identical. + // Closest issue description: https://social.msdn.microsoft.com/Forums/windows/en-US/7a431b8c-3ad5-49d8-b012-f56a21c5cec5/measurestring-returns-different-height-after-text-width-exceeds-layout-width?forum=winforms + SizeF sizeText = graphics.MeasureString(text, font, (int)position.Width, format); + if (sizeText.Height < font.GetHeight(graphics)) + // Aug-2018 Temporary fix. + sizeText.Height = font.GetHeight(graphics); + return sizeText; + } + + //------------------------------------------------------------------- + // Printer configuration. + public abstract void ConfigurePrinter (PageSettings pageSettings); + public abstract void ConfigurePrintPreview (PageSettings pageSettings); + public abstract void ConfigurePageMargins (PageSettings pageSettings); + protected abstract void InitDrawingTools (Graphics graphics, Rectangle bounds); + + //------------------------------------------------------------------- + // P r i n t P a g e S e c t i o n + //------------------------------------------------------------------- + // Solution to how to determine the number of pages in a report and + // print the report across multiple pages even though all printing is + // done via PrintPage() which prints a single page at a time. + /// + /// Print page section - portion of the report that is printed as a contiguous section, ie. all on one page. + /// NB Page sections should be kept short for reports that may run over one page to ensure that the section doesn't overflow a page. + /// eg. A single row in a printed table with optional headings. + /// Method can be anonymous to allow other parameters to be passed in the context of the report's page printing, rathe rthan just relying on the Page Config. + /// + protected delegate void PrintPageSectionFn (); + /// Print mode is either physical - printing to printer or preview control - or virtual - to test whether section fits on page. + protected bool VirtualPrint { get { return printMode == PrintMode.Virtual; } } + private void SwitchPrintMode (PrintMode mode, PrintPageConfig cfg) + { + printMode = mode; + } + /// + /// Test print the page section to verify that it fits on the page, before printing to the physical device. + /// Returns false if section doesn't fit on the page. + /// + protected bool PrintPageSectionIfSpace (PrintPageConfig cfg, PrintPageSectionFn printPageSectionFn) + { + // Make a note of the current print position and test print the section to the virtual page. + int posYInitial = cfg.PosY; + SwitchPrintMode(PrintMode.Virtual, cfg); + printPageSectionFn(); + // Check if the section fits on the page. + if (cfg.PosY >= cfg.PosYBodyBottom) + { + // If the virtual page is the same or greater (shouldn't happen) + // than the current page, a new page is required. + if (cfg.PageNumberVirtual >= cfg.PageNumber) + { + SwitchPrintMode(PrintMode.Physical, cfg); + return false; + } + // Otherwise, we can increment the virtual page and reset printing to the top before reprinting the section. + cfg.PageNumberVirtual++; + cfg.PosY = cfg.PosYBodyTop; + if (cfg.PageNumberVirtual == cfg.PageNumber) + SwitchPrintMode(PrintMode.Physical, cfg); + } + else + { + // Section fits on virtual page. + if (cfg.PageNumberVirtual != cfg.PageNumber) + // Not yet on current page so no need to reprint section. + return true; + // On current page and section needs to be printed at original position to the physical device. + cfg.PosY = posYInitial; + SwitchPrintMode(PrintMode.Physical, cfg); + } + printPageSectionFn(); + SwitchPrintMode(PrintMode.Physical, cfg); + return true; + } + + //------------------------------------------------------------------- + // P r i n t i n g + //------------------------------------------------------------------- + public virtual void BeginPrint (PrintAction printAction, int pageNumberFrom = 0, int pageNumberTo = 0) + { + String fn = GetType().Name + ".BeginPrint"; + if (DebugMode) SaLogger.Debug(fn + " PrintAction: " + printAction + ". Page range: " + pageNumberFrom + "-" + pageNumberTo + ". Page count: " + PageCount); + PageNumberFrom = PageNumberFrom; + PageNumberTo = pageNumberTo; + PageNumber = Math.Max(1, pageNumberFrom) - 1; + ItemCount = 0; + ItemNumber = 0; + PreviewPrinting = printAction == PrintAction.PrintToPreview; + FilePrinting = printAction == PrintAction.PrintToFile; + } + public virtual void QueryPageSettings (PageSettings pageSettings, PrintAction printAction) { } + public PrintPageResult PrintPage (Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds) + { + String fn = GetType().Name + ".PrintPage"; + PageNumber++; + + // Configure graphics for printing document. + // NB Graphics properties set here muust also be copied to virtual device graphics in PrintPageConfig above. + graphics.SmoothingMode = SmoothingMode.AntiAlias; + graphics.TextRenderingHint = TextRenderingHint.AntiAlias; + InitDrawingTools(graphics, marginBounds); + // Configure default String Format. + StringFormat.Alignment = StringAlignment.Near; + StringFormat.LineAlignment = StringAlignment.Near; + StringFormat.FormatFlags = StringFormatFlags.FitBlackBox | StringFormatFlags.LineLimit | StringFormatFlags.NoClip /*| StringFormatFlags.NoWrap */; + StringFormat.Trimming = StringTrimming.Character; + + // Page configuration. + PrintPageConfig cfg = new PrintPageConfig(graphics, pageSettings, pageBounds, marginBounds, PageNumber, PageCount); + cfg.Bounds = marginBounds; + cfg.PosY = marginBounds.Top; + cfg.PosYBodyTop = marginBounds.Top; + cfg.PosYBodyBottom = marginBounds.Bottom; + if (DebugMode) SaLogger.Debug(fn + " Page: " + PageNumber); + SwitchPrintMode(PrintMode.Physical, cfg); + + // Log print configuration. + if (SbmGlobals.System.IsExtendedLogging(SbmSystem.ExtendedLogginOption.Printing)) + LogPageSettings(graphics, pageSettings, pageBounds, marginBounds); + + // Print page and interpret result. + PrintPageResult printPageResult = PrintPage(cfg); + // Update page range information depending on whether this is the last page in the report. + if (printPageResult == PrintPageResult.HasMorePages) + { + PageNumberMaxKnown = Math.Max(PageNumberMaxKnown, PageNumber + 1); + } + else if (printPageResult == PrintPageResult.NoMorePages) + { + PageNumberMaxKnown = PageNumber; + PageCount = PageNumber; + } + // Always return 'No more pages' if finished printing page range. + if (PageNumberTo > 0 && PageNumber + 1 > PageNumberTo) return PrintPageResult.NoMorePages; + return printPageResult; + } + protected abstract PrintPageResult PrintPage (PrintPageConfig cfg); + public virtual void EndPrint (PrintAction printAction) { } + + //------------------------------------------------------------------- + protected void LogPageSettings (Graphics graphics, PageSettings pageSettings, Rectangle pageBounds, Rectangle marginBounds) + { + // Log print configuration. + List info = new List(); + // Color=True, Landscape=False, Margins=[Margins Left=36 Right=36 Top=36 Bottom=36], PaperSize=[PaperSize Custom Kind=Custom Height=3600 Width=1800], PaperSource=[PaperSource unknown Kind=FormSource], PrinterResolution=[PrinterResolution X=600 Y=600]] + info.Add("Bounds", pageSettings.Bounds.ToString()); + info.Add("Color", pageSettings.Color.ToString()); + info.Add("Landscape", pageSettings.Landscape.ToString()); + info.Add("Margins", pageSettings.Margins.ToString()); + info.Add("PaperSize", pageSettings.PaperSize.ToString()); + info.Add("PaperSource", pageSettings.PaperSource.ToString()); + info.Add("PrintableArea", pageSettings.PrintableArea.ToString()); + info.Add("PrinterResolution", pageSettings.PrinterResolution.ToString()); + SaLogger.Info(GetType().Name + "Report: " + Caption + ". Page settings" + (PreviewPrinting ? " [preview]:" : "\n\tPrinter: " + pageSettings.PrinterSettings.PrinterName) + "\n\tPage bounds: " + pageBounds + "\n\tMargin bounds: " + marginBounds + "\n\tPage settings:" + info.Concat(": ").Concat("", "\n\t\t"), true); + } + + //------------------------------------------------------------------- + // H e a d e r a n d F o o t e r + //------------------------------------------------------------------- + protected virtual void PrintHeader (PrintPageConfig cfg) + { + } + + //------------------------------------------------------------------- + // Printing - Footer. + protected virtual void PrintFooter (PrintPageConfig cfg) + { + // Print footer - Format. + SbmPrinter_Footer.Config footerConfig = new SbmPrinter_Footer.Config(); + footerConfig.Graphics = cfg.Graphics; + footerConfig.PrintArea = cfg.Bounds; + footerConfig.PosY = cfg.PosYFooterTop; + footerConfig.PageNumber = PageNumber; + footerConfig.PageCount = PageCount; + footerPrinter.PrintFooter(footerConfig); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreProcs/SaBusMgrCoreProcs.csproj b/SaBusMgrCoreProcs/SaBusMgrCoreProcs.csproj new file mode 100644 index 0000000..709bf4f --- /dev/null +++ b/SaBusMgrCoreProcs/SaBusMgrCoreProcs.csproj @@ -0,0 +1,23 @@ + + + + netcoreapp3.1 + Sarand.BusinessMgr.Net.Core + + + + + + + + + + + + + + + + + + diff --git a/SaBusinessMgrCoreWebOnline/SaBusinessMgrCoreWebOnline.csproj b/SaBusMgrCoreWeb/SaBusMgrCoreWeb.csproj similarity index 59% rename from SaBusinessMgrCoreWebOnline/SaBusinessMgrCoreWebOnline.csproj rename to SaBusMgrCoreWeb/SaBusMgrCoreWeb.csproj index 050a0a7..b65a56d 100644 --- a/SaBusinessMgrCoreWebOnline/SaBusinessMgrCoreWebOnline.csproj +++ b/SaBusMgrCoreWeb/SaBusMgrCoreWeb.csproj @@ -1,19 +1,25 @@ - + netcoreapp3.1 - false + Sarand.BusinessMgr.Net.Core - + + + + + + + diff --git a/SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs new file mode 100644 index 0000000..c76424d --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmApplication_Web.cs @@ -0,0 +1,148 @@ +using Microsoft.Extensions.Configuration; +using Sarand.BusinessMgr.Net.Core.Web.Consoles; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Consoles; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.CodeTypes; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Diary; +using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.IO; +using Sarand.Net.Standard.Base.ItemData; +using Sarand.Net.Standard.Base.ItemDocs; +using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.ReferenceData; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.UpdateLog; +using Sarand.Net.Standard.Base.Utils; +using Sarand.Net.Standard.Dbas.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public abstract class SbmApplication_Web : SbmApplication + { + //------------------------------------------------------------------- + // Data members. + protected Sbm.InstanceType instanceType; + protected String environmentName = ""; + + //------------------------------------------------------------------- + // Protected construction. + protected SbmApplication_Web() : base(new PropertySet()) + { + WebApp = this; + } + + //------------------------------------------------------------------- + // Properties. + public override SbmSystem System { get { return System_Web; } } + public SbmSystem_Web System_Web { get; protected set; } + public static SbmApplication_Web WebApp { get; private set; } + // Application instance. + public override Sbm.InstanceType InstanceType { get { return instanceType; } } + public override String EnvironmentName { get { return environmentName; } } + public bool Development { get; protected set; } + public String LoggingRootFolder { get; protected set; } = ""; + // Application components. + public abstract String SessionCookieName { get; } + public virtual SbmSessionContext SessionContext { get; protected set; } + public abstract SbmSessionConfig SessionConfig { get; } + public override IDatabaseInfo CreateBusMgrDbInfo(SbmSessionContext sessionContext) { return new DbDataItem.DatabaseInfo(GetBusMgrDatabase(sessionContext)); } + // Configuration. + public IConfiguration Configuration { get; protected set; } + public IConfiguration SbmConfiguration { get; protected set; } + + //------------------------------------------------------------------- + // Logging. + protected void LogApplicationStart(String fn) + { + // Log application start. + List applicationParams = new List(); + applicationParams.Add("Host", SbmSystem.ComputerName); + applicationParams.Add("Version", Sbm.Version.GetFullVersion()); + applicationParams.Add("Instance", InstanceType.ToString() + (!StringUtil.IsEmpty(SessionConfig.Instance) ? " [" + SessionConfig.Instance + "]" : "")); + applicationParams.Add("Configuration", SbmSystem.DebugMode ? "Debug" : "Release"); + applicationParams.Add("Environment", EnvironmentName); + applicationParams.Add("Database", SessionConfig.BusMgrDatabase.Location); + applicationParams.Add("Application root", SbmSystem.ApplicationFolder); + if (!StringUtil.IsEmpty(SessionConfig.Documents.RootFolder)) + applicationParams.Add("Documents root", SessionConfig.Documents.RootFolder); + applicationParams.Add("Email context", SessionConfig.Email.Context + (!StringUtil.IsEmpty(EmailConfig.SMTP.Server) ? " [" + EmailConfig.SMTP.Server + "]" : "")); + SaLogger.Info(fn + " Application start." + applicationParams.Select(item => StringUtil.PadRight(item.Item1 + ":", 20, ' ') + item.Item2).Concat("", "\n\t"), true); + } + + //------------------------------------------------------------------- + protected void InitialiseTemporaryLoggingFolder() + { + // Default logging folder - in case of startup failure. + try + { + foreach (String folder in new String[] { @"D:\Sarand\Projects\User\AHoward\VS2017\Sbmonite\Logs" }) + { + if (DirectoryUtil.DirectoryExists(folder)) + { + SaLogger.LogFolder = folder; + break; + } + } + } + catch (Exception) { } + } + + //------------------------------------------------------------------- + // Create consoles. + public override SbmConfigConsole CreateConfigConsole(SbmSessionContext sessionContext) + { + return null; + } + public override SaDiaryConsole CreateDiaryConsole(SbmUserContext userContext) + { + return null; + } + public override SaSecurityConsole CreateSecurityConsole(SbmUserContext userContext) + { + return null; + } + public override SaCodeTypeConsole CreateCodeTypeConsole(SbmUserContext userContext) + { + return null; + } + public override SaReferenceDataConsole CreateReferenceDataConsole(SbmUserContext userContext) + { + return null; + } + public override SaItemDataConsole CreateItemDataConsole(SbmUserContext userContext) + { + return null; + } + public override SaItemDocConsole CreateItemDocConsole(SbmUserContext userContext) + { + return null; + } + public override SaItemOptionConsole CreateItemOptionConsole(SbmUserContext userContext) + { + return null; + } + public override SaInterfaceConsole CreateInterfaceConsole(SbmUserContext userContext) + { + return null; + } + public override SaUpdateLogConsole CreateUpdateLogConsole(SbmUserContext userContext) + { + return null; + } + public override SbmEmailConsole CreateEmailConsole(SbmUserContext userContext) + { + return new SbmEmailConsole_Web(EmailConfig); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/App/SbmLocaliser.cs b/SaBusMgrCoreWeb/Web/App/SbmLocaliser.cs new file mode 100644 index 0000000..6c1dd4b --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmLocaliser.cs @@ -0,0 +1,161 @@ +using Microsoft.AspNetCore.Html; +using Microsoft.Extensions.Localization; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public abstract class SbmLocaliser + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + /// + /// Localisers are supplied by derived object. + /// + protected SbmLocaliser() + { + } + + //------------------------------------------------------------------- + // Properties. + public abstract IStringLocalizer MainProperties { get; } + public virtual List AlternativeProperties { get; } = new List(); + + //------------------------------------------------------------------- + // Generic phrase translation. + //------------------------------------------------------------------- + /// Retrieve localised text. + public LocalizedString GetText(string key) + { + return GetText(key, new object[] { }); + } + public LocalizedString GetText(string key, object param) + { + return GetText(key, new object[] { param }); + } + public LocalizedString GetText(string key, object param1, object param2) + { + return GetText(key, new object[] { param1, param2 }); + } + public LocalizedString GetText(string key, object[] parameters) + { + LocalizedString text = MainProperties.GetString(key, parameters); + if (text.ResourceNotFound) + { + SaLogger.Debug(GetType().Name + ".GetText Key not found: " + key); + // Look up key in alternative property files. + foreach (IStringLocalizer properties in AlternativeProperties ?? new List()) + { + text = properties.GetString(key, parameters); + if (!text.ResourceNotFound) + break; + } + } + return text; + } + + // Square bracket indexing. + public LocalizedString this[String key] + { + get { return GetText(key); } + } + public LocalizedString this[String key, object param] + { + get { return GetText(key, param); } + } + public LocalizedString this[String key, object param1, object param2] + { + get { return GetText(key, param1, param2); } + } + + //------------------------------------------------------------------- + /// + /// Localised HTML text. + /// Line delimiters changed to '
'.
+ ///
+ public HtmlString GetHtmlText(string key, String param1 = "", String param2 = "") + { + return GetHtmlText(key, new Object[] { param1, param2 }); + } + /// + /// Localised HTML text. + /// Line delimiters changed to '
'.
+ ///
+ public HtmlString GetHtmlText(string key, object[] parameters) + { + LocalizedString localisedText = GetText(key, parameters); + String value = localisedText.Value; + // Replace all line delimiters. + value = value.Replace("\r\n", "\n").Replace("\n", "
").Replace("\r", "
"); + return new HtmlString(value); + } + + //------------------------------------------------------------------- + /// + /// Localised javascript string. + /// All quotes are escaped. + /// + public LocalizedString GetJavascriptText(string key, String param1 = "", String param2 = "") + { + LocalizedString localisedText = GetText(key, param1, param2); + return new LocalizedString(localisedText, EscapeJavascriptText(localisedText.Value), localisedText.ResourceNotFound); + } + public String EscapeJavascriptText(string value) + { + // Escape all quotes. + value = value.Replace("'", "\\'").Replace("\"", "\\\""); + return value; + } + + //------------------------------------------------------------------- + // Numeric and datetime formatting + //------------------------------------------------------------------- + public static String DateFormat_Default { get; } = "d-MMM-yyyy"; + public static String DateWithWeekdayFormat_Default { get; } = "ddd d-MMM-yyyy"; + public String FormatDate(DateTime value, Boolean includeWeekday = true) + { + String dateFormat = includeWeekday ? DateWithWeekdayFormat_Default : DateFormat_Default; + return DateUtil.Format(value, dateFormat); + } + + //------------------------------------------------------------------- + // Specific phrase translation. + //------------------------------------------------------------------- + private class CodeCache + { + public List affiliateTypeCodes; + // To be completed. + } + private CodeCache codes = new CodeCache(); + + // Status. + public String GetStatusCaption(SaStatus status) + { + // ToDo Status description localisation. + return SacsSystem.GetStatusDesc(status); + } + + // Affiliate Type. + public String GetAffiliateTypeTypeCaption(Sbm.AffiliateType participation) + { + if ((int)participation < 1) return ""; + if (codes.affiliateTypeCodes == null) + codes.affiliateTypeCodes = SbmSystem.GetCodesOfType(null, Sbm.SystemCode.AffiliateType); + // ToDo Affiliate Type localisation. + return codes.affiliateTypeCodes.GetDescForType(participation); + } + + // To be completed. + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/App/SbmSessionConfig.cs b/SaBusMgrCoreWeb/Web/App/SbmSessionConfig.cs new file mode 100644 index 0000000..4491af4 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmSessionConfig.cs @@ -0,0 +1,199 @@ +using Microsoft.Extensions.Configuration; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public class SbmSessionConfig + { + //--------------------------------------------------------------- + // Data members. + private readonly List environments = new List(); + + //--------------------------------------------------------------- + // Construction. + public SbmSessionConfig(String context, ConfigurationSection configSection, SbmSessionConfig defaultConfig) + { + Context = context; + populateDefaults(defaultConfig); + PopulateConfig(configSection); + } + + //--------------------------------------------------------------- + private void populateDefaults(SbmSessionConfig defaultConfig) + { + if (defaultConfig == null) return; + Security.Password.MinLength = defaultConfig.Security.Password.MinLength; + Security.SignIn.KeepLoggedIn.Allowed = defaultConfig.Security.SignIn.KeepLoggedIn.Allowed; + Security.SignIn.KeepLoggedIn.CookieExpiresDays = defaultConfig.Security.SignIn.KeepLoggedIn.CookieExpiresDays; + } + private void PopulateConfig(ConfigurationSection configSection) + { + if (configSection != null) + { + // Environments. + foreach (ConfigurationSection environment in configSection.GetSection("Environments").GetChildren()) + environments.Add(StringUtil.TrimAll(environment.Value)); + Instance = StringUtil.OnEmpty(configSection["Instance"], Instance); + // Security. + IConfigurationSection security = configSection.GetSection("Security"); + if (security.Exists()) + { + // Security - Password. + IConfigurationSection securityPassword = security.GetSection("Password"); + if (securityPassword.Exists()) + { + Security.Password.MinLength = StringUtil.ToInt(securityPassword["MinLength"], Security.Password.MinLength); + } + // Security - Sign-Up. + IConfigurationSection securitySignUp = security.GetSection("SignUp"); + if (securitySignUp.Exists()) + { + } + // Security - Sign-In. + IConfigurationSection securitySignIn = security.GetSection("SignIn"); + if (securitySignIn.Exists()) + { + IConfigurationSection keepLoggedIn = securitySignIn.GetSection("SignIn"); + if (keepLoggedIn.Exists()) + { + Security.SignIn.KeepLoggedIn.Allowed = StringUtil.ToBool(StringUtil.OnEmpty(keepLoggedIn["Allowed"], Security.SignIn.KeepLoggedIn.Allowed.ToString())); + Security.SignIn.KeepLoggedIn.CookieExpiresDays = StringUtil.ToInt(keepLoggedIn["CookieExpiresDays"], Security.SignIn.KeepLoggedIn.CookieExpiresDays); + } + } + } + // Email. + IConfigurationSection email = configSection.GetSection("Email"); + if (email.Exists()) + { + Email.Context = email["Context"]; + PopulateEmailConfig(Email.ContactUs, email.GetSection("ContactUs")); + PopulateEmailConfig(Email.Signup_Activate, email.GetSection("Signup").GetSection("Activate")); + PopulateEmailConfig(Email.Signup_Welcome, email.GetSection("Signup").GetSection("Welcome")); + } + // Documents. + IConfigurationSection documents = configSection.GetSection("Documents"); + if (documents.Exists()) + { + Documents.RootFolder = StringUtil.OnEmpty(documents["RootFolder"], Documents.RootFolder); + } + // Logging. + IConfigurationSection logging = configSection.GetSection("Logging"); + if (logging.Exists()) + { + Logging.RootFolder = StringUtil.OnEmpty(logging["RootFolder"], Logging.RootFolder); + } + // Database. + extractDatabaseConfig(BusMgrDatabase, configSection.GetSection("CoreDatabase")); + // Variants. + foreach (ConfigurationSection variantSection in configSection.GetSection("Variants").GetChildren()) + { + // Variants override selected values but must match the application root folder to identify a specific instance. + String applicationRootPath = variantSection["ApplicationRootFolder"]; + if (StringUtil.IsEmpty(applicationRootPath)) continue; + if (!SbmSystem.ApplicationFolder.EqualsCI(applicationRootPath)) continue; + PopulateConfig(variantSection); + } + } + } + private void PopulateEmailConfig(EmailConfig.SpecificEmailConfig config, IConfigurationSection emailSection) + { + if (!emailSection.Exists()) return; + foreach (var addressTo in emailSection.GetSection("AddressesTo").GetChildren()) + config.AddressesTo.Add(StringUtil.TrimAll(addressTo.Value)); + foreach (var addressCc in emailSection.GetSection("AddressesCc").GetChildren()) + config.AddressesCc.Add(StringUtil.TrimAll(addressCc.Value)); + foreach (var addressBcc in emailSection.GetSection("AddressesBcc").GetChildren()) + config.AddressesBcc.Add(StringUtil.TrimAll(addressBcc.Value)); + } + private void extractDatabaseConfig(DatabaseConfig database, IConfigurationSection databaseSection) + { + if (!databaseSection.Exists()) return; + database.Location = StringUtil.OnEmpty(databaseSection["Location"], database.Location); + database.User = StringUtil.OnEmpty(databaseSection["User"], database.User); + database.Password = StringUtil.OnEmpty(databaseSection["Password"], database.Password); + } + + //--------------------------------------------------------------- + // Properties. + public String Context { get; } + public List Environments { get { return new List(environments); } } + public String Instance { get; set; } = ""; + // Security. + public class SecurityConfig + { + public class PasswordConfig + { + public int MinLength { get; set; } + } + public PasswordConfig Password { get; } = new PasswordConfig(); + public class SignUpConfig + { + public class ActivationConfig + { + public int EmailLinkExpiresMins = Sbm.Config.Security.Activation.EmailLinkExpiresMins_Default; + } + public ActivationConfig Activation { get; } = new ActivationConfig(); + } + public SignUpConfig SignUp { get; } = new SignUpConfig(); + public class SignInConfig + { + public class PasswordRequestConfig + { + public int EmailLinkExpiresMins = Sbm.Config.Security.Activation.EmailLinkExpiresMins_Default; + } + public PasswordRequestConfig PasswordRequest { get; } = new PasswordRequestConfig(); + public class KeepLoggedInConfig + { + public bool Allowed { get; set; } = Sbm.Config.Security.SignIn.KeepLoggedIn.Allowed_Default; + public int CookieExpiresDays { get; set; } = Sbm.Config.Security.SignIn.KeepLoggedIn.CookieExpiresDays_Default; + } + public KeepLoggedInConfig KeepLoggedIn { get; } = new KeepLoggedInConfig(); + } + public SignInConfig SignIn { get; } = new SignInConfig(); + } + public SecurityConfig Security { get; } = new SecurityConfig(); + // Email. + public class EmailConfig + { + public class SpecificEmailConfig + { + public List AddressesTo { get; } = new List(); + public List AddressesCc { get; } = new List(); + public List AddressesBcc { get; } = new List(); + } + public SpecificEmailConfig ContactUs { get; } = new SpecificEmailConfig(); + public SpecificEmailConfig Signup_Activate { get; } = new SpecificEmailConfig(); + public SpecificEmailConfig Signup_Welcome { get; } = new SpecificEmailConfig(); + public String Context { get; internal set; } + } + public EmailConfig Email { get; } = new EmailConfig(); + // Databases. + public class DatabaseConfig + { + public String Location { get; internal set; } + public String User { get; internal set; } + public String Password { get; internal set; } + } + public DatabaseConfig BusMgrDatabase { get; } = new DatabaseConfig(); + // Documents. + public class DocumentsConfig + { + public String RootFolder { get; internal set; } + } + public DocumentsConfig Documents { get; } = new DocumentsConfig(); + // Logging. + public class LoggingConfig + { + public String RootFolder { get; internal set; } + } + public LoggingConfig Logging { get; } = new LoggingConfig(); + + //--------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/App/SbmSessionContext_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmSessionContext_Web.cs new file mode 100644 index 0000000..062c6f9 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmSessionContext_Web.cs @@ -0,0 +1,22 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public class SbmSessionContext_Web : SbmSessionContext + { + //------------------------------------------------------------------- + /// Blank construction - used for deserilisation of session data. + protected SbmSessionContext_Web(Sbm.Application application) : base(0, application) { } + public SbmSessionContext_Web(ushort sesionContextIndex, Sbm.Application application) : + base(sesionContextIndex, application) + { + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs new file mode 100644 index 0000000..5a337e8 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmSessionData_Web.cs @@ -0,0 +1,39 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Security; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public abstract class SbmSessionData_Web : SbmSessionData + { + //------------------------------------------------------------------- + // Private construction - for JSON deserialisation. + protected SbmSessionData_Web(long sessionIdx, int itemIdx, SbmSessionContext sessionContext) : + base(sessionIdx, itemIdx, sessionContext) + { + } + // Protected construction. + protected SbmSessionData_Web(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) : + base(sessionContext, securityItemUser, affiliateUser) + { + } + + //------------------------------------------------------------------- + // User Context. + public SbmUserContext UserContext + { + get + { + SbmUserContext userContext = new SbmUserContext_Web(SessionContext); + return userContext; + } + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/App/SbmStartup_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmStartup_Web.cs new file mode 100644 index 0000000..fb78abd --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmStartup_Web.cs @@ -0,0 +1,207 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc.Razor; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Net.Http.Headers; +using Sarand.BusinessMgr.Net.Core.Web.Middleware; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.App; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Net.Http; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public class SbmStartup_Web + { + //------------------------------------------------------------------- + // Data members. + // Localisation. + private static RequestCulture defaultRequestCulture = new RequestCulture("en-GB", "en-GB"); + private static List supportedCultures = new List + { + new CultureInfo("en-GB"), + new CultureInfo("en-US"), + new CultureInfo("en"), + new CultureInfo("fr-FR"), + new CultureInfo("fr"), + }; + + //------------------------------------------------------------------- + // Protected construction. + protected SbmStartup_Web(IConfiguration configuration) + { + Configuration = configuration; + } + + //------------------------------------------------------------------- + // Properties. + public IConfiguration Configuration { get; } + public static RequestCulture DefaultRequestCulture { get { return defaultRequestCulture; } } + public static List SupportedCultures { get { return new List(supportedCultures); } } + + //------------------------------------------------------------------- + // This method gets called by the runtime. Use this method to add services to the container. + protected class ConfigureServicesConfig + { + public IServiceCollection services; + public String sessionCookieName; + public bool sessionCookieHttpOnly; + public TimeSpan sessionIdleTimeout; + } + protected void ConfigureServices(ConfigureServicesConfig config) + { + // Authentication service. + // Required to handle 'Forbidden' responses etc. + config.services + .AddAuthentication(options => { + options.DefaultAuthenticateScheme = "forbidScheme"; + options.DefaultForbidScheme = "forbidScheme"; + options.AddScheme("forbidScheme", "Handle Forbidden"); + }); + + // Added to support memory caching of sessions. + config.services.AddMemoryCache(); + //config.services.AddDistributedMemoryCache(); - for multiple web servers. + // Online web application cookie definition. + config.services.AddSession + (options => + { + options.Cookie.Name = config.sessionCookieName; + options.Cookie.HttpOnly = config.sessionCookieHttpOnly; + options.IdleTimeout = config.sessionIdleTimeout; + // Override cookie policy for session cookie. Ref. config.app.UseCookiePolicy() + options.Cookie.IsEssential = true; + } + ); + + // Localisation properties folder. + String resourcesPath = "Localisation"; + config.services.AddLocalization(opts => { opts.ResourcesPath = resourcesPath; }); + + // Modify pages during debug. +#if DEBUG + if (SbmSystem.DebugMode) + // If the following line throws an error such as: + // 'imvcbuilder' does not contain a definition for 'addrazorruntimecompilation' + // Revert the NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation package + // to a previous version and then reinstal the latest version. + config.services.AddRazorPages().AddRazorRuntimeCompilation(); +#endif + + config.services.AddMvc + (options => + { + // Model binding - intercepting form values being bound to models. + options.ModelBinderProviders.Insert(0, new SbmModelBinderProvider()); + // Blank form values to be populated to model as empty strings rather than null values. + options.ModelMetadataDetailsProviders.Add(new SbmMetadataProvider()); + } + ) + // View and data annotation localisations. + .AddViewLocalization( + LanguageViewLocationExpanderFormat.Suffix, + opts => { opts.ResourcesPath = resourcesPath; }) + .AddDataAnnotationsLocalization(); + + // Configure localisation middleware. + config.services.Configure + (opts => + { + // Default culture to use for requests. + opts.DefaultRequestCulture = DefaultRequestCulture; + // Cultures supported by the application. Formatting numbers, dates, etc. + opts.SupportedCultures = SupportedCultures; + // UI cultures supported by the application. UI strings that have been localized. + opts.SupportedUICultures = SupportedCultures; + } + ); + + // Allows access to the HttpContext inside a service. + config.services.AddSingleton(); + } + + //------------------------------------------------------------------- + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + protected class ConfigureConfig + { + public IApplicationBuilder app; + public IHostApplicationLifetime hostApplicationLifetime; + public IWebHostEnvironment env; + } + protected void Configure(ConfigureConfig config) + { + if (config.env.IsDevelopment()) + { + config.app.UseDeveloperExceptionPage(); + } + else + { + config.app.UseExceptionHandler("/Home/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + config.app.UseHsts(); + } + + config.app.UseHttpsRedirection(); + config.app.UseStaticFiles(); + config.app.UseCookiePolicy(); + config.app.UseSession(); + config.app.UseRouting(); + //config.app.UseAuthorization(); + config.app.UseAntiforgeryTokens(); + + config.app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + }); + + // Application events. + // NB The shutdown events only fire if he application stops 'gracefully'. + config.hostApplicationLifetime.ApplicationStarted.Register(OnApplicationStarted); + config.hostApplicationLifetime.ApplicationStopping.Register(OnApplicationStopping); + config.hostApplicationLifetime.ApplicationStopped.Register(OnApplicationStopped); + + config.app.Use(async (context, next) => + { + if (context.Request.Method.Equals(HttpMethod.Get.Method)) + { + context.Response.GetTypedHeaders().CacheControl = new CacheControlHeaderValue() + { + Public = true, + MaxAge = TimeSpan.FromSeconds(10) + }; + //context.Response.Headers[HeaderNames.Vary] = new string[] { "Accept-Encoding" }; + } + await next(); + }); + } + + //------------------------------------------------------------------- + // Application events. + private readonly static String ApplicationEventLogPrefix = "### "; + private void OnApplicationStarted() + { + SaLogger.Info(ApplicationEventLogPrefix + "Application started"); + } + private void OnApplicationStopping() + { + SaLogger.Info(ApplicationEventLogPrefix + "Application stopping"); + } + private void OnApplicationStopped() + { + SaLogger.Info(ApplicationEventLogPrefix + "Application stopped"); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/App/SbmSystem_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmSystem_Web.cs new file mode 100644 index 0000000..461d25f --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmSystem_Web.cs @@ -0,0 +1,133 @@ +using Sarand.BusinessMgr.Net.Standard.Dbas.App; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public class SbmSystem_Web : SbmSystem_Dbas + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + /// Static initialisation. + static SbmSystem_Web() + { + InitComputerName(); + InitUserName(); + InitApplicationPath(); + InitApplicationFolder(); + InitAssemblyBuildAt(); + } + + //------------------------------------------------------------------- + // Construction. + public SbmSystem_Web(PropertySet properties) : base(properties) + { + } + + //------------------------------------------------------------------- + /// + /// Computer name + /// Windows: System.Environment.MachineName + /// Web: HttpContext.Current.Server.MachineName + /// FQDN: System.Net.Dns.GetHostName() + /// + private static void InitComputerName() + { + try + { + ComputerName = System.Environment.MachineName; + } + catch (Exception exc) + { + SaLogger.Warn("SbmSystem.InitComputerName Failed to initialise computer name from environment. " + ExceptionUtil.GetErrorStateMessage(exc)); + } + try + { + if (StringUtil.IsEmpty(ComputerName)) + ComputerName = Environment.GetEnvironmentVariable("CUMPUTERNAME") ?? Environment.GetEnvironmentVariable("HOSTNAME"); + } + catch (Exception exc) + { + SaLogger.Warn("SbmSystem.InitComputerName Failed to initialise computer name from environment variable. " + ExceptionUtil.GetErrorStateMessage(exc)); + } + } + + //------------------------------------------------------------------- + /// To be populated by applicationWindows: Environment.UserName + private static void InitUserName() + { + try + { + UserName = Environment.UserName; + } + catch (Exception exc) + { + SaLogger.Warn("SbmSystem.InitUserName Failed to initialise user name. " + ExceptionUtil.GetErrorStateMessage(exc)); + } + } + + //------------------------------------------------------------------- + /// + /// Application Path. + /// Windows: System.Reflection.Assembly.GetEntryAssembly().Location; + /// + private static void InitApplicationPath() + { + try + { + ApplicationPath = Assembly.GetEntryAssembly().Location; + } + catch (Exception exc) + { + SaLogger.Warn("SbmSystem.InitApplicationPath Failed to initialise application path. " + ExceptionUtil.GetErrorStateMessage(exc)); + } + } + + //------------------------------------------------------------------- + /// + /// Application folder. + /// Windows: System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); + /// + private static void InitApplicationFolder() + { + try + { + ApplicationFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + } + catch (Exception exc) + { + SaLogger.Warn("SbmSystem.InitApplicationFolder Failed to initialise application folder. " + ExceptionUtil.GetErrorStateMessage(exc)); + } + } + + //------------------------------------------------------------------- + /// + /// DateTime when the executing assembly was built. + /// + private static void InitAssemblyBuildAt() + { + try + { + // Assembly build date. + Assembly assembly = Assembly.GetExecutingAssembly(); + AssemblyBuildAt = File.GetLastWriteTime(assembly.Location); + } + catch (Exception exc) + { + SaLogger.Warn("SbmSystem.InitAssemblyBuildAt Failed to initialise assembly build date. " + ExceptionUtil.GetErrorStateMessage(exc)); + } + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/App/SbmUserContext_Web.cs b/SaBusMgrCoreWeb/Web/App/SbmUserContext_Web.cs new file mode 100644 index 0000000..29d5fc8 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/App/SbmUserContext_Web.cs @@ -0,0 +1,26 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.App +{ + //======================================================================= + public class SbmUserContext_Web : SbmUserContext + { + //------------------------------------------------------------------- + // Data memebrs. + + //------------------------------------------------------------------- + // Construction. + public SbmUserContext_Web(SbmSessionContext sessionContext) : base(sessionContext) + { + } + + //------------------------------------------------------------------- + // Properties. + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Consoles/SbmEmailConsole_Web.cs b/SaBusMgrCoreWeb/Web/Consoles/SbmEmailConsole_Web.cs new file mode 100644 index 0000000..838bbaf --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Consoles/SbmEmailConsole_Web.cs @@ -0,0 +1,21 @@ +using Sarand.BusinessMgr.Net.Standard.Base.Consoles; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.Consoles +{ + //======================================================================= + public class SbmEmailConsole_Web : SbmEmailConsole + { + //------------------------------------------------------------------- + // Protected construction. + public SbmEmailConsole_Web(SbmEmailConfig emailConfig) : + base(emailConfig) + { + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs b/SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs new file mode 100644 index 0000000..c001577 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Controllers/SbmController_Base.cs @@ -0,0 +1,523 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Routing; +using Microsoft.Net.Http.Headers; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Models; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Consoles; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.CodeTypes; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Diary; +using Sarand.Net.Standard.Base.Email; +using Sarand.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.ItemData; +using Sarand.Net.Standard.Base.ItemDocs; +using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.ReferenceData; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.UpdateLog; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Web; + +namespace Sarand.BusinessMgr.Net.Core.Web.Controllers +{ + //======================================================================= + public abstract class SbmController_Base : Controller + { + //------------------------------------------------------------------- + // Data members. + private SbmInternals internals; + + //------------------------------------------------------------------- + // Protected construction. + protected SbmController_Base(SbmLocaliser localiser) + { + Localiser = localiser; + + // Initialise console (debug) logging listener. + //if (Directory.Exists(App.LoggingRootFolder) && SbmSystem.DebugMode) + // SbmConsoleListener.ConfigureDebugListener(App.LoggingRootFolder); + if (DebugMode) SaLogger.Trace(GetType().Name + ".CTR"); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + } + base.Dispose(disposing); + } + + //------------------------------------------------------------------- + // Properties. + public bool DebugMode { get; } = SacsSystem.DebugMode; + protected SbmApplication_Web App { get { return SbmApplication_Web.WebApp; } } + public SbmSessionConfig SessionConfig { get { return App.SessionConfig; } } + public SbmSessionContext SessionContext { get { return App.SessionContext; } } + public SbmUserContext UserContext { get { return SessionData.UserContext; } } + protected SbmLocaliser Localiser { get; } + /// + /// Indicate whether session data should be stored by action. + /// Any action that might modify the session data must store it. + /// Some actions such as scoring a password's complexity don't need to. + /// + public virtual bool StoreSessionData { get; protected set; } = true; + // Culture. + private string LanguageIso2 + { + get + { + var feature = HttpContext.Features.Get(); + return feature.RequestCulture.UICulture.TwoLetterISOLanguageName.ToLower(); + } + } + // Business components. + public SbmInternals Internals { get { if (internals == null) internals = new SbmInternals(UserContext); return internals; } } + // Managers. + public SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } } + public SbmAssetMgr AssetMgr { get { return Internals.AssetMgr; } } + public SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } } + public SbmPriceMgr PriceMgr { get { return Internals.PriceMgr; } } + public SbmTransactionMgr TransactionMgr { get { return Internals.TransactionMgr; } } + public SbmStockMgr StockMgr { get { return Internals.StockMgr; } } + public SbmProcessMgr ProcessMgr { get { return Internals.ProcessMgr; } } + public SbmDataItemMgr DataItemMgr { get { return Internals.DataItemMgr; } } + // Consoles. + public SbmConfigConsole ConfigConsole { get { return Internals.ConfigConsole; } } + public SaDiaryConsole DiaryConsole { get { return Internals.DiaryConsole; } } + public SaSecurityConsole SecurityConsole { get { return Internals.SecurityConsole; } } + public SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } } + public SaReferenceDataConsole ReferenceDataConsole { get { return Internals.ReferenceDataConsole; } } + public SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } } + public SaInterfaceConsole InterfaceConsole { get { return Internals.InterfaceConsole; } } + public SaItemDocConsole ItemDocConsole { get { return Internals.ItemDocConsole; } } + public SaItemOptionConsole ItemOptionConsole { get { return Internals.ItemOptionConsole; } } + public SaItemDataConsole ItemDataConsole { get { return Internals.ItemDataConsole; } } + // Configurations. + public SbmStockControlConfig StockControlConfig { get { return Internals.StockControlConfig; } } + public SbmRequirementCostingConfig RequirementCostingConfig { get { return Internals.RequirementCostingConfig; } } + // System codes. + public List GetCodesOfType(Sbm.SystemCode systemCode) { return Internals.GetCodesOfType(systemCode); } + // Email. + public SaEmailConfig EmailConfig { get { return Internals.EmailConfig; } } + public SbmEmailConsole EmailConsole { get { return Internals.EmailConsole; } } + + //------------------------------------------------------------------- + // Redirection locations. + //------------------------------------------------------------------- + public static readonly String ParamName_SessionExpired = "SessionExpired"; + protected enum RedirectLocation + { + WebAppBase, + WebAppHome, + WebAppHome_SessionExpired, + } + protected String GetRedirectLocation(RedirectLocation redirectLocation) + { + string protocol = Request.Scheme; + var parameters = new RouteValueDictionary(); + String homeAction = Url.Action("Index", "Home", parameters, protocol); + switch (redirectLocation) + { + case RedirectLocation.WebAppBase: + return Regex.Replace(homeAction, "\\/$", "") + "/"; + case RedirectLocation.WebAppHome: + return homeAction; + case RedirectLocation.WebAppHome_SessionExpired: + // Set the session expired parameter so that the page can report it. + // NB Paramater must have a value to be included in the URL query string. + parameters.Add(ParamName_SessionExpired, "1"); + return homeAction; + } + return ""; + } + + //------------------------------------------------------------------- + // Action execution events. + //------------------------------------------------------------------- + public override void OnActionExecuting(ActionExecutingContext filterContext) + { + if (DebugMode) SaLogger.Debug(GetType().Name + ".OnActionExecuting" + (ViewData.Model != null ? " Model: " + ViewData.Model : "")); + + // Refreh model properties. + SbmModel_Base baseModel = ViewData.Model as SbmModel_Base; + RefreshModel(baseModel); + + base.OnActionExecuting(filterContext); + } + public override void OnActionExecuted(ActionExecutedContext filterContext) + { + if (DebugMode) SaLogger.Debug(GetType().Name + ".OnActionExecuted" + (ViewData.Model != null ? " Model: " + ViewData.Model : "")); + + // Refreh model properties. + SbmModel_Base baseModel = ViewData.Model as SbmModel_Base; + RefreshModel(baseModel); + + // Store session data if present - as potentially modfied. + if (SessionData != null) + { + // Most actions will store the session data in case it's been modified. + // Some actions (eg. score password) don't need to. + if (StoreSessionData) + { + String sessionDataJson = JsonConvert.SerializeObject(SessionData); + HttpContext.Session.Set(SessionStorage.SessionKey_SessionConfig, SessionStorage.sessionDataEncoding.GetBytes(sessionDataJson)); + } + } + else HttpContext.Session.Remove(SessionStorage.SessionKey_SessionConfig); + + // Response headers. + if (baseModel != null && baseModel.ProhibitCache) + { + if (Response.Headers.ContainsKey(HeaderNames.CacheControl)) + Response.Headers.Remove(HeaderNames.CacheControl); + Response.Headers.Add(HeaderNames.CacheControl, "no-cache, no-store, must-revalidate"); + Response.Headers.Add(HeaderNames.Pragma, "no-cache"); + Response.Headers.Add(HeaderNames.Expires, "0"); + } + + + base.OnActionExecuted(filterContext); + } + + //------------------------------------------------------------------- + // Model. + //------------------------------------------------------------------- + protected void RefreshModel(SbmModel_Base model) + { + if (model == null) return; + + // Session data. + model.SessionData_Web = SessionData; + + // Redirect locations. + model.RedirectLocation.Base = GetRedirectLocation(RedirectLocation.WebAppBase); + model.RedirectLocation.Home = GetRedirectLocation(RedirectLocation.WebAppHome); + model.RedirectLocation.Home_SessionExpired = GetRedirectLocation(RedirectLocation.WebAppHome_SessionExpired); + } + + //------------------------------------------------------------------- + // Parameters. + //------------------------------------------------------------------- + public String EncryptParameters(NameValueCollection parameters, String base64IV, String base64Key) + { + String fn = nameof(ControllerBase) + ".EncryptParameters"; + try + { + // Copy the list of parameters, adding a random name/value pair to randomise the encryption. + NameValueCollection parametersToEncrypt = new NameValueCollection(parameters); + // NB Range 10-189 intended to have equal chance of 2 or 3 digit number. + parametersToEncrypt.Add("!" + SacsRandomHelper.GetInt32(10, 190).ToString(), SacsRandomHelper.GetInt32(10, 190).ToString()); + + // Sort the keys to ensure that the random '!' param is first in the query string. + String[] paramKeys = parametersToEncrypt.AllKeys; + Array.Sort(paramKeys); + + // Serialise parameters as if in a URL query string - so that they can be deserialised in DecryptParameters() below. + string queryString = String.Join("&", paramKeys.Select(a => a + "=" + HttpUtility.UrlEncode(parametersToEncrypt[a]))); + String encrypted = SacsEncryptionHelper.Encrypt(queryString, base64IV, base64Key); + if (DebugMode) + { + SaLogger.Debug(fn + " Encrypted: " + encrypted); + NameValueCollection decryptedParams = DecryptParameters(encrypted, base64IV, base64Key); + } + return encrypted; + } + catch (Exception exc) { SaLogger.Warn(fn + " " + ExceptionUtil.GetErrorStateMessage(exc)); } + return ""; + } + public NameValueCollection DecryptParameters(String encrypted, String base64IV, String base64Key) + { + String fn = nameof(ControllerBase) + ".DecryptParameters"; + if (DebugMode) SaLogger.Debug(fn + " \n\tEncrypted: " + encrypted + "\n\tIV: " + base64IV + "\n\tKey: " + base64Key); + try + { + String queryString = SacsEncryptionHelper.Decrypt(encrypted, base64IV, base64Key); + return HttpUtility.ParseQueryString(queryString); + } + catch (Exception exc) { SaLogger.Warn(fn + " " + ExceptionUtil.GetErrorStateMessage(exc)); } + return new NameValueCollection(); + } + + //------------------------------------------------------------------- + // Cookies. + //------------------------------------------------------------------- + /// Retrieve the value from the named request cookie. + public String GetRequestCookie(String key) + { + if (Request.Cookies.ContainsKey(key)) + return Request.Cookies[key]; + return null; + } + /// Set the value against the named response cookie. + public void SetResponseCookie(string key, string value, DateTime? expiresAt = null, bool isEssential = false) + { + CookieOptions options = new CookieOptions(); + options.HttpOnly = true; + options.Secure = true; + options.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Strict; + if (expiresAt.HasValue) + options.Expires = expiresAt; + if (isEssential) + options.IsEssential = true; + Response.Cookies.Append(key, value, options); + } + + //------------------------------------------------------------------- + // Session. + //------------------------------------------------------------------- + public bool ValidUserSession { get { return SessionData?.ValidUserSession ?? false; } } + public DbUpdateInfo DbUpdateInfo { get { return SessionData?.DbUpdateInfo ?? new DbUpdateInfo(null, "", SbmSystem.ComputerName); } } + // Referrer. + public String Referer { get { return Request.Headers["Referer"].ToString(); } } + public bool ValidReferer { get { return !StringUtil.IsEmpty(Referer); } } + /// Store session data, eg. to start a new user session on sign-in. + protected bool SetSessionData(SbmSessionData_Web sessionData) + { + if (sessionStorage.SessionData != null) return false; + sessionStorage.SessionData = sessionData; + return true; + } + protected void ClearSessionData() + { + if (HttpContext.Session.IsAvailable) + HttpContext.Session.Clear(); + sessionStorage.SessionData = null; + } + + //------------------------------------------------------------------- + // Session storage. + public class SessionStorage + { + public SbmSessionData_Web SessionData { get; set; } + public static String SessionKey_SessionConfig { get; } = "SbmSessionData"; + public static Encoding sessionDataEncoding { get; } = Encoding.UTF8; + //JSON Serialisation. + public class SbmSessionDataContractResolver : DefaultContractResolver + { + // To allow private properties to be deserialised. + // NB Only applies to top level properties in the serialised object. + protected override List GetSerializableMembers(Type objectType) + { + var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; + MemberInfo[] fields = objectType.GetFields(flags); + return fields + .Concat(objectType.GetProperties(flags).Where(propInfo => propInfo.CanWrite)) + .ToList(); + } + protected override IList CreateProperties(Type type, MemberSerialization memberSerialization) + { + return base.CreateProperties(type, MemberSerialization.Fields); + } + }; + public static JsonSerializerSettings JsonDeserialisationSettings = new JsonSerializerSettings + { + ContractResolver = new SbmSessionDataContractResolver(), + // Force all deserialised objects to be replaced - to avoid proxy lists not populating. + ObjectCreationHandling = ObjectCreationHandling.Replace + }; + } + private readonly SessionStorage sessionStorage = new SessionStorage(); + protected JsonSerializerSettings SbmSessionDataJsonSerializerSettings { get { return SessionStorage.JsonDeserialisationSettings; } } + + //------------------------------------------------------------------- + public SbmSessionData_Web SessionData + { + get + { + try + { + // Retrieve session data if not already in controller. + if (sessionStorage.SessionData == null) + { + byte[] sessionDataBytes = null; + HttpContext.Session.TryGetValue(SessionStorage.SessionKey_SessionConfig, out sessionDataBytes); + if (sessionDataBytes != null) + { + String sessionDataJson = SessionStorage.sessionDataEncoding.GetString(sessionDataBytes); + sessionStorage.SessionData = DeserializeSessionData(sessionDataJson); + } + } + return sessionStorage.SessionData; + } + catch (Exception exc) + { + SaLogger.Warn(GetType().Name + ".SessionData " + exc.GetType().Name + " - " + exc.Message + exc.GetStackEntries().Concat("", "\n\t")); + } + return null; + } + } + protected abstract SbmSessionData_Web DeserializeSessionData(String sessionDataJson); + + //------------------------------------------------------------------- + // Ajax actions. + //------------------------------------------------------------------- + protected static readonly Encoding ajaxResponseEncoding = Encoding.UTF8; + protected IActionResult GetAjaxResult_GoHome(AjaxResponse_Base responseData) + { + responseData.SetGoHome(); + return Json(responseData); + } + protected IActionResult GetAjaxResult_InvalidSession(AjaxResponse_Base responseData) + { + responseData.SetGoHome(); + return Json(responseData); + } + + //------------------------------------------------------------------- + public class AjaxResponse_Base + { + // Response status. + public bool Success { get; set; } = false; + public bool Error { get; set; } = false; + public bool SessionExpired { get; protected set; } = false; + public bool GoHome { get; protected set; } = false; + public AjaxResponse_Base SetSessionExpired(String title, String text) + { + SessionExpired = true; + return SetMessage(title, text); + } + public AjaxResponse_Base SetGoHome() + { + GoHome = true; + return this; + } + public AjaxResponse_Base SetGoHome(String title, String text) + { + GoHome = true; + return SetMessage(title, text); + } + // Message - displays alert popup. + public class MessageData + { + public String Title { get; set; } + public String Text { get; set; } + } + public MessageData Message { get; private set; } + public AjaxResponse_Base SetMessage(String title, String text) + { + if (!StringUtil.IsEmpty(text)) + Message = new MessageData() { Title = title, Text = text }; + return this; + } + } + + //------------------------------------------------------------------- + public class AjaxResponse_Data : AjaxResponse_Base + { + // Construction. + protected AjaxResponse_Data(SbmModel_Base model) + { + } + // Form data. + public class FormControlValue + { + public FormControlValue(String controlName, String value, String error) + { + ControlName = controlName; + Value = value; + Error = error; + } + public String ControlName { get; } + public String Value { get; set; } + public String Error { get; set; } + } + private readonly Dictionary controlValues = new Dictionary(); + public List ControlValues { get { return controlValues.Values.ToList(); } } + public void SetControlValue(String controlName, String value, String error = null) + { + if (controlValues.ContainsKey(controlName)) + { + // Modify existing entry in the list. + FormControlValue controlValue = controlValues[controlName]; + if (value != null) controlValue.Value = value; + if (error != null) controlValue.Error = error; + } + else + { + // Add new control to list. + controlValues.Add(controlName, new FormControlValue(controlName, value, error)); + } + } + /// Assign the error to the control by name and return this response data. + public AjaxResponse_Data SetControlError(String controlName, String error) + { + return SetControlError(controlName, error, this); + } + /// + /// Assign the error to the control by name and return the specified value. + /// - Allows alternative return values to be specified (eg. 'false') to avoid separate return statement in calling routine. + /// + public T SetControlError(String controlName, String error, T returnValue) + { + SetControlValue(controlName, null, error); + return returnValue; + } + public bool HasControlErrors() + { + foreach (FormControlValue controlValue in controlValues.Values) + { + if (!StringUtil.IsEmpty(controlValue.Error)) return true; + } + return false; + } + // Notification - briefly displays after response received. + public class NotificationData + { + public String Title { get; set; } + public String Message { get; set; } + } + public NotificationData Notification { get; private set; } + public bool HasNotification { get { return Notification != null; } } + public AjaxResponse_Data SetNotification(String title, String message) + { + Notification = new NotificationData() { Title = title, Message = message }; + return this; + } + // Paged data. + public class PagingData + { + public PagingData(SbmModel_Base model) : + this(model.Paging.PageNo, model.Paging.PageLength, model.Paging.ItemCount, model.Paging.ItemTotal) + { } + public PagingData(uint pageNo, ushort pageLength, ushort itemCount, ulong itemTotal) + { + PageNo = pageNo; + PageLength = pageLength; + ItemCount = itemCount; + ItemTotal = itemTotal; + } + public bool Paged { get { return (PageNo > 0 && PageLength > 0 && ItemTotal > PageLength); } } + public uint PageNo { get; } = 0; + public ushort PageLength { get; } = 0; + public uint PageCount { get { return (PageLength > 0 ? (uint)Math.Ceiling((decimal)ItemTotal / PageLength) : 0); } } + public ushort ItemCount { get; } = 0; + public ulong ItemTotal { get; } = 0; + } + public PagingData Paging { get; private set; } + public void SetPaging(SbmModel_Base model) + { + Paging = new PagingData(model); + } + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Helpers/SbmEmailConfigHelper.cs b/SaBusMgrCoreWeb/Web/Helpers/SbmEmailConfigHelper.cs new file mode 100644 index 0000000..46b37a7 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Helpers/SbmEmailConfigHelper.cs @@ -0,0 +1,93 @@ +using Microsoft.Extensions.Configuration; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Consoles; +using Sarand.Net.Standard.Base.Email; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.Helpers +{ + //======================================================================= + public static class SbmEmailConfigHelper + { + //------------------------------------------------------------------- + /// Extract the email configurations from the application settings. + public static Dictionary ExtractEmailConfigs(IConfigurationSection emailConfigsSection) + { + Dictionary emailConfigs = new Dictionary(); + foreach (ConfigurationSection emailConfigSection in emailConfigsSection.GetChildren()) + { + if (!StringUtil.IsEmpty(emailConfigSection.Key)) + emailConfigs.Add(emailConfigSection.Key, CreateEmailConfig(emailConfigSection.Key, emailConfigSection)); + } + return emailConfigs; + } + private static SbmEmailConfig CreateEmailConfig(String context, ConfigurationSection emailConfigSection) + { + SbmEmailConfig emailConfig = new SbmEmailConfig(context); + if (emailConfigSection != null) + { + IConfigurationSection message = emailConfigSection.GetSection("Message"); + emailConfig.Message.AddressFrom = message["AddressFrom"]; + foreach (var addressBcc in message.GetSection("AddressesBcc").GetChildren()) + emailConfig.Message.AddressesBcc.Add(StringUtil.TrimAll(addressBcc.Value)); + IConfigurationSection smtp = emailConfigSection.GetSection("SMTP"); + emailConfig.SMTP.Server = smtp["Server"]; + emailConfig.SMTP.ServerPort = StringUtil.ToInt(smtp["ServerPort"]); + emailConfig.SMTP.UseSSL = StringUtil.ToBool(smtp["UseSSL"]); + IConfigurationSection send = emailConfigSection.GetSection("Send"); + emailConfig.Send.Using = send["Using"]; + emailConfig.Send.UserName = send["UserName"]; + emailConfig.Send.Password = send["Password"]; + } + return emailConfig; + } + + //------------------------------------------------------------------- + // Send email. + public static bool SendEmail(SaEmailData emailData) + { + // ToDo return EmailConsole.SendEmail(emailData); + throw new NotSupportedException(); + } + + //------------------------------------------------------------------- + /// + /// Replace dynamic tags in email message body. + /// + /// + public static void ReplaceDynamicEmailBodyTags(SaEmailData emailData, SbmSessionData sessionData, SbmAffiliate affiliateUser) + { + // Replace core tags, eg. main stylesheet. + // ToDo. EmailConsole.ReplaceDynamicEmailTags(emailData); + + // Replace tags known to the web application. + + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class EmailConfigList + { + public static SbmEmailConfig getConfigForSession(this List emailConfigs, SbmSessionConfig sessionConfig) + { + if (sessionConfig != null && !StringUtil.IsEmpty(sessionConfig.Email.Context)) + { + foreach (SbmEmailConfig emailConfig in emailConfigs) + { + if (emailConfig.Context.EqualsCI(sessionConfig.Email.Context)) + return emailConfig; + } + } + return new SbmEmailConfig(""); + } + } + + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Helpers/SbmSessionConfigHelper.cs b/SaBusMgrCoreWeb/Web/Helpers/SbmSessionConfigHelper.cs new file mode 100644 index 0000000..184f251 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Helpers/SbmSessionConfigHelper.cs @@ -0,0 +1,70 @@ +using Microsoft.Extensions.Configuration; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.Helpers +{ + //======================================================================= + public static class SbmSessionConfigHelper + { + //------------------------------------------------------------------- + public static Dictionary ExtractSessionConfigs(IConfigurationSection sessionConfigsSection) + { + // NB The set of configurations will only allow one per context. + // Only the last configuration found for each context will be stored (NB usually only one of each apart from 'Defaults'). + Dictionary sessionConfigs = new Dictionary(); + + // Start the list with a default 'Defaults' configuration - values set to application defaults (defined in Sbm). + // NB This can be overridden in each level of configuration. + // Settings from the 'Defaults' configuration provide values where they are missing from other configurations. + // NB Coverage may not be 100% - just where it's proven needed. + SbmSessionConfig defaultsSessionConfig = new SbmSessionConfig(Sbm.Config.Context_Defaults, null, null); + sessionConfigs.Add(defaultsSessionConfig.Context, defaultsSessionConfig); + + // Load session configurations. + foreach (ConfigurationSection sessionConfigSection in sessionConfigsSection.GetChildren()) + { + if (StringUtil.IsEmpty(sessionConfigSection.Key)) continue; + + // Extract the configuration, supplying current 'Defaults' to supply missing values, and add to the list. + SbmSessionConfig sessionConfig = new SbmSessionConfig(sessionConfigSection.Key, sessionConfigSection, defaultsSessionConfig); + sessionConfigs.Remove(sessionConfigSection.Key); + sessionConfigs.Add(sessionConfigSection.Key, sessionConfig); + + // Replace the 'Defaults' configuration if this one matches the context. + if (sessionConfig.Context.EqualsCI(Sbm.Config.Context_Defaults)) + defaultsSessionConfig = sessionConfig; + } + return sessionConfigs; + } + + //------------------------------------------------------------------- + } + + //======================================================================= + public static class SessionConfigList + { + public static SbmSessionConfig getConfigForApplication(this List sessionConfigs) + { + SbmSessionConfig defaultsSessionConfig = new SbmSessionConfig("", null, null); + SbmApplication app = SbmGlobals.Application; + if (app != null) + { + foreach (SbmSessionConfig sessionConfig in sessionConfigs) + { + if (sessionConfig.Environments.ContainsCI(app.EnvironmentName)) + return sessionConfig; + if (sessionConfig.Context.EqualsCI(Sbm.Config.Context_Defaults)) + defaultsSessionConfig = sessionConfig; + } + } + return defaultsSessionConfig; + } + } + + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Middleware/SbmAuthenticationHandler.cs b/SaBusMgrCoreWeb/Web/Middleware/SbmAuthenticationHandler.cs new file mode 100644 index 0000000..b94dd76 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Middleware/SbmAuthenticationHandler.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Web.Middleware +{ + //======================================================================= + // Authentication handler required to allow actions to issue Forbid() responses. + // Ref. https://stackoverflow.com/questions/54578426/why-do-i-need-to-set-a-defaultforbidscheme/54587054#54587054 + //======================================================================= + public class SbmAuthenticationHandler : AuthenticationHandler + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + public SbmAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : + base(options, logger, encoder, clock) + { + } + + //------------------------------------------------------------------- + protected override Task HandleForbiddenAsync(AuthenticationProperties properties) + { + Context.Response.StatusCode = (int)HttpStatusCode.Forbidden; + return base.HandleForbiddenAsync(properties); + } + + //------------------------------------------------------------------- + protected override async Task HandleAuthenticateAsync() + { + Context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; + return AuthenticateResult.NoResult(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Middleware/SbmMetadataProvider.cs b/SaBusMgrCoreWeb/Web/Middleware/SbmMetadataProvider.cs new file mode 100644 index 0000000..df027ae --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Middleware/SbmMetadataProvider.cs @@ -0,0 +1,23 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.Middleware +{ + //======================================================================= + /// + /// Force blank form values to be populated to the model as empty strings rather than null values. + /// + public class SbmMetadataProvider : IMetadataDetailsProvider, IDisplayMetadataProvider + { + public void CreateDisplayMetadata(DisplayMetadataProviderContext context) + { + if (context.Key.MetadataKind == ModelMetadataKind.Property) + { + context.DisplayMetadata.ConvertEmptyStringToNull = false; + } + } + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Middleware/SbmModelBinder.cs b/SaBusMgrCoreWeb/Web/Middleware/SbmModelBinder.cs new file mode 100644 index 0000000..0b17859 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Middleware/SbmModelBinder.cs @@ -0,0 +1,100 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace Sarand.BusinessMgr.Net.Core.Web.Middleware +{ + //======================================================================= + /// + /// Maps a browser request to a data object. Default class provides a base implementation of a model binder. + /// Overridden to trim whitespace from input values. + /// + public class SbmModelBinder : ComplexTypeModelBinder + { + //------------------------------------------------------------------- + // Construction. + public SbmModelBinder(IDictionary propertyBinders, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) : + base(propertyBinders, loggerFactory) + { + } + + //------------------------------------------------------------------- + /// + /// Creates the model with one (or more) injected service parameters. + /// + protected override object CreateModel(ModelBindingContext bindingContext) + { + var services = bindingContext.HttpContext.RequestServices; + var modelType = bindingContext.ModelType; + var ctors = modelType.GetConstructors(); + foreach (var ctor in ctors) + { + var paramTypes = ctor.GetParameters().Select(p => p.ParameterType).ToList(); + var parameters = paramTypes.Select(p => services.GetService(p)).ToArray(); + if (parameters.All(p => p != null)) + { + var model = ctor.Invoke(parameters); + return model; + } + } + return null; + } + + //------------------------------------------------------------------- + /// + /// Intercept String properties and trim whitespace. + /// + protected override void SetProperty(ModelBindingContext bindingContext, string modelName, ModelMetadata propertyMetadata, ModelBindingResult result) + { + string fn = GetType().Name + ".SetProperty"; + //if (SbmSystem.DebugMode) Logger.Debug(fn + " Form property " + modelName + ": '" + result.Model.ToString() + "."); + object originalValue = result.Model; + // Exclude properties that retain leading/trailing whitespace. + if (result.Model is string) + { + if (!modelName.ContainsCI("Password")) + { + string value = result.Model as string; + + // Trim leading and trailing whitespace. + value = StringUtil.TrimAll(value); + + // Check for multi-line. + if (value.Contains('\n')) + { + // Simplify line delimiters. + value = Regex.Replace(value, "\\r\\n", "\n"); + // Remove white space in front of newlines. + value = Regex.Replace(value, "\\s+\\n", "\n"); + // Remove multiple newlines. + value = Regex.Replace(value, "\\n+", "\n"); + } + + // Email addresses must be lowercase to ensure match to encrypted data. + if (modelName.EqualsCI("EmailAddress") || modelName.EqualsCI("AccountEmailAddress")) + value = value.ToLower(); + + // Uppercase selected values. + if (modelName.EqualsCI("Postcode") || modelName.EqualsCI("AccountPostcode") || modelName.EqualsCI("RegisteredAddressPostcode")) + value = value.ToUpper(); + + // Assign resulting value. + result = ModelBindingResult.Success(value); + } + } + if (result.Model != null && SbmSystem.DebugMode) + SaLogger.Debug(fn + " Form property " + modelName + ": '" + result.Model.ToString() + "'." + (originalValue != null && !originalValue.Equals(result.Model) ? " Original value: '" + originalValue.ToString() + "'" : "")); + base.SetProperty(bindingContext, modelName, propertyMetadata, result); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Middleware/SbmModelBinderProvider.cs b/SaBusMgrCoreWeb/Web/Middleware/SbmModelBinderProvider.cs new file mode 100644 index 0000000..3ddbeff --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Middleware/SbmModelBinderProvider.cs @@ -0,0 +1,43 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.Middleware +{ + //======================================================================= + /// + /// Maps a browser request to a data object. Default class provides a base implementation of a model binder. + /// Overridden to trim whitespace from input values. + /// + public class SbmModelBinderProvider : IModelBinderProvider + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public SbmModelBinderProvider() + { + } + + //------------------------------------------------------------------- + public IModelBinder GetBinder(ModelBinderProviderContext context) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + if (context.Metadata.IsComplexType && !context.Metadata.IsCollectionType) + { + var propertyBinders = context.Metadata.Properties.ToDictionary(property => property, context.CreateBinder); + ILoggerFactory loggerFactory = (ILoggerFactory)context.Services.GetService(typeof(ILoggerFactory)); + return new SbmModelBinder(propertyBinders, loggerFactory); + } + + // Default - return null so that default binding provider is used. + return null; + } + } + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Middleware/ValidateAntiForgeryTokenMiddleware.cs b/SaBusMgrCoreWeb/Web/Middleware/ValidateAntiForgeryTokenMiddleware.cs new file mode 100644 index 0000000..46bf307 --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Middleware/ValidateAntiForgeryTokenMiddleware.cs @@ -0,0 +1,69 @@ +using Microsoft.AspNetCore.Antiforgery; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Web.Middleware +{ + //======================================================================= + /// + /// Extend IApplicationBuilder class to use the anit-forgery token validation middleware. + /// + public static class ApplicationBuilderExtensions + { + public static IApplicationBuilder UseAntiforgeryTokens(this IApplicationBuilder app) + { + return app.UseMiddleware(); + } + } + + //======================================================================= + /// + /// Ensure relevant actions validate the anti-forgery token, eg. post requests. + /// + public class ValidateAntiForgeryTokenMiddleware + { + private readonly RequestDelegate _next; + private readonly IAntiforgery _antiforgery; + + public ValidateAntiForgeryTokenMiddleware(RequestDelegate next, IAntiforgery antiforgery) + { + _next = next; + _antiforgery = antiforgery; + } + + public async Task Invoke(HttpContext context) + { + String fn = GetType().Name + ".Invoke"; + + // Log action. + //String rawTarget = context.Features.Get().RawTarget; + if (SbmSystem.DebugMode) SaLogger.Debug(fn + " Action: '" + Regex.Replace(context.Request.Path.ToString(), "^/", "") + "'. Method: " + context.Request.Method); + + // Intercept POST requests and apply anti-forgery test. + if (HttpMethods.IsPost(context.Request.Method)) + { + await _antiforgery.ValidateRequestAsync(context); + } + + try + { + await _next(context); + } + catch (Exception exc) + { + SaLogger.Warn(fn + " " + ExceptionUtil.GetLogMessage(exc)); + throw exc; + } + } + } + + //======================================================================= +} diff --git a/SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs b/SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs new file mode 100644 index 0000000..a9227ce --- /dev/null +++ b/SaBusMgrCoreWeb/Web/Models/SbmModel_Base.cs @@ -0,0 +1,314 @@ +using Microsoft.AspNetCore.Html; +using Microsoft.AspNetCore.Mvc.Rendering; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.Net.Standard.Base.CodeTypes; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Diary; +using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.ItemData; +using Sarand.Net.Standard.Base.ItemDocs; +using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.ReferenceData; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.UpdateLog; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Core.Web.Models +{ + //======================================================================= + public class SbmModel_Base + { + //------------------------------------------------------------------- + // Data members. + private SbmInternals internals; + private readonly List infoMessages = new List(); + private readonly List warningMessages = new List(); + private readonly List errorMessages = new List(); + + //------------------------------------------------------------------- + // Protected construction. + protected SbmModel_Base(SbmLocaliser localiser) + { + Localiser = localiser; + } + + //------------------------------------------------------------------- + // Application properties. + private SbmApplication_Web App { get { return SbmApplication_Web.WebApp; } } + protected SbmSessionConfig SessionConfig { get { return App.SessionConfig; } } + protected SbmSystem_Web System { get { return App.System_Web; } } + public String SessionCookieName { get { return App.SessionCookieName; } } + public SbmSessionData SessionData { get { return SessionData_Web; } } + public SbmSessionData_Web SessionData_Web { get; set; } + public SbmSessionContext SessionContext { get { return SessionData?.SessionContext ?? App.SessionContext; } } + public DbUpdateInfo DbUpdateInfo { get { return SessionData?.DbUpdateInfo ?? new DbUpdateInfo(null, "", SbmSystem.ComputerName); } } + public bool DebugMode { get { return SbmSystem.DebugMode; } } + public SbmLocaliser Localiser { get; } + + //------------------------------------------------------------------- + // Page configuration. + public bool OK { get { return !HasMessages(); } } + public virtual bool ProhibitCache { get; set; } = true; + public String PageCaption { get; set; } + public String InstanceVersion { get { return !StringUtil.IsEmpty(App.SessionConfig.Instance) ? App.SessionConfig.Instance + " v" + Sbm.Version.GetFullVersion() : "v" + Sbm.Version.GetAppVersion(); } } + public bool IncludeGoogleAnalytics { get; set; } = false; + + //------------------------------------------------------------------- + // Business components. + protected SbmInternals Internals { get { if (internals == null) internals = new SbmInternals(SessionData_Web.UserContext); return internals; } } + // Managers. + public SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } } + public SbmAssetMgr AssetMgr { get { return Internals.AssetMgr; } } + public SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } } + public SbmPriceMgr PriceMgr { get { return Internals.PriceMgr; } } + public SbmTransactionMgr TransactionMgr { get { return Internals.TransactionMgr; } } + public SbmStockMgr StockMgr { get { return Internals.StockMgr; } } + public SbmProcessMgr ProcessMgr { get { return Internals.ProcessMgr; } } + public SbmDataItemMgr DataItemMgr { get { return Internals.DataItemMgr; } } + // Consoles. + public SbmConfigConsole ConfigConsole { get { return Internals.ConfigConsole; } } + public SaDiaryConsole DiaryConsole { get { return Internals.DiaryConsole; } } + public SaSecurityConsole SecurityConsole { get { return Internals.SecurityConsole; } } + public SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } } + public SaReferenceDataConsole ReferenceDataConsole { get { return Internals.ReferenceDataConsole; } } + public SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } } + public SaInterfaceConsole InterfaceConsole { get { return Internals.InterfaceConsole; } } + public SaItemDocConsole ItemDocConsole { get { return Internals.ItemDocConsole; } } + public SaItemOptionConsole ItemOptionConsole { get { return Internals.ItemOptionConsole; } } + public SaItemDataConsole ItemDataConsole { get { return Internals.ItemDataConsole; } } + // Configurations. + public SbmStockControlConfig StockControlConfig { get { return Internals.StockControlConfig; } } + public SbmRequirementCostingConfig RequirementCostingConfig { get { return Internals.RequirementCostingConfig; } } + // System codes. + public List GetCodesOfType(Sbm.SystemCode systemCode) { return Internals.GetCodesOfType(systemCode); } + + //------------------------------------------------------------------- + // Security. + public bool ValidUserSession { get { return SessionData?.ValidUserSession ?? false; } } + public bool AwaitingLogin { get { return !ValidUserSession; } } + public bool KeepLoggedIn { get { return !AwaitingLogin && SessionData.User.KeepLoggedIn; } } + /// Maximum length allowed for password entry: sign-up, change password etc. + public int PasswordMaxLength { get; } = 32; + + //------------------------------------------------------------------- + /// + /// Form control value max length. + /// In many cases the database columns allow plenty of extra space for the value, in case they need to be encrypted. + /// Hence, several cases where the value entered in the control isn't allowed the full database length. + /// + public int GetControlMaxLength(SbmDbDfn.ColumnIdx column) + { + int maxLength = (int)SbmDbDfn.GetColTextLen(column); + switch (column) + { + case SbmDbDfn.ColumnIdx.Affiliate_Email: + return Math.Min(maxLength, 60); + case SbmDbDfn.ColumnIdx.Affiliate_FirstName: + case SbmDbDfn.ColumnIdx.Affiliate_LastName: + return Math.Min(maxLength, 40); + case SbmDbDfn.ColumnIdx.Affiliate_Name: + return Math.Min(maxLength, 80); + case SbmDbDfn.ColumnIdx.Affiliate_PhoneMain: + case SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile: + case SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt: + return Math.Min(maxLength, 20); + case SbmDbDfn.ColumnIdx.Address_Postcode: + return Math.Min(maxLength, 16); + } + return maxLength; + } + + //------------------------------------------------------------------- + // Copyright notice. + public HtmlString CopyrightNotice + { + get + { + int initialYear = 2020; + int currentYear = DateTime.Today.Year; + return Localiser.GetHtmlText("copyright.symbol.year.html", (initialYear != currentYear ? initialYear + "-" : "") + currentYear.ToString()); + } + } + + //------------------------------------------------------------------- + // Form data - Dates. + // Format may depend on locale, but as long as these methods are used consistently, + // there should be consistent formatting, display and parsing of date values. + public String CalendarDateFormat + { + get + { + // JQuery-UI DatePicker date format. + // Format: + // d Single digit day of month + // dd Double digit day of month + // D 3 letter day of week abbreviation. + // DD Day of week. + // m Single digit month. + // mm Double digit month. + // M 3 letter month abbreviation. + // MM Month name. + // yy 4 digit year. + // Examples: + // dd/mm/yy 07/04/2012 + // dd-M-yy 07-Apr-2012 + // d-M-yy 7-Apr-2012 + return "dd-M-yy"; + } + } + public String FormatDateForForm(DateTime value) + { + return DateUtil.Format(value, "dd-MMM-yyyy"); + } + public DateTime ParseDateFromForm(String value) + { + return DateUtil.ParseExact(value, "dd-MMM-yyyy"); + } + + //------------------------------------------------------------------- + // Link URLs. + public class LinksData + { + public String Facebook { get; } = "https://www.facebook.com/BusinessMgr/"; + public String LinkedIn { get; } = "https://www.linkedin.com/company/BusinessMgr/about/"; + } + public LinksData Links { get; } = new LinksData(); + + //------------------------------------------------------------------- + // Form data. + + /// List of Address Types for dropdown. + public IEnumerable AddressTypeCodesForSelect + { + get { return new SelectList(GetCodesOfType(Sbm.SystemCode.AddressType), "Code", "Desc"); } + } + + /// List of Affiliate Types for dropdown. + public IEnumerable AffiliateTypeCodesForSelect + { + get { return new SelectList(GetCodesOfType(Sbm.SystemCode.AffiliateType), "Code", "Desc"); } + } + + /// List of Association Types for dropdown. + public IEnumerable AssociationTypeCodesForSelect + { + get { return new SelectList(GetCodesOfType(Sbm.SystemCode.AssociationType), "Code", "Desc"); } + } + + /// List of Commodity Types for dropdown. + public IEnumerable CommodityTypeCodesForSelect + { + get { return new SelectList(GetCodesOfType(Sbm.SystemCode.CommodityType), "Code", "Desc"); } + } + + //------------------------------------------------------------------- + // Version parameter for includes. + public String HrefVersion + { + get + { + DateTime versionDate = SbmSystem.AssemblyBuildAt; + if (!DateUtil.IsValid(versionDate) || SbmSystem.DebugMode) + versionDate = DateTime.Now; + return DateUtil.Format(versionDate, "yyyyMMdd" /*+ (SacsSystem.Debug ? "HHmm" : "")*/); + } + } + // Additional includes. + public List AdditionalFiles_CSS { get; set; } = new List(); + public List AdditionalFiles_JS { get; set; } = new List(); + + //------------------------------------------------------------------- + // Redirection locations. + public class RedirectLocationData + { + // Properties populated in Controller_Base.OnActionExecuted. + public String Base { get; internal set; } + public String Home { get; internal set; } + public String Home_SessionExpired { get; internal set; } + } + public RedirectLocationData RedirectLocation { get; } = new RedirectLocationData(); + + //------------------------------------------------------------------- + // Paging properties. + public class DataPaging + { + private DbQuery.Paging paging { get; } = new DbQuery.Paging(); + public void PopulatePagingTo(DbQuery.Paging resultsPaging) + { + resultsPaging.PageLength = paging.PageLength; + resultsPaging.PageNo = paging.PageNo; + } + public bool IsPaged { get { return paging.Paged; } } + public uint PageNo { get { return paging.PageNo; } set { paging.PageNo = value; } } + public ushort PageLength { get { return paging.PageLength; } set { paging.PageLength = value; } } + public uint PageCount { get { return (PageLength > 0 ? (uint)Math.Ceiling((decimal)ItemTotal / PageLength) : 0); } } + public ushort ItemCount { get; set; } + private ulong itemTotal = 0; + public ulong ItemTotal + { + get { return itemTotal; } + set + { + itemTotal = value; + // Check whether the total number of items is less than the current page and reduce page no if needed. + if (IsPaged && (PageNo - 1) * PageLength > itemTotal) + PageNo = (uint)((itemTotal - 1) / PageLength + 1); + } + } + } + public DataPaging Paging { get; } = new DataPaging(); + public void PopulatePagingTo(DbQuery.Paging resultsPaging) + { + Paging.PopulatePagingTo(resultsPaging); + } + + //------------------------------------------------------------------- + // Form properties. + /// + /// User session index to identify the site resources, eg. database. + /// Equivalent to the Site index on the login form. + /// Populates value on logout form to identify default site for next login. + /// + public ushort SessionIdx { get { return SessionContext.Index; } } + public String FormAction { get; set; } + + //------------------------------------------------------------------- + // Messages. + //------------------------------------------------------------------- + public bool HasMessages() + { + return infoMessages.Count > 0 || warningMessages.Count > 0 || errorMessages.Count > 0; + } + public List InfoMessages { get { return new List(infoMessages); } } + public List WarningMessages { get { return new List(warningMessages); } } + public List ErrorMessages { get { return new List(errorMessages); } } + + //------------------------------------------------------------------- + // Form messages. + public void AddInfoMessage(String message) + { + if (StringUtil.IsEmpty(StringUtil.TrimAll(message))) return; + infoMessages.Add(message); + } + public void AddWarningMessage(String message) + { + if (StringUtil.IsEmpty(StringUtil.TrimAll(message))) return; + warningMessages.Add(message); + } + public void AddErrorMessage(String message) + { + if (StringUtil.IsEmpty(StringUtil.TrimAll(message))) return; + errorMessages.Add(message); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/App/Sbm-Version.cs b/SaBusMgrStandardBase/Base/App/Sbm-Version.cs new file mode 100644 index 0000000..bdc4f9c --- /dev/null +++ b/SaBusMgrStandardBase/Base/App/Sbm-Version.cs @@ -0,0 +1,45 @@ +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Standard.Base.App +{ + //======================================================================= + static partial class Sbm + { + //------------------------------------------------------------------- + // Application version. + //------------------------------------------------------------------- + public static class Version + { + private static String version { get; } = "3.0.0.0"; + // Retrieve version. + public static String GetFullVersion() { return version; } + public static String GetAppVersion() + { + if (!SbmSystem.DebugMode) + { + try + { + // Live instance version is only first 3 elements. + String[] versionElements = version.Split('.'); + return String.Join(".", versionElements.Take(3)); + } + catch (Exception exc) { SaLogger.Warn("Sbm.Version.ToString " + ExceptionUtil.GetErrorStateMessage(exc)); } + } + return version; + } + } + + //------------------------------------------------------------------- + // Version history. + //------------------------------------------------------------------- + // 3.0.0 ?-Jul-2021 Initial demo test version. + // - . + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/App/SbmDfn.cs b/SaBusMgrStandardBase/Base/App/Sbm.cs similarity index 94% rename from SaBusMgrStandardBase/Base/App/SbmDfn.cs rename to SaBusMgrStandardBase/Base/App/Sbm.cs index 7612517..5183440 100644 --- a/SaBusMgrStandardBase/Base/App/SbmDfn.cs +++ b/SaBusMgrStandardBase/Base/App/Sbm.cs @@ -1,21 +1,106 @@ -using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.App { //======================================================================= - public static class Sbm + public static partial class Sbm { + //------------------------------------------------------------------- + // Application configuration defaults. + public static class Config + { + public static String Context_Defaults { get; } = "Defaults"; + public static class Security + { + public static class Password + { + } + public static class Activation + { + public static int EmailLinkExpiresMins_Default { get; } = 60; + public static int EmailLinkExpiresMins_Min { get; } = 30; + public static int EmailLinkExpiresMins_Max { get; } = 60 * 24; + } + public static class SignIn + { + public static class PasswordRequest + { + public static int EmailLinkExpiresMins_Default { get; } = 60; + public static int EmailLinkExpiresMins_Min { get; } = 30; + public static int EmailLinkExpiresMins_Max { get; } = 60 * 24; + } + public static class KeepLoggedIn + { + public static bool Allowed_Default { get; } = true; + public static int CookieExpiresDays_Default { get; } = 10; + public static int CookieExpiresDays_Min { get; } = 1; + public static int CookieExpiresDays_Max { get; } = 30; + } + } + } + public class Online + { + public static class Session + { + public static class Cookie + { + /// Default cookie name: '.AspNetCore.Session' + public static String Name { get; } = "BusinessMgr.Online.Session"; + public static bool HttpOnly { get; } = true; + public static TimeSpan IdleTimeout { get; } = SacsSystem.DebugMode ? TimeSpan.FromMinutes(5) : TimeSpan.FromMinutes(60); + public static long RememberMeTimeoutMilis { get; } = (long)(SacsSystem.DebugMode ? TimeSpan.FromMinutes(2) : TimeSpan.FromMinutes(10)).TotalMilliseconds; + } + } + public static class DataCache + { + public static class RefreshIntervalSecs + { + public static int Initial { get; } = SacsSystem.DebugMode ? 2 : 5; + public static int Periodic { get; } = SacsSystem.DebugMode ? 60 : 1800; + } + } + } + public class Admin + { + public static class Session + { + public static class Cookie + { + /// Default cookie name: '.AspNetCore.Session' + public static String Name { get; } = "BusinessMgr.Admin.Session"; + public static bool HttpOnly { get; } = true; + public static TimeSpan IdleTimeout { get; } = SacsSystem.DebugMode ? TimeSpan.FromMinutes(5) : TimeSpan.FromMinutes(15); + public static long KeepLoggedInTimeoutMillis { get; } = (long)(SacsSystem.DebugMode ? TimeSpan.FromMinutes(2) : TimeSpan.FromMinutes(10)).TotalMilliseconds; + } + } + } + } + //------------------------------------------------------------------- // Definitions. - public static String Version { get; } = "3.0.0.0"; public static String ApplicationCaption { get; } = "Sarand BusinessMgr"; // Option values. public static String ValueYes { get; } = "YES"; public static String ValueNo { get; } = "NO"; public static List ValuesYesNo { get; } = new List() { new CodeDesc(ValueYes, "Yes"), new CodeDesc(ValueNo, "No") }; + //------------------------------------------------------------------- + public enum Application + { + WebControl, + WebPortal, + } + public enum InstanceType + { + Production, + UAT, + QC, + Dev + } + //------------------------------------------------------------------- // Configuration console. public enum ConfigConsole diff --git a/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs b/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs index 6a700f3..a4877cc 100644 --- a/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs +++ b/SaBusMgrStandardBase/Base/App/SbmAppConsole.cs @@ -12,9 +12,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // A p p l i c a t i o n V i e w s //------------------------------------------------------------------- - public static bool IsViewApplicable(SbmUserContext userContext, Sbm.View view) + // Jul-2021 ConfigConsole parameter added to avoid local creation. To be reviewed/replaced. + public static bool IsViewApplicable(SbmUserContext userContext, SbmConfigConsole configConsole, Sbm.View view) { - SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(userContext.SessionContext); + //SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(userContext.SessionContext); SbmSecurityProfile securityProfile = userContext.SecurityProfile; switch (view) { @@ -223,11 +224,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App case Sbm.View.SystemUsers: if (!configConsole.AllowOption(userContext, Sbm.ConfigOption.AllowContacts)) return false; // Interfaces must be available. - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); - if (interfaceConsole == null || !interfaceConsole.DatabaseIsValid) return false; - // System Account & User tables must be available. - if (!SbmGlobals.Application.TableExists(userContext.SessionContext, SbmDbDfn.TableIdx.SystemAccount)) return false; - if (!SbmGlobals.Application.TableExists(userContext.SessionContext, SbmDbDfn.TableIdx.SystemUser)) return false; + using (SaInterfaceConsole interfaceConsole = SbmGlobals.Application.CreateInterfaceConsole(userContext)) + { + if (interfaceConsole == null || !interfaceConsole.DatabaseIsValid) return false; + // System Account & User tables must be available. + if (!SbmGlobals.Application.BusMgrTableExists(userContext.SessionContext, SbmDbDfn.TableIdx.SystemAccount)) return false; + if (!SbmGlobals.Application.BusMgrTableExists(userContext.SessionContext, SbmDbDfn.TableIdx.SystemUser)) return false; + } return true; } @@ -257,7 +260,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // A p p l i c a t i o n M e n u //------------------------------------------------------------------- - public static bool IsMenuOptionApplicable(SbmUserContext userContext, Sbm.MenuOption menuOption) + public static bool IsMenuOptionApplicable(SbmUserContext userContext, SbmConfigConsole configConsole, Sbm.MenuOption menuOption) { String fn = ClassName + ".IsMenuOptionApplicable"; if (!userContext.ValidUser) @@ -268,7 +271,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App Sbm.View view = GetViewForMenuOption(userContext.SessionContext, menuOption); if (view != Sbm.View.Unknown) // View options. - return IsViewApplicable(userContext, GetViewForMenuOption(userContext.SessionContext, menuOption)); + return IsViewApplicable(userContext, configConsole, GetViewForMenuOption(userContext.SessionContext, menuOption)); // Non-view options. switch (menuOption) @@ -278,16 +281,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App case Sbm.MenuOption.Config_Organisation: return true; case Sbm.MenuOption.Config_CodeTypes: - return (SbmGlobals.Application.GetCodeTypeConsole(userContext) != null); + return true; // (SbmGlobals.Application.GetCodeTypeConsole(userContext) != null); case Sbm.MenuOption.Config_Interfaces: - return (SbmGlobals.Application.GetInterfaceConsole(userContext) != null); + return true; // (SbmGlobals.Application.GetInterfaceConsole(userContext) != null); case Sbm.MenuOption.Security_Manage: - return (SbmGlobals.Application.GetSecurityConsole(userContext) != null); - //----------------------------------------------------------- - // Actions. + return true; // (SbmGlobals.Application.GetSecurityConsole(userContext) != null); + //----------------------------------------------------------- + // Actions. case Sbm.MenuOption.Timesheet: - return SbmGlobals.Application.GetConfigConsole(userContext.SessionContext).AllowOption(userContext, Sbm.ConfigOption.TimeRecording); - //----------------------------------------------------------- + return configConsole.AllowOption(userContext, Sbm.ConfigOption.TimeRecording); + //----------------------------------------------------------- } SaLogger.Warn(fn + " Unsupport menu option - " + menuOption.ToString()); return false; diff --git a/SaBusMgrStandardBase/Base/App/SbmApplication.cs b/SaBusMgrStandardBase/Base/App/SbmApplication.cs index 70b080c..413a1b2 100644 --- a/SaBusMgrStandardBase/Base/App/SbmApplication.cs +++ b/SaBusMgrStandardBase/Base/App/SbmApplication.cs @@ -1,9 +1,10 @@ -using Sarand.BusinessMgr.Net.Standard.Base.Mgr; +using Sarand.BusinessMgr.Net.Standard.Base.Consoles; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Diary; using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.ItemData; using Sarand.Net.Standard.Base.ItemDocs; using Sarand.Net.Standard.Base.ItemOptions; using Sarand.Net.Standard.Base.ReferenceData; @@ -42,55 +43,43 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } //------------------------------------------------------------------- + // Properties. + public abstract SbmSystem System { get; } // Database. - public abstract ISacsDatabase GetDatabase(SbmSessionContext sessionContext); - public abstract bool TableExists(SbmSessionContext sessionContext, SbmDbDfn.TableIdx tableIdx); - public abstract bool ColumnExists(SbmSessionContext sessionContext, SbmDbDfn.ColumnIdx columnIdx); + public abstract ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext); + public abstract IDatabaseInfo CreateBusMgrDbInfo(SbmSessionContext sessionContext); + public bool BusMgrTableExists(SbmSessionContext sessionContext, SbmDbDfn.TableIdx tableIdx) + { + ISacsDatabase db = GetBusMgrDatabase(sessionContext); + return db?.TableExists(SbmDbDfn.GetTableName(tableIdx)) ?? false; + } + public bool BusMgrColumnExists(SbmSessionContext sessionContext, SbmDbDfn.ColumnIdx columnIdx) + { + ISacsDatabase db = GetBusMgrDatabase(sessionContext); + return db?.ColumnExists(SbmDbDfn.GetTableName(SbmDbDfn.GetTableForColumn(columnIdx)), SbmDbDfn.GetColumnName(columnIdx, false)) ?? false; + } + // Application instance. + public abstract Sbm.InstanceType InstanceType { get; } + public bool IsLiveHost() { return InstanceType == Sbm.InstanceType.Production; } + public bool IsTestHost() { return InstanceType != Sbm.InstanceType.Production; } + public bool IsDevHost() { return InstanceType == Sbm.InstanceType.Dev; } + public abstract String EnvironmentName { get; } + // Email configuration. + public abstract SbmEmailConfig EmailConfig { get; } //------------------------------------------------------------------- - // Config Console. - public abstract SbmConfigConsole GetConfigConsole(SbmSessionContext sessionContext); - - //------------------------------------------------------------------- - // Managers. - public abstract SbmAccountMgr CreateAccountMgr(SbmUserContext userContext); - public abstract SbmTransactionMgr CreateTransactionMgr(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Diary console. - public abstract SaDiaryConsole GetDiaryConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Security console. - public abstract SaSecurityConsole GetSecurityConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Code Type console. - public abstract SaCodeTypeConsole GetCodeTypeConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Reference Data console. - public abstract SaReferenceDataConsole GetReferenceDataConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Item Data console. - public abstract Sarand.Net.Standard.Base.ItemData.SaItemDataConsole GetItemDataConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Item Doc console. - public abstract SaItemDocConsole GetItemDocConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Item Option console. - public abstract SaItemOptionConsole GetItemOptionConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Interface console. - public abstract SaInterfaceConsole GetInterfaceConsole(SbmUserContext userContext); - - //------------------------------------------------------------------- - // Update Log console. - public abstract SaUpdateLogConsole GetUpdateLogConsole(SbmUserContext userContext); + // Create consoles. + public abstract SbmConfigConsole CreateConfigConsole(SbmSessionContext sessionContext); + public abstract SaDiaryConsole CreateDiaryConsole(SbmUserContext userContext); + public abstract SaSecurityConsole CreateSecurityConsole(SbmUserContext userContext); + public abstract SaCodeTypeConsole CreateCodeTypeConsole(SbmUserContext userContext); + public abstract SaReferenceDataConsole CreateReferenceDataConsole(SbmUserContext userContext); + public abstract SaItemDataConsole CreateItemDataConsole(SbmUserContext userContext); + public abstract SaItemDocConsole CreateItemDocConsole(SbmUserContext userContext); + public abstract SaItemOptionConsole CreateItemOptionConsole(SbmUserContext userContext); + public abstract SaInterfaceConsole CreateInterfaceConsole(SbmUserContext userContext); + public abstract SaUpdateLogConsole CreateUpdateLogConsole(SbmUserContext userContext); + public abstract SbmEmailConsole CreateEmailConsole(SbmUserContext userContext); //------------------------------------------------------------------- } diff --git a/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs b/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs index d9fda45..e856f75 100644 --- a/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs +++ b/SaBusMgrStandardBase/Base/App/SbmConfigConsole.cs @@ -77,7 +77,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App protected SbmConfigConsole(Sbm.ConfigConsole configConsole, SbmVersion consoleVersion, SbmSessionContext sessionContext) { ConfigConsole = configConsole; - AppVersion = new SbmVersion("BusinessMgr", Sbm.Version, SbmSystem.AssemblyBuildAt); + AppVersion = new SbmVersion("BusinessMgr", Sbm.Version.GetFullVersion(), SbmSystem.AssemblyBuildAt); ConsoleVersion = consoleVersion; SessionContext = sessionContext; } @@ -103,7 +103,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App String fn = "SbmConfigConsole.CreateConsole"; SaLogger.Warn(fn + ".CreateConsole Creating default configuration console."); // Default console. - SbmVersion consoleVersion = new SbmVersion("Standard", Sbm.Version, SbmSystem.AssemblyBuildAt); + SbmVersion consoleVersion = new SbmVersion("Standard", Sbm.Version.GetFullVersion(), SbmSystem.AssemblyBuildAt); return new SbmConfigConsole(Sbm.ConfigConsole.Generic, consoleVersion, sessionContext); } @@ -593,7 +593,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public virtual bool SetMinTransactionId(SbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes, long iId) { bool set = false; - if (SbmGlobals.Application.GetDatabase(SessionContext) != null) + if (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) != null) { String nextIdKey = GetTransactionNextIdKey(userContext, AffiliateId_Owner, idAssoc, transTypes); // ToDo set = SbmGlobals.Database.SetMinNextId(nextIdKey, iId, false); @@ -607,7 +607,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App (SbmUserContext userContext, SysId AffiliateId_Owner, SysId idAssoc, Sbm.TransactionType transTypes) { String Ref = ""; - if (SbmGlobals.Application.GetDatabase(SessionContext) != null) + if (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) != null) { String NextIdKey = GetTransactionNextIdKey(userContext, AffiliateId_Owner, idAssoc, transTypes); // ToDo long iRefNext = SbmGlobals.Database.GetNextId(NextIdKey, false); diff --git a/SaBusMgrStandardBase/Base/App/SbmConsoleHelper.cs b/SaBusMgrStandardBase/Base/App/SbmConsoleHelper.cs deleted file mode 100644 index 9ff46bc..0000000 --- a/SaBusMgrStandardBase/Base/App/SbmConsoleHelper.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Sarand.Net.Standard.Base.CodeTypes; -using Sarand.Net.Standard.Base.Dbas; -using Sarand.Net.Standard.Base.Interfaces; -using Sarand.Net.Standard.Base.ItemOptions; -using Sarand.Net.Standard.Base.ReferenceData; -using Sarand.Net.Standard.Base.Security; -using Sarand.Net.Standard.Base.UpdateLog; - -namespace Sarand.BusinessMgr.Net.Standard.Base.App -{ - //======================================================================= - public abstract class SbmConsoleHelper - { - //------------------------------------------------------------------- - // Protected construction - use derived objects. - protected SbmConsoleHelper() - { - } - - //------------------------------------------------------------------- - // Database. - public abstract ISacsDatabase GetDatabase(SbmSessionContext sessionContext); - - //------------------------------------------------------------------- - // Create local consoles. - - //------------------------------------------------------------------- - // Retrieve Global Consoles by session context. - public abstract SaSecurityConsole GetSecurityConsole(SbmSessionContext sessionContext); - public abstract SaCodeTypeConsole GetCodeTypeConsole(SbmSessionContext sessionContext); - public abstract SaReferenceDataConsole GetReferenceDataConsole(SbmSessionContext sessionContext); - public abstract SaItemOptionConsole GetItemOptionConsole(SbmSessionContext sessionContext); - public abstract SaInterfaceConsole GetInterfaceConsole(SbmSessionContext sessionContext); - public abstract SaUpdateLogConsole GetUpdateLogConsole(SbmSessionContext sessionContext); - - //------------------------------------------------------------------- - } - //======================================================================= -} diff --git a/SaBusMgrStandardBase/Base/App/SbmGlobals.cs b/SaBusMgrStandardBase/Base/App/SbmGlobals.cs index cd235fe..7a98225 100644 --- a/SaBusMgrStandardBase/Base/App/SbmGlobals.cs +++ b/SaBusMgrStandardBase/Base/App/SbmGlobals.cs @@ -24,79 +24,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Database. - public static ISacsDatabase GetDatabase(SbmSessionContext sessionContext) + public static ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext) { - return Application != null ? Application.GetDatabase(sessionContext) : null; - } - - //------------------------------------------------------------------- - // Configuration console. - public static SbmConfigConsole GetConfigConsole(SbmSessionContext sessionContext) - { - return Application != null ? Application.GetConfigConsole(sessionContext) : null; - } - - //------------------------------------------------------------------- - // Diary. - public static SaDiaryConsole GetDiaryConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetDiaryConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Security console. - public static SaSecurityConsole GetSecurityConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetSecurityConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Code Type console. - public static SaCodeTypeConsole GetCodeTypeConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetCodeTypeConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Reference Data console. - public static SaReferenceDataConsole GetReferenceDataConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetReferenceDataConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Item Data console. - public static SaItemDataConsole GetItemDataConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetItemDataConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Item Doc console. - public static SaItemDocConsole GetItemDocConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetItemDocConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Item Option console. - public static SaItemOptionConsole GetItemOptionConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetItemOptionConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Interface console. - public static SaInterfaceConsole GetInterfaceConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetInterfaceConsole(userContext) : null; - } - - //------------------------------------------------------------------- - // Update Log console. - public static SaUpdateLogConsole GetUpdateLogConsole(SbmUserContext userContext) - { - return Application != null ? Application.GetUpdateLogConsole(userContext) : null; + return Application != null ? Application.GetBusMgrDatabase(sessionContext) : null; } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardBase/Base/App/SbmInternals.cs b/SaBusMgrStandardBase/Base/App/SbmInternals.cs index 55487e5..3d3c28f 100644 --- a/SaBusMgrStandardBase/Base/App/SbmInternals.cs +++ b/SaBusMgrStandardBase/Base/App/SbmInternals.cs @@ -1,10 +1,14 @@ using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.BusinessMgr.Net.Standard.Base.Consoles; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Diary; +using Sarand.Net.Standard.Base.Email; using Sarand.Net.Standard.Base.Interfaces; +using Sarand.Net.Standard.Base.ItemData; using Sarand.Net.Standard.Base.ItemDocs; using Sarand.Net.Standard.Base.ItemOptions; using Sarand.Net.Standard.Base.ReferenceData; @@ -34,6 +38,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App private SbmDataItemMgr dataItemMgr; // Consoles. private SbmConfigConsole configConsole; + private SaDiaryConsole diaryConsole; private SaSecurityConsole securityConsole; private SaCodeTypeConsole codeTypeConsole; private SaReferenceDataConsole referenceDataConsole; @@ -41,6 +46,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App private SaInterfaceConsole interfaceConsole; private SaItemDocConsole itemDocConsole; private SaItemOptionConsole itemOptionConsole; + private SaItemDataConsole itemDataConsole; + public SbmEmailConsole emailConsole; // Configurations. private SbmStockControlConfig stockControlConfig; private SbmRequirementCostingConfig requirementCostingConfig; @@ -59,6 +66,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App { if (disposing) { + // Managers. if (accountMgr != null) accountMgr.Dispose(); if (assetMgr != null) assetMgr.Dispose(); if (commodityMgr != null) commodityMgr.Dispose(); @@ -70,17 +78,42 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App if (currencies != null) currencies.ClearAndDispose(); if (taxCodes != null) taxCodes.ClearAndDispose(); if (unitsOfMeasure != null) unitsOfMeasure.ClearAndDispose(); + // Consoles. + if (configConsole != null) configConsole.Dispose(); + if (diaryConsole != null) diaryConsole.Dispose(); + if (securityConsole != null) securityConsole.Dispose(); + if (codeTypeConsole != null) codeTypeConsole.Dispose(); + if (referenceDataConsole != null) referenceDataConsole.Dispose(); + if (updateLogConsole != null) updateLogConsole.Dispose(); + if (interfaceConsole != null) interfaceConsole.Dispose(); + if (itemDocConsole != null) itemDocConsole.Dispose(); + if (itemOptionConsole != null) itemOptionConsole.Dispose(); + if (itemDataConsole != null) itemDataConsole.Dispose(); + if (itemDataConsole != null) itemDataConsole.Dispose(); } } //------------------------------------------------------------------- // Session properties. + public SbmApplication Application { get { return SbmGlobals.Application; } } public SbmUserContext UserContext { get; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } public SbmSecurityProfile SecurityProfile { get { return UserContext.SecurityProfile; } } public SbmAccountsDfn AccountsDfn { get { if (accountsDfn == null) accountsDfn = new SbmAccountsDfn(UserContext); { return accountsDfn; } } } + // Database. + public ISacsDatabase BusMgrDatabase { get { return Application.GetBusMgrDatabase(SessionContext); } } public DbUpdateInfo DbUpdateInfo { get { return UserContext.DbUpdateInfo; } } + //------------------------------------------------------------------- + // System codes. + private Dictionary> systemCodeCache = new Dictionary>(); + public List GetCodesOfType(Sbm.SystemCode systemCode) + { + if (!systemCodeCache.ContainsKey(systemCode)) + systemCodeCache.Add(systemCode, SbmSystem.GetCodesOfType(UserContext, systemCode)); + return systemCodeCache.GetValueOrDefault(systemCode, new List()); + } + //------------------------------------------------------------------- // Managers. public SbmAccountMgr AccountMgr @@ -163,16 +196,25 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App get { if (configConsole == null) - configConsole = SbmGlobals.GetConfigConsole(SessionContext); + configConsole = Application.CreateConfigConsole(SessionContext); return configConsole; } } + public SaDiaryConsole DiaryConsole + { + get + { + if (diaryConsole == null) + diaryConsole = Application.CreateDiaryConsole(UserContext); + return DiaryConsole; + } + } public SaSecurityConsole SecurityConsole { get { if (securityConsole == null) - securityConsole = SbmGlobals.GetSecurityConsole(UserContext); + securityConsole = Application.CreateSecurityConsole(UserContext); return securityConsole; } } @@ -181,7 +223,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App get { if (codeTypeConsole == null) - codeTypeConsole = SbmGlobals.GetCodeTypeConsole(UserContext); + codeTypeConsole = Application.CreateCodeTypeConsole(UserContext); return codeTypeConsole; } } @@ -190,7 +232,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App get { if (referenceDataConsole == null) - referenceDataConsole = SbmGlobals.GetReferenceDataConsole(UserContext); + referenceDataConsole = Application.CreateReferenceDataConsole(UserContext); return referenceDataConsole; } } @@ -199,7 +241,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App get { if (updateLogConsole == null) - updateLogConsole = SbmGlobals.GetUpdateLogConsole(UserContext); + updateLogConsole = Application.CreateUpdateLogConsole(UserContext); return updateLogConsole; } } @@ -208,7 +250,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App get { if (interfaceConsole == null) - interfaceConsole = SbmGlobals.GetInterfaceConsole(UserContext); + interfaceConsole = Application.CreateInterfaceConsole(UserContext); return interfaceConsole; } } @@ -217,7 +259,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App get { if (itemDocConsole == null) - itemDocConsole = SbmGlobals.GetItemDocConsole(UserContext); + itemDocConsole = Application.CreateItemDocConsole(UserContext); return itemDocConsole; } } @@ -226,10 +268,32 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App get { if (itemOptionConsole == null) - itemOptionConsole = SbmGlobals.GetItemOptionConsole(UserContext); + itemOptionConsole = Application.CreateItemOptionConsole(UserContext); return itemOptionConsole; } } + public SaItemDataConsole ItemDataConsole + { + get + { + if (itemDataConsole == null) + itemDataConsole = Application.CreateItemDataConsole(UserContext); + return itemDataConsole; + } + } + + //------------------------------------------------------------------- + // Email. + public SaEmailConfig EmailConfig { get { return Application.EmailConfig; } } + public SbmEmailConsole EmailConsole + { + get + { + if (emailConsole == null) + emailConsole = Application.CreateEmailConsole(UserContext); + return emailConsole; + } + } //------------------------------------------------------------------- // Configurations. diff --git a/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs b/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs index 9b2db18..b8bad32 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs @@ -39,7 +39,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Refresh profile. - public void RefreshProfile(SaSecurityConsole securityConsole, SysId userId, List securityRights) + public void RefreshProfile(SbmConfigConsole configConsole, SaSecurityConsole securityConsole, SysId userId, List securityRights) { String fn = GetType().Name + ".RefreshProfile"; ClearErrorState(); @@ -62,53 +62,33 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } SaLogger.Debug(fn + " User: '" + UserDisplayName + "' [Id: " + UserId + "]" + (SysId.IsValid(previousUserId) ? ". Previous UserId: " + SysId.ToString(previousUserId) : "")); - RefreshProfileSettings(); + RefreshProfileSettings(configConsole); } - protected void RefreshProfile(SaSecurityProfile userSecurityProfile, SaSecurityProfile hostSecurityProfile) + protected void RefreshProfile(SbmConfigConsole configConsole, SaSecurityProfile userSecurityProfile, SaSecurityProfile hostSecurityProfile) { this.userSecurityProfile = userSecurityProfile; this.hostSecurityProfile = hostSecurityProfile; - RefreshProfileSettings(); + RefreshProfileSettings(configConsole); } - private void RefreshProfileSettings() + private void RefreshProfileSettings(SbmConfigConsole configConsole) { - // Admin. - Admin.CanManageSecurity = UserHasSecurityRight(Sbm.SecurityRight.Security_Admin); - Admin.CanManageDatabase = UserHasSecurityRight(Sbm.SecurityRight.Database_Admin); - Admin.CanManageReferenceData = UserHasSecurityRight(Sbm.SecurityRight.ReferenceData_Admin); - Admin.CanManageInterfaces = UserHasSecurityRight(Sbm.SecurityRight.InterfaceConfig); - - // Manage. - Manage.CanManageTasks = UserHasSecurityRight(Sbm.SecurityRight.TaskManager); - Manage.CanManageTimesheets = UserHasSecurityRight(Sbm.SecurityRight.TimesheetManager); - - //Financials. - Financial.CanViewFinancials = UserHasSecurityRight(Sbm.SecurityRight.Financial_View); - Financial.CanUpdateFinancials = UserHasSecurityRight(Sbm.SecurityRight.Financial_Update); - Financial.CanViewCommoditySupplyFinancials = UserCanAccessFinancialViewOfType(Sbm.FinancialType.CommoditySupply); - Financial.CanUpdateCommoditySupplyFinancials = UserCanAccessFinancialUpdateOfType(Sbm.FinancialType.CommoditySupply); - Financial.CanViewCommoditySalesFinancials = UserCanAccessFinancialViewOfType(Sbm.FinancialType.CommoditySales); - Financial.CanUpdateCommoditySalesFinancials = UserCanAccessFinancialUpdateOfType(Sbm.FinancialType.CommoditySales); - - // Contacts. - Contacts.CanUpdate = (UserHasSecurityRight(Sbm.SecurityRight.Affiliate_Update)); - Contacts.CanCreate = (Contacts.CanUpdate || UserHasSecurityRight(Sbm.SecurityRight.Affiliate_Create)); - - // Transactions. - Transaction.CanUpdate = (UserHasSecurityRight(Sbm.SecurityRight.Transaction_Update)); - Transaction.CanCreate = (Transaction.CanUpdate || UserHasSecurityRight(Sbm.SecurityRight.Transaction_View)); - + RefreshAdminProfile(configConsole); + RefreshManageProfile(configConsole); + RefreshFinancialProfile(configConsole); + RefreshContactsProfile(configConsole); + RefreshTransactionProfile(configConsole); + RefreshItemTypeProfile(configConsole); // ToDo Commodities. } private void ClearProfile() { // Reset security profiles. - Admin.Clear(); - Manage.Clear(); - Financial.Clear(); - Contacts.Clear(); - Transaction.Clear(); + Admin = new AdminProfile(this); + Manage = new ManageProfile(this); + Financial = new FinancialProfile(this); + Contacts = new ContactsProfile(this); + Transaction = new TransactionsProfile(this); } //------------------------------------------------------------------- @@ -152,15 +132,15 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public bool CanManageDatabase { get; internal set; } = false; public bool CanManageReferenceData { get; internal set; } = false; public bool CanManageInterfaces { get; internal set; } = false; - internal void Clear() - { - CanManageSecurity = false; - CanManageDatabase = false; - CanManageReferenceData = false; - CanManageInterfaces = false; - } } - public AdminProfile Admin { get; } + public AdminProfile Admin { get; internal set; } + private void RefreshAdminProfile(SbmConfigConsole configConsole) + { + Admin.CanManageSecurity = UserHasSecurityRight(Sbm.SecurityRight.Security_Admin); + Admin.CanManageDatabase = UserHasSecurityRight(Sbm.SecurityRight.Database_Admin); + Admin.CanManageReferenceData = UserHasSecurityRight(Sbm.SecurityRight.ReferenceData_Admin); + Admin.CanManageInterfaces = UserHasSecurityRight(Sbm.SecurityRight.InterfaceConfig); + } //------------------------------------------------------------------- // Security rights - Manage. @@ -173,12 +153,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } public bool CanManageTasks { get; internal set; } = false; public bool CanManageTimesheets { get; internal set; } = false; - internal void Clear() - { - CanManageTasks = false; - } } - public ManageProfile Manage { get; } + public ManageProfile Manage { get; internal set; } + private void RefreshManageProfile(SbmConfigConsole configConsole) + { + Manage.CanManageTasks = UserHasSecurityRight(Sbm.SecurityRight.TaskManager); + Manage.CanManageTimesheets = UserHasSecurityRight(Sbm.SecurityRight.TimesheetManager); + } //------------------------------------------------------------------- // Security rights - Financials. @@ -189,28 +170,30 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App { this.securityProfile = securityProfile; } - public bool CanViewFinancials { get; internal set; } = false; - public bool CanUpdateFinancials { get; internal set; } = false; - public bool CanViewCommoditySupplyFinancials { get; internal set; } = false; - public bool CanUpdateCommoditySupplyFinancials { get; internal set; } = false; - public bool CanViewCommoditySalesFinancials { get; internal set; } = false; - public bool CanUpdateCommoditySalesFinancials { get; internal set; } = false; - internal void Clear() - { - CanViewFinancials = false; - CanUpdateFinancials = false; - CanViewCommoditySupplyFinancials = false; - CanUpdateCommoditySupplyFinancials = false; - CanViewCommoditySalesFinancials = false; - CanUpdateCommoditySalesFinancials = false; - } + public bool CanViewFinancials { get; internal set; } + public bool CanUpdateFinancials { get; internal set; } + public bool CanViewCommoditySupplyFinancials { get; internal set; } + public bool CanUpdateCommoditySupplyFinancials { get; internal set; } + public bool CanViewCommoditySalesFinancials { get; internal set; } + public bool CanUpdateCommoditySalesFinancials { get; internal set; } + public bool ConfigOption_AllowFinancialsAccessControl { get; internal set; } + } + public FinancialProfile Financial { get; internal set; } + private void RefreshFinancialProfile(SbmConfigConsole configConsole) + { + Financial.CanViewFinancials = UserHasSecurityRight(Sbm.SecurityRight.Financial_View); + Financial.CanUpdateFinancials = UserHasSecurityRight(Sbm.SecurityRight.Financial_Update); + Financial.CanViewCommoditySupplyFinancials = UserCanAccessFinancialViewOfType(Sbm.FinancialType.CommoditySupply); + Financial.CanUpdateCommoditySupplyFinancials = UserCanAccessFinancialUpdateOfType(Sbm.FinancialType.CommoditySupply); + Financial.CanViewCommoditySalesFinancials = UserCanAccessFinancialViewOfType(Sbm.FinancialType.CommoditySales); + Financial.CanUpdateCommoditySalesFinancials = UserCanAccessFinancialUpdateOfType(Sbm.FinancialType.CommoditySales); + // Config options. + Financial.ConfigOption_AllowFinancialsAccessControl = (configConsole != null && !configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowFinancialsAccessControl)); } - public FinancialProfile Financial { get; } public bool UserCanViewFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any) { - SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(UserContext.SessionContext); - if (configConsole != null && !configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowFinancialsAccessControl)) return true; + if (Financial.ConfigOption_AllowFinancialsAccessControl) return true; if (IsSecurityRightGranted(Sbm.SecurityRight.Financial_Update) || IsSecurityRightGranted(Sbm.SecurityRight.Financial_View)) { // If specific type of financial is requested, check that view is not denied. @@ -223,8 +206,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public bool UserCanUpdateFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any) { - SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(UserContext.SessionContext); - if (configConsole != null && !configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowFinancialsAccessControl)) return true; + if (Financial.ConfigOption_AllowFinancialsAccessControl) return true; if (IsSecurityRightGranted(Sbm.SecurityRight.Financial_Update)) { // If specific type of financial is requested, check that update is not denied. @@ -264,13 +246,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } public bool CanCreate { get; internal set; } = false; public bool CanUpdate { get; internal set; } = false; - internal void Clear() - { - CanCreate = false; - CanUpdate = false; - } } - public ContactsProfile Contacts { get; } + public ContactsProfile Contacts { get; internal set; } + private void RefreshContactsProfile(SbmConfigConsole configConsole) + { + Contacts.CanUpdate = (UserHasSecurityRight(Sbm.SecurityRight.Affiliate_Update)); + Contacts.CanCreate = (Contacts.CanUpdate || UserHasSecurityRight(Sbm.SecurityRight.Affiliate_Create)); + } //------------------------------------------------------------------- // Security rights - Transactions. @@ -308,13 +290,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } return true; } - internal void Clear() - { - CanCreate = false; - CanUpdate = false; - } } - public TransactionsProfile Transaction { get; } + public TransactionsProfile Transaction { get; internal set; } + private void RefreshTransactionProfile(SbmConfigConsole configConsole) + { + Transaction.CanUpdate = (UserHasSecurityRight(Sbm.SecurityRight.Transaction_Update)); + Transaction.CanCreate = (Transaction.CanUpdate || UserHasSecurityRight(Sbm.SecurityRight.Transaction_View)); + } + public bool UserCanAccessTransactionsOfType(Sbm.TransactionType transactionType) { if ((int)transactionType < 1) return false; @@ -329,22 +312,44 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App public class ItemTypesProfile { internal ItemTypesProfile() { } - public bool CanCreate { get; internal set; } = false; - public bool CanUpdate { get; internal set; } = false; - public bool CanRemove { get; internal set; } = false; - internal void Clear() - { - CanCreate = false; - CanUpdate = false; - CanRemove = false; - } + public bool CanCreate { get; internal set; } + public bool CanUpdate { get; internal set; } + public bool CanRemove { get; internal set; } + // Config options. + public bool ConfigOption_AllowProcesses { get; internal set; } + public bool ConfigOption_AllowContacts { get; internal set; } + public bool ConfigOption_AllowCommodities { get; internal set; } + public bool ConfigOption_AllowPortfolios { get; internal set; } + public bool ConfigOption_AllowPriceSets { get; internal set; } + public bool ConfigOption_CommodityCustomers { get; internal set; } + public bool ConfigOption_CommoditySuppliers { get; internal set; } + public bool ConfigOption_AllowTransactions { get; internal set; } + public bool ConfigOption_AllowAssets { get; internal set; } + public bool ConfigOption_AllowVehicles { get; internal set; } + public bool ConfigOption_AllowStockLocations { get; internal set; } + public bool ConfigOption_AllowStockContainers { get; internal set; } + public bool ConfigOption_AllowStockControl { get; internal set; } } public ItemTypesProfile ItemType { get; } = new ItemTypesProfile(); + private void RefreshItemTypeProfile(SbmConfigConsole configConsole) + { + ItemType.ConfigOption_AllowProcesses = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowProcesses); + ItemType.ConfigOption_AllowContacts = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowContacts); + ItemType.ConfigOption_AllowCommodities = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowCommodities); + ItemType.ConfigOption_AllowPortfolios = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowPortfolios); + ItemType.ConfigOption_AllowPriceSets = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowPriceSets); + ItemType.ConfigOption_CommodityCustomers = configConsole.AllowOption(UserContext, Sbm.ConfigOption.CommodityCustomers); + ItemType.ConfigOption_CommoditySuppliers = configConsole.AllowOption(UserContext, Sbm.ConfigOption.CommoditySuppliers); + ItemType.ConfigOption_AllowTransactions = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowTransactions); + ItemType.ConfigOption_AllowAssets = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowAssets); + ItemType.ConfigOption_AllowVehicles = configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowVehicles); + ItemType.ConfigOption_AllowStockLocations = configConsole.GetStockControlConfig(UserContext).AllowStockLocations(); + ItemType.ConfigOption_AllowStockContainers = configConsole.GetStockControlConfig(UserContext).AllowStockContainers(); + ItemType.ConfigOption_AllowStockControl = configConsole.GetStockControlConfig(UserContext).AllowStockControl(); + } public bool ItemTypeIsAllowed(Sbm.ItemType itemType) { - SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(UserContext.SessionContext); - if (configConsole == null) return false; switch (itemType) { //case Sbm.ItemType.SecItem: @@ -353,37 +358,37 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //case Sbm.ItemType.Language: //case Sbm.ItemType.TaxCode: //case Sbm.ItemType.UnitMeasure: - case Sbm.ItemType.Process: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowProcesses); + case Sbm.ItemType.Process: return ItemType.ConfigOption_AllowProcesses; case Sbm.ItemType.Affiliate: - case Sbm.ItemType.Address: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowContacts); - case Sbm.ItemType.Commodity: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowCommodities); - case Sbm.ItemType.PortfolioItem: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowPortfolios); - case Sbm.ItemType.Location: return configConsole.GetStockControlConfig(UserContext).AllowStockLocations(); + case Sbm.ItemType.Address: return ItemType.ConfigOption_AllowContacts; + case Sbm.ItemType.Commodity: return ItemType.ConfigOption_AllowCommodities; + case Sbm.ItemType.PortfolioItem: return ItemType.ConfigOption_AllowPortfolios; + case Sbm.ItemType.Location: return ItemType.ConfigOption_AllowStockLocations; case Sbm.ItemType.Container: - case Sbm.ItemType.ContainerItem: return configConsole.GetStockControlConfig(UserContext).AllowStockContainers(); + case Sbm.ItemType.ContainerItem: return ItemType.ConfigOption_AllowStockContainers; case Sbm.ItemType.Movement: - case Sbm.ItemType.StockLevel: return configConsole.GetStockControlConfig(UserContext).AllowStockControl(); + case Sbm.ItemType.StockLevel: return ItemType.ConfigOption_AllowStockControl; case Sbm.ItemType.PriceSet: - case Sbm.ItemType.Price: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowPriceSets); - case Sbm.ItemType.CommodityCustomer: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.CommodityCustomers); - case Sbm.ItemType.CommoditySupplier: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.CommoditySuppliers); + case Sbm.ItemType.Price: return ItemType.ConfigOption_AllowPriceSets; + case Sbm.ItemType.CommodityCustomer: return ItemType.ConfigOption_CommodityCustomers; + case Sbm.ItemType.CommoditySupplier: return ItemType.ConfigOption_CommoditySuppliers; //case Sbm.ItemType.Association: case Sbm.ItemType.Transaction: case Sbm.ItemType.Requirement: - case Sbm.ItemType.Constituent: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowTransactions); + case Sbm.ItemType.Constituent: return ItemType.ConfigOption_AllowTransactions; //case Sbm.ItemType.SystemAccount: //case Sbm.ItemType.SystemUser: //case Sbm.ItemType.SystemAccountUser: case Sbm.ItemType.AssetCategory: case Sbm.ItemType.AssetCategoryProcess: case Sbm.ItemType.Asset: - case Sbm.ItemType.AssetProcess: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowAssets); + case Sbm.ItemType.AssetProcess: return ItemType.ConfigOption_AllowAssets; case Sbm.ItemType.VehicleClass: case Sbm.ItemType.Vehicle: case Sbm.ItemType.VehicleEvent: - case Sbm.ItemType.VehicleFeature: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowVehicles); - case Sbm.ItemType.CommodityProcess: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowProcesses); - case Sbm.ItemType.RequirementProcess: return configConsole.AllowOption(UserContext, Sbm.ConfigOption.AllowProcesses); + case Sbm.ItemType.VehicleFeature: return ItemType.ConfigOption_AllowVehicles; + case Sbm.ItemType.CommodityProcess: return ItemType.ConfigOption_AllowProcesses; + case Sbm.ItemType.RequirementProcess: return ItemType.ConfigOption_AllowProcesses; //case Sbm.ItemType.Interface: } return true; diff --git a/SaBusMgrStandardBase/Base/App/SbmSessionContext.cs b/SaBusMgrStandardBase/Base/App/SbmSessionContext.cs index 2a1c3bf..7f1f5ed 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSessionContext.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSessionContext.cs @@ -1,19 +1,21 @@ -namespace Sarand.BusinessMgr.Net.Standard.Base.App +using Sarand.Net.Standard.Base.App; + +namespace Sarand.BusinessMgr.Net.Standard.Base.App { //======================================================================= - public class SbmSessionContext + public class SbmSessionContext : SacsSessionContext { //------------------------------------------------------------------- // Construction. - protected SbmSessionContext(ushort index) + protected SbmSessionContext(ushort index, Sbm.Application application) : base(index) { Index = index; + Application = application; } //------------------------------------------------------------------- // Properties. - public ushort Index { get; } - //public Sbm.Instance Instance { get; protected set; } + public Sbm.Application Application { get; private set; } //------------------------------------------------------------------- } diff --git a/SaBusMgrStandardBase/Base/App/SbmSessionData.cs b/SaBusMgrStandardBase/Base/App/SbmSessionData.cs new file mode 100644 index 0000000..7b7cb33 --- /dev/null +++ b/SaBusMgrStandardBase/Base/App/SbmSessionData.cs @@ -0,0 +1,136 @@ +using Newtonsoft.Json; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Standard.Base.App +{ + //======================================================================= + public abstract class SbmSessionData + { + //------------------------------------------------------------------- + private static long sessionIdxRoot = SacsRandomHelper.GetInt32(1000, 1999); + + //------------------------------------------------------------------- + // Construction. + /// Protected constructor for deserialisation only. + protected SbmSessionData(long sessionIdx, int itemIdx, SbmSessionContext sessionContext) + { + SessionIdx = sessionIdx; + ItemIdx = itemIdx; + SessionContext = sessionContext; + userData = CreateUserData(SessionContext, null, null); + } + /// + /// Primary constructor - on user login. + /// SessionContext and UserAccount must be supplied. + /// Roles list is optional. + /// + protected SbmSessionData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + { + SessionIdx = ++sessionIdxRoot; + ItemIdx = 1000; + SessionContext = sessionContext; + userData = CreateUserData(SessionContext, securityItemUser, affiliateUser); + } + + //------------------------------------------------------------------- + // Properties. + // Session and Item indexers. + public long SessionIdx { get; } + public int ItemIdx { get; private set; } + [JsonIgnore] + public int NextItemIdx { get { return ++ItemIdx; } } + // Session context. + public SbmSessionContext SessionContext { get; } + [JsonIgnore] + public bool ValidUserSession { get { return SysId.IsValid(User.AffiliateId) && SysId.IsValid(User.AffiliateId); } } + [JsonIgnore] + public DbUpdateInfo DbUpdateInfo + { + get + { + return new DbUpdateInfo(User.AffiliateId, StringUtil.OnEmpty(User.DisplayName, User.EmailAddress), SbmSystem.ComputerName); + } + } + + //------------------------------------------------------------------- + // User. + public class UserData + { + protected UserData() { } + protected UserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + { + if (securityItemUser != null) + { + SecurityItemId = securityItemUser.Id; + } + if (affiliateUser != null) + { + AffiliateId = affiliateUser.Id; + Refresh(securityItemUser, affiliateUser); + if (sessionContext.Application == Sbm.Application.WebControl) + KeepLoggedIn = affiliateUser.KeepLoggedIn_Control; + else if (sessionContext.Application == Sbm.Application.WebPortal) + KeepLoggedIn = affiliateUser.KeepLoggedIn_Portal; + else Debugger.Break(); + } + } + protected UserData(UserData userData) + { + SecurityItemId = userData.SecurityItemId; + AffiliateId = userData.AffiliateId; + Title = userData.Title; + FirstName = userData.FirstName; + LastName = userData.LastName; + DisplayName = userData.DisplayName; + EmailAddress = userData.EmailAddress; + KeepLoggedIn = userData.KeepLoggedIn; + } + // Properties. + public SysId SecurityItemId { get; protected set; } + public SysId AffiliateId { get; protected set; } + public String Title { get; protected set; } + public String FirstName { get; protected set; } + public String LastName { get; protected set; } + public String DisplayName { get; protected set; } + public String EmailAddress { get; protected set; } + public bool KeepLoggedIn { get; protected set; } + public bool UserAccountSupplied { get; protected set; } + // Refresh properties. + protected bool Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser) + { + // Check that user matches the session. + if (!SysId.IsValid(SecurityItemId) || !SysId.IsValid(securityItemUser?.Id ?? null) || !SecurityItemId.Equals(securityItemUser.Id)) return false; + if (!SysId.IsValid(AffiliateId) || !SysId.IsValid(affiliateUser?.Id ?? null) || !AffiliateId.Equals(affiliateUser.Id)) return false; + // Refresh properties. + EmailAddress = securityItemUser.EmailAddress; + Title = affiliateUser.Title; + FirstName = affiliateUser.FirstName; + LastName = affiliateUser.LastName; + DisplayName = affiliateUser.GetDisplayName(); + return true; + } + } + protected abstract UserData CreateUserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser); + private UserData userData; + public UserData User { get { return userData; } } + /// User - JSON deserialisation route. + protected void SetUser(UserData user) + { + if (this.userData != null && User.UserAccountSupplied) + throw new NotSupportedException("Session User cannot be replaced."); + this.userData = user; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs b/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs index ff3bbf6..1ea0c40 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSessionProfile.cs @@ -5,6 +5,7 @@ using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.ItemOptions; +using Sarand.Net.Standard.Base.Security; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.App @@ -96,7 +97,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App userContext.RefreshUser(affiliateUser, userSupervisedOwners); // Populate security rights. - SecurityProfile.RefreshProfile(SbmGlobals.Application.GetSecurityConsole(UserContext), userId, securityRights); + using (SbmConfigConsole configConsole = SbmGlobals.Application.CreateConfigConsole(UserContext.SessionContext)) + using (SaSecurityConsole securityConsole = SbmGlobals.Application.CreateSecurityConsole(UserContext)) + { + SecurityProfile.RefreshProfile(configConsole, securityConsole, userId, securityRights); + } // Reinstate previous owner if defined and verify that it is in the supervised list. SysId affiliateIdOwner = UserContext.Organisation.AffiliateId; diff --git a/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs b/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs index bb2ea3b..c96837a 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSystem-CodeTypes.cs @@ -23,10 +23,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // R e g i s t e r C o d e T y p e s //------------------------------------------------------------------- - public static void RegisterCodeTypes(SaCodeTypeConsole codeTypeConsole, SbmUserContext userContext) + public static void RegisterCodeTypes(SbmConfigConsole configConsole, SaCodeTypeConsole codeTypeConsole, SbmUserContext userContext) { - SbmConfigConsole configConsole = SbmGlobals.Application.GetConfigConsole(userContext.SessionContext); - //--------------------------------------------------------------- // C o m m o d i t i e s //--------------------------------------------------------------- diff --git a/SaBusMgrStandardBase/Base/App/SbmSystem.cs b/SaBusMgrStandardBase/Base/App/SbmSystem.cs index 9f779c6..ae0bd63 100644 --- a/SaBusMgrStandardBase/Base/App/SbmSystem.cs +++ b/SaBusMgrStandardBase/Base/App/SbmSystem.cs @@ -83,7 +83,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App } public static List GetCodesOfType(SbmUserContext userContext, Sbm.SystemCode systemCode) { - SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(userContext.SessionContext); + SbmConfigConsole configConsole = null; // SbmGlobals.GetConfigConsole(userContext.SessionContext); switch (systemCode) { case Sbm.SystemCode.ItemType: diff --git a/SaBusMgrStandardBase/Base/App/SbmUserContext.cs b/SaBusMgrStandardBase/Base/App/SbmUserContext.cs index a55e0ce..0e222ad 100644 --- a/SaBusMgrStandardBase/Base/App/SbmUserContext.cs +++ b/SaBusMgrStandardBase/Base/App/SbmUserContext.cs @@ -111,7 +111,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App //------------------------------------------------------------------- // Construction. - public SbmUserContext(SbmSessionContext sessionContext) + protected SbmUserContext(SbmSessionContext sessionContext) { SessionContext = sessionContext; organisationData = new OrganisationData_Internal(); @@ -307,14 +307,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.App ItemId associationItemId_Owner = new ItemId((short)Sbm.ItemType.Association, organisationData.AssociationId); if (!organisationData.configOptionsCache.ItemIdRef.Id.Equals(affiliateItemId_Owner)) { - SaItemOptionConsole itemOptionConsole = SbmGlobals.Application.GetItemOptionConsole(this); - organisationData.configOptionsCache.Clear(); - if (itemOptionConsole != null) + using (SaItemOptionConsole itemOptionConsole = SbmGlobals.Application.CreateItemOptionConsole(this)) { - // Retrieve the options for this association. - organisationData.configOptionsCache.Reset(associationItemId_Owner, affiliateItemId_Owner); - organisationData.configOptionsCache.ItemOptions.AddRange(itemOptionConsole.GetItemOptionsForItem(associationItemId_Owner)); - SaLogger.Debug(fn + " Populated organisation options: " + organisationData.configOptionsCache.ItemOptions.Count); + organisationData.configOptionsCache.Clear(); + if (itemOptionConsole != null) + { + // Retrieve the options for this association. + organisationData.configOptionsCache.Reset(associationItemId_Owner, affiliateItemId_Owner); + organisationData.configOptionsCache.ItemOptions.AddRange(itemOptionConsole.GetItemOptionsForItem(associationItemId_Owner)); + SaLogger.Debug(fn + " Populated organisation options: " + organisationData.configOptionsCache.ItemOptions.Count); + } } } } diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs index 820049f..7e607a0 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAccountsDfn-Sage.cs @@ -280,13 +280,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus { // Only populated when needed as reads Code Types from db. contexts_StockCategoryAction = new List(); - codes_StockCategoryAction = SbmGlobals.GetCodeTypeConsole(UserContext).GetCodeDescsForCodeType(SbmSystem.GetCodeTypeCode(Sbm.ApplCodeType.CommodityCategory)); - foreach (CodeDesc commodityCategory in codes_StockCategoryAction) + using (SaCodeTypeConsole codeTypeConsole = SbmGlobals.Application.CreateCodeTypeConsole(UserContext)) { - // Ignore categories where code is same as description. - // We're only interested in the ones which have been given a description. - if (commodityCategory.Code.EqualsCI(commodityCategory.Desc)) continue; - contexts_StockCategoryAction.Add(commodityCategory); + codes_StockCategoryAction = codeTypeConsole.GetCodeDescsForCodeType(SbmSystem.GetCodeTypeCode(Sbm.ApplCodeType.CommodityCategory)); + foreach (CodeDesc commodityCategory in codes_StockCategoryAction) + { + // Ignore categories where code is same as description. + // We're only interested in the ones which have been given a description. + if (commodityCategory.Code.EqualsCI(commodityCategory.Desc)) continue; + contexts_StockCategoryAction.Add(commodityCategory); + } } } return new List(contexts_StockCategoryAction); diff --git a/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs b/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs index 930ac12..32b5b50 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmAffiliate.cs @@ -329,6 +329,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus // Data members. private readonly Data data = new Data(); public static readonly Byte Flag_Prospect = 0x01; + public static readonly Byte Flag_KeepLoggedIn_Portal = 0x02; + public static readonly Byte Flag_KeepLoggedIn_Control = 0x03; //------------------------------------------------------------------- // Construction. @@ -697,6 +699,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus get { return GetFlag(Flag_Prospect); } set { SetFlag(Flag_Prospect, value); } } + public bool KeepLoggedIn_Portal + { + get { return GetFlag(Flag_KeepLoggedIn_Portal); } + set { SetFlag(Flag_KeepLoggedIn_Portal, value); } + } + public bool KeepLoggedIn_Control + { + get { return GetFlag(Flag_KeepLoggedIn_Control); } + set { SetFlag(Flag_KeepLoggedIn_Control, value); } + } //------------------------------------------------------------------- // A s s o c i a t e d D a t a E l e m e n t s diff --git a/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs b/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs index 5007e31..6e7f4c9 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmCommodity.cs @@ -1872,83 +1872,85 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus // Utilities. public List GetDisplayValues(SbmUserContext userContext) { - SbmConfigConsole configConsole = SbmGlobals.Application.GetConfigConsole(userContext.SessionContext); SbmAccountMgr accountMgr = null; List lValue = new List(); - // Commodities to exclude. - if (IncludedIds.Count > 0) lValue.Add("Included commodities", IncludedIds.Count.ToString()); - if (ExcludedIds.Count > 0) lValue.Add("Excluded commodities", ExcludedIds.Count.ToString()); - // Commodity type. - if (CommodityType > 0) lValue.Add("Type", SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.CommodityType).GetDescForType(CommodityType, CommodityType.ToString())); - else if (CommodityType == Sbm.CommodityType.AnyProduct) lValue.Add("Type", "Any product"); - if (StockItemsOnly) lValue.Add("Stock items only", "True"); - // Commodity code. - if (!StringUtil.IsEmpty(CodeFull)) lValue.Add("Code", CodeFull); - else if (!StringUtil.IsEmpty(CodePartial)) lValue.Add("Code contains", CodePartial); - // Drawing number. - if (!StringUtil.IsEmpty(DrawingNoFull)) lValue.Add("Drawing no", DrawingNoFull); - else if (!StringUtil.IsEmpty(DrawingNoPartial)) lValue.Add("Drawing no starts", DrawingNoPartial); - if (!StringUtil.IsEmpty(DrawingIssueFull)) lValue.Add("Drawing issue", DrawingIssueFull); - else if (!StringUtil.IsEmpty(DrawingIssuePartial)) lValue.Add("Drawing issue starts", DrawingIssuePartial); - // Commodity description. - if (!StringUtil.IsEmpty(DescBriefFull)) lValue.Add("Description", DescBriefFull); - if (!StringUtil.IsEmpty(DescBriefPartial)) lValue.Add("Description starts", DescBriefPartial); - // Category. - if (Categories.Count > 0) lValue.Add("Categories", Categories.Concat(",")); - // Catalog reference. - if (!StringUtil.IsEmpty(CatalogRefPartial)) lValue.Add("Catalog ref start", CatalogRefPartial); - // Codings. - if (!StringUtil.IsEmpty(RangeCode)) lValue.Add("Range code", RangeCode); - if (!StringUtil.IsEmpty(ColourCode)) lValue.Add("Colour code", ColourCode); - if (!StringUtil.IsEmpty(SourceCode)) lValue.Add("Source code", SourceCode); - if (!StringUtil.IsEmpty(SupplyMethodCode)) lValue.Add("SupplyMethod code", SupplyMethodCode); - if (!StringUtil.IsEmpty(HandlingCode)) lValue.Add("Handling code", HandlingCode); - if (!StringUtil.IsEmpty(DeliveryCode)) lValue.Add("Delivery code", DeliveryCode); - if (!StringUtil.IsEmpty(MaterialCode)) lValue.Add(configConsole.GetAttributeCaption(userContext, SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "Material") + " code", MaterialCode); - if (!StringUtil.IsEmpty(FinishCode)) lValue.Add(configConsole.GetAttributeCaption(userContext, SbmDbDfn.ColumnIdx.Commodity_FinishCode, "Finish") + " code", FinishCode); - if (!StringUtil.IsEmpty(PromotionCode)) lValue.Add(configConsole.GetAttributeCaption(userContext, SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Promotion") + " code", PromotionCode); - // Price sets. - if (PriceSetIdsIncluded.Count > 0) lValue.Add("Included in price sets", PriceSetIdsIncluded.Count.ToString()); - if (PriceSetIdsExcluded.Count > 0) lValue.Add("Excluded from price sets", PriceSetIdsExcluded.Count.ToString()); - // Customer. - if (SysId.IsValid(AssociationIdCustomer)) + using (SbmConfigConsole configConsole = SbmGlobals.Application.CreateConfigConsole(userContext.SessionContext)) { - if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); - lValue.Add("Customer", accountMgr.GetAssociationTargetName(AssociationIdCustomer)); + // Commodities to exclude. + if (IncludedIds.Count > 0) lValue.Add("Included commodities", IncludedIds.Count.ToString()); + if (ExcludedIds.Count > 0) lValue.Add("Excluded commodities", ExcludedIds.Count.ToString()); + // Commodity type. + if (CommodityType > 0) lValue.Add("Type", SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.CommodityType).GetDescForType(CommodityType, CommodityType.ToString())); + else if (CommodityType == Sbm.CommodityType.AnyProduct) lValue.Add("Type", "Any product"); + if (StockItemsOnly) lValue.Add("Stock items only", "True"); + // Commodity code. + if (!StringUtil.IsEmpty(CodeFull)) lValue.Add("Code", CodeFull); + else if (!StringUtil.IsEmpty(CodePartial)) lValue.Add("Code contains", CodePartial); + // Drawing number. + if (!StringUtil.IsEmpty(DrawingNoFull)) lValue.Add("Drawing no", DrawingNoFull); + else if (!StringUtil.IsEmpty(DrawingNoPartial)) lValue.Add("Drawing no starts", DrawingNoPartial); + if (!StringUtil.IsEmpty(DrawingIssueFull)) lValue.Add("Drawing issue", DrawingIssueFull); + else if (!StringUtil.IsEmpty(DrawingIssuePartial)) lValue.Add("Drawing issue starts", DrawingIssuePartial); + // Commodity description. + if (!StringUtil.IsEmpty(DescBriefFull)) lValue.Add("Description", DescBriefFull); + if (!StringUtil.IsEmpty(DescBriefPartial)) lValue.Add("Description starts", DescBriefPartial); + // Category. + if (Categories.Count > 0) lValue.Add("Categories", Categories.Concat(",")); + // Catalog reference. + if (!StringUtil.IsEmpty(CatalogRefPartial)) lValue.Add("Catalog ref start", CatalogRefPartial); + // Codings. + if (!StringUtil.IsEmpty(RangeCode)) lValue.Add("Range code", RangeCode); + if (!StringUtil.IsEmpty(ColourCode)) lValue.Add("Colour code", ColourCode); + if (!StringUtil.IsEmpty(SourceCode)) lValue.Add("Source code", SourceCode); + if (!StringUtil.IsEmpty(SupplyMethodCode)) lValue.Add("SupplyMethod code", SupplyMethodCode); + if (!StringUtil.IsEmpty(HandlingCode)) lValue.Add("Handling code", HandlingCode); + if (!StringUtil.IsEmpty(DeliveryCode)) lValue.Add("Delivery code", DeliveryCode); + if (!StringUtil.IsEmpty(MaterialCode)) lValue.Add(configConsole.GetAttributeCaption(userContext, SbmDbDfn.ColumnIdx.Commodity_MaterialCode, "Material") + " code", MaterialCode); + if (!StringUtil.IsEmpty(FinishCode)) lValue.Add(configConsole.GetAttributeCaption(userContext, SbmDbDfn.ColumnIdx.Commodity_FinishCode, "Finish") + " code", FinishCode); + if (!StringUtil.IsEmpty(PromotionCode)) lValue.Add(configConsole.GetAttributeCaption(userContext, SbmDbDfn.ColumnIdx.Commodity_PromotionCode, "Promotion") + " code", PromotionCode); + // Price sets. + if (PriceSetIdsIncluded.Count > 0) lValue.Add("Included in price sets", PriceSetIdsIncluded.Count.ToString()); + if (PriceSetIdsExcluded.Count > 0) lValue.Add("Excluded from price sets", PriceSetIdsExcluded.Count.ToString()); + // Customer. + if (SysId.IsValid(AssociationIdCustomer)) + { + if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); + lValue.Add("Customer", accountMgr.GetAssociationTargetName(AssociationIdCustomer)); + } + if (!StringUtil.IsEmpty(CustomerName)) lValue.Add("Customer name starts", CustomerName); + if (!StringUtil.IsEmpty(SupplierName)) lValue.Add("Supplier name starts", SupplierName); + if (!StringUtil.IsEmpty(SalesOrderRef)) lValue.Add("SO reference starts", SalesOrderRef); + if (!StringUtil.IsEmpty(PurchaseOrderRef)) lValue.Add("PO reference starts", PurchaseOrderRef); + + // Transaction. + if (!StringUtil.IsEmpty(OrderRef)) lValue.Add("Transaction reference", OrderRef); + + // Stock: + if (StockLocationFilter == Sbm.LocationFilter.Sales) lValue.Add("Stock location", "Sales locations only"); + else if (StockLocationFilter == Sbm.LocationFilter.Calc) lValue.Add("Stock location", "Calculated locations only"); + else if (StockLocationFilter == Sbm.LocationFilter.All) lValue.Add("Stock location", "All locations"); + if (SysId.IsValid(LocationIdStock)) lValue.Add("Stock location", SysId.ToString(LocationIdStock)); + if (DateUtil.IsValid(StockSoldFrom)) lValue.Add("Stock sold from", DateUtil.Format(StockSoldFrom, "d-MMM-yyyy")); + if (DateUtil.IsValid(StockSoldTo)) lValue.Add("Stock sold to", DateUtil.Format(StockSoldTo, "d-MMM-yyyy")); + if (DateUtil.IsValid(ProjectedSalesFrom)) lValue.Add("Proj sales from", DateUtil.Format(ProjectedSalesFrom, "d-MMM-yyyy")); + if (DateUtil.IsValid(ProjectedSalesTo)) lValue.Add("Proj sales to", DateUtil.Format(ProjectedSalesTo, "d-MMM-yyyy")); + + if (StockLevelMin > decimal.MinValue) lValue.Add("Stock level >= ", StockLevelMin.ToString("N2")); + if (StockLevelMax > decimal.MinValue) lValue.Add("Stock level <= ", StockLevelMax.ToString("N2")); + + // Commodities with definitions for Customer. + if (SysId.IsValid(AssociationIdCommodityCustomer)) + { + if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); + lValue.Add("Commodity definitions for customer", accountMgr.GetAssociationTargetName(AssociationIdCommodityCustomer)); + } + if (!StringUtil.IsEmpty(AccountCodeCommodityCustomer)) + lValue.Add("Commodity definitions for customer", AccountCodeCommodityCustomer); + + // Commodity status category. + if (StatusCat == StatusCat.Current) + lValue.Add("Status", "Current"); } - if (!StringUtil.IsEmpty(CustomerName)) lValue.Add("Customer name starts", CustomerName); - if (!StringUtil.IsEmpty(SupplierName)) lValue.Add("Supplier name starts", SupplierName); - if (!StringUtil.IsEmpty(SalesOrderRef)) lValue.Add("SO reference starts", SalesOrderRef); - if (!StringUtil.IsEmpty(PurchaseOrderRef)) lValue.Add("PO reference starts", PurchaseOrderRef); - - // Transaction. - if (!StringUtil.IsEmpty(OrderRef)) lValue.Add("Transaction reference", OrderRef); - - // Stock: - if (StockLocationFilter == Sbm.LocationFilter.Sales) lValue.Add("Stock location", "Sales locations only"); - else if (StockLocationFilter == Sbm.LocationFilter.Calc) lValue.Add("Stock location", "Calculated locations only"); - else if (StockLocationFilter == Sbm.LocationFilter.All) lValue.Add("Stock location", "All locations"); - if (SysId.IsValid(LocationIdStock)) lValue.Add("Stock location", SysId.ToString(LocationIdStock)); - if (DateUtil.IsValid(StockSoldFrom)) lValue.Add("Stock sold from", DateUtil.Format(StockSoldFrom, "d-MMM-yyyy")); - if (DateUtil.IsValid(StockSoldTo)) lValue.Add("Stock sold to", DateUtil.Format(StockSoldTo, "d-MMM-yyyy")); - if (DateUtil.IsValid(ProjectedSalesFrom)) lValue.Add("Proj sales from", DateUtil.Format(ProjectedSalesFrom, "d-MMM-yyyy")); - if (DateUtil.IsValid(ProjectedSalesTo)) lValue.Add("Proj sales to", DateUtil.Format(ProjectedSalesTo, "d-MMM-yyyy")); - - if (StockLevelMin > decimal.MinValue) lValue.Add("Stock level >= ", StockLevelMin.ToString("N2")); - if (StockLevelMax > decimal.MinValue) lValue.Add("Stock level <= ", StockLevelMax.ToString("N2")); - - // Commodities with definitions for Customer. - if (SysId.IsValid(AssociationIdCommodityCustomer)) - { - if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); - lValue.Add("Commodity definitions for customer", accountMgr.GetAssociationTargetName(AssociationIdCommodityCustomer)); - } - if (!StringUtil.IsEmpty(AccountCodeCommodityCustomer)) - lValue.Add("Commodity definitions for customer", AccountCodeCommodityCustomer); - - // Commodity status category. - if (StatusCat == StatusCat.Current) - lValue.Add("Status", "Current"); // Portfolio: //PortfolioIdInclude; diff --git a/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs b/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs index e61219d..770416c 100644 --- a/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs +++ b/SaBusMgrStandardBase/Base/Bus/SbmTransaction.cs @@ -857,9 +857,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Bus // Nov-08 Current thinking is that the only differences is whether the 'In Progress' date has been specified and whether that should be used in preference to the 'Raised' date. if (DateUtil.IsValid(inProgress) && (transactionStatusCat == SbmTransaction.StatusCat.Open || transactionStatusCat == SbmTransaction.StatusCat.Closed)) { - SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(userContext.SessionContext); - if (configConsole != null && configConsole.UseInProgressTaxDateAsTaxPoint(userContext, transactionType)) - return inProgress; + using (SbmConfigConsole configConsole = SbmGlobals.Application.CreateConfigConsole(userContext.SessionContext)) + { + if (configConsole != null && configConsole.UseInProgressTaxDateAsTaxPoint(userContext, transactionType)) + return inProgress; + } } // Otherwise, use 'Raised' date. if (DateUtil.IsValid(raised)) diff --git a/SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs b/SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs new file mode 100644 index 0000000..6965e27 --- /dev/null +++ b/SaBusMgrStandardBase/Base/Consoles/SbmEmailConsole.cs @@ -0,0 +1,77 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.Email; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Standard.Base.Consoles +{ + //======================================================================= + public class SbmEmailConfig : SaEmailConfig + { + public SbmEmailConfig(String context) : base(context) + { + + } + } + + //======================================================================= + public abstract class SbmEmailConsole : SaEmailConsole + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Protected construction. + protected SbmEmailConsole(SbmEmailConfig emailConfig) + { + EmailConfig = emailConfig; + } + + //------------------------------------------------------------------- + // Properties. + public SbmEmailConfig EmailConfig { get; } + public static String EmailTag_Header { get; } = "[#Email.Header]"; + public static String EmailTag_Footer { get; } = "[#Email.Footer]"; + public static String EmailTag_Caption { get; } = "[#Email.Caption]"; + public static String EmailTag_MainStylesheet { get; } = "[#Email.MainStylesheet]"; + + //------------------------------------------------------------------- + /// + /// Replace dynamic tags in email message body. + /// + /// + public void ReplaceDynamicEmailBodyTags(SaEmailData emailData, SbmSessionData sessionData) + { + // Replace core tags, eg. main stylesheet. + SaEmailConsole.ReplaceDynamicEmailTags(emailData); + + // Replace tags known to the web application. + // Main stylesheet. + if (EmailContainsTag(emailData, EmailTag_MainStylesheet)) + { + // Tag replacement is expanded to avoid reading main stylesheet resource unless required. + ReplaceDynamicEmailTag(emailData, EmailTag_MainStylesheet, ""); + } + + // Partial content - Header. + if (EmailContainsTag(emailData, EmailTag_Header)) + { + // Tag replacement is expanded to avoid reading Header resource unless required. + ReplaceDynamicEmailTag(emailData, EmailTag_Header, SbmResourceHelper.GetTextResource(SbmResourceHelper.TextResource.Email_Header_Html)); + } + + // Partial content - Footer. + if (EmailContainsTag(emailData, EmailTag_Footer)) + { + // Tag replacement is expanded to avoid reading Footer resource unless required. + ReplaceDynamicEmailTag(emailData, EmailTag_Footer, SbmResourceHelper.GetTextResource(SbmResourceHelper.TextResource.Email_Footer_Html)); + } + } + + //------------------------------------------------------------------- + } + + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/Helpers/SbmPasswordHelper.cs b/SaBusMgrStandardBase/Base/Helpers/SbmPasswordHelper.cs new file mode 100644 index 0000000..6c33c15 --- /dev/null +++ b/SaBusMgrStandardBase/Base/Helpers/SbmPasswordHelper.cs @@ -0,0 +1,138 @@ +using Microsoft.AspNetCore.Identity; +using Sarand.BusinessMgr.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Security; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace Sarand.BusinessMgr.Net.Standard.Base.Helpers +{ + //======================================================================= + public class SbmPasswordHelper + { + //------------------------------------------------------------------- + // Configuration parameters. + public class PasswordParams + { + public int MinLength = 8; + public int MinLengthNoComplexity = 12; + } + public static PasswordParams Params { get; } = new PasswordParams(); + + //------------------------------------------------------------------- + /// Validate password against parameters. + public static bool IsValidPassword(String password) + { + return GetPasswordStrength(password) >= 4; + } + /// + /// Assess the password strength - 4+ is valid. + /// 0 - Blank + /// 1 - < min length - 2 [red] + /// 1 - < min length and only 1 character type [red] + /// 2 - < min length and only 2 character types [red] + /// 2 - < min length without complexity - 2 and only 1 character type [red] + /// 3 - < min length, min length with 3 character types [amber] + /// 3 - Min length without complexity - 2 [amber] + /// 3 - Other invalid passwords [amber] + /// 4 - Min length with 4 character types [green] + /// 4 - Min length without complexity [green] + /// 5 - Min lenth + 2 with 4 character types [green] + /// 5 - Min length without complexity with 3 character types [green] + /// + public static int GetPasswordStrength(String password) + { + String fn = "PasswordHelper.GetPasswordStrength"; + + // 0 - Blank. + if (StringUtil.IsEmpty(password)) return 0; + + // Count number of different types of character. + int characterTypeCount = 0; + try + { + if (Regex.Matches(password, "[A-Z]").Count > 0) characterTypeCount++; + if (Regex.Matches(password, "[a-z]").Count > 0) characterTypeCount++; + if (Regex.Matches(password, "[0-9]").Count > 0) characterTypeCount++; + if (Regex.Matches(password, "[^a-zA-Z0-9]").Count > 0) characterTypeCount++; + } + catch (Exception exc) + { + SaLogger.Debug(fn + " " + ExceptionUtil.GetLogMessage(exc)); + } + int passwordLength = StringUtil.GetLength(password); + + // 1 - Less than min length - 2; + if (passwordLength < Params.MinLength - 2) + return 1; + + // 1 - Less than min length and only 1 character type. + if (passwordLength < Params.MinLength && characterTypeCount == 1) + return 1; + + // 2 - Less than min length and only 2 character types. + if (passwordLength < Params.MinLength && characterTypeCount == 2) + return 2; + + // 2 - Less than min length without complexity - 2 and only 1 character type. + if (passwordLength < Params.MinLengthNoComplexity - 2 && characterTypeCount == 1) + return 2; + + // 3 - Less than minimum length. + if (passwordLength < Params.MinLength) + return 3; + + // 3 - Minimum length with only 3 character types. + if (passwordLength >= Params.MinLength && passwordLength < Params.MinLengthNoComplexity && characterTypeCount == 3) + return 3; + + // 3 - Minimum length without complexity - 2 with less than 4 character types. + if (passwordLength >= Params.MinLengthNoComplexity - 2 && passwordLength < Params.MinLengthNoComplexity && characterTypeCount < 4) + return 3; + + // 3 Catch-all - ensure only valid passwords score 4 or more. + if (passwordLength < Params.MinLengthNoComplexity && characterTypeCount < 4) + return 3; + + // 4 - Min length with 4 character types. + if (passwordLength < Params.MinLengthNoComplexity) + return 4; + + // 4 - Min length without complexity. + if (passwordLength >= Params.MinLengthNoComplexity && passwordLength < Params.MinLengthNoComplexity + 2 && characterTypeCount < 4) + return 4; + + // 5 - Anything more complex. + return 5; + } + + //------------------------------------------------------------------- + private static PasswordHasher passwordHasher = new PasswordHasher(); + /// Get the hashed value that corresponds to the password. + public static String GetPasswordHash(SaSecurityItem securityItemUser, String password) + { + return passwordHasher.HashPassword(securityItemUser, password); + } + /// Verify password against hashed value stored against user account. + public static bool VerifyHashedPassword(SaSecurityItem securityItemUser, String password) + { + return passwordHasher.VerifyHashedPassword(securityItemUser, securityItemUser.PasswordHash, password) != PasswordVerificationResult.Failed; + } + /// Verify password against hashed value with user account as reference. + public static bool VerifyHashedPassword(SaSecurityItem securityItemUser, String password, String passwordHashed) + { + return passwordHasher.VerifyHashedPassword(securityItemUser, passwordHashed, password) != PasswordVerificationResult.Failed; + } + /// Check whether the password needs rehashing. + public static bool PasswordRequiresRehash(SaSecurityItem securityItemUser, String password) + { + return passwordHasher.VerifyHashedPassword(securityItemUser, securityItemUser.PasswordHash, password) == PasswordVerificationResult.SuccessRehashNeeded; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/Helpers/SbmResourceHelper.cs b/SaBusMgrStandardBase/Base/Helpers/SbmResourceHelper.cs new file mode 100644 index 0000000..5d79c7d --- /dev/null +++ b/SaBusMgrStandardBase/Base/Helpers/SbmResourceHelper.cs @@ -0,0 +1,103 @@ +using Sarand.Net.Standard.Base.Helpers; +using Sarand.Net.Standard.Base.Utils; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Standard.Base.Helpers +{ + //======================================================================= + public static class SbmResourceHelper + { + //------------------------------------------------------------------- + // Definitions. + public enum TextResource + { + // Email stylesheets. + Email_Main_Css, + // Email partial content. + Email_Header_Html, + Email_Footer_Html, + // Email templates. + Email_ContactUs_Html, + Email_Signup_Activate_Html, + Email_Signup_Welcome_Html, + Email_RequestPassword_Html, + // Data - CSV files etc. + } + public enum ImageResource + { + BusinessMgr_logo_h75_png, + } + + //------------------------------------------------------------------- + // Text resources. + public static String GetTextResource(TextResource textResource) + { + String partialPath = ""; + String resourceFilename = ""; + switch (textResource) + { + // Email stylesheet. + case TextResource.Email_Main_Css: + resourceFilename = "sax-email-main.css"; + break; + // Email partial content. + case TextResource.Email_Header_Html: + resourceFilename = "sax-email-header.html"; + break; + case TextResource.Email_Footer_Html: + resourceFilename = "sax-email-footer.html"; + break; + // Email templates. + case TextResource.Email_ContactUs_Html: + resourceFilename = "sax-email-contact-us.html"; + break; + case TextResource.Email_Signup_Activate_Html: + resourceFilename = "sax-email-signup-activate.html"; + break; + case TextResource.Email_Signup_Welcome_Html: + resourceFilename = "sax-email-signup-welcome.html"; + break; + case TextResource.Email_RequestPassword_Html: + resourceFilename = "sax-email-request-password.html"; + break; + // Data. + } + if (!StringUtil.IsEmpty(resourceFilename)) + { + var assembly = typeof(SbmResourceHelper).GetTypeInfo().Assembly; + String resourceText = SacsResourceHelper.GetManifestResourceAsText(assembly, partialPath, resourceFilename); + if (!StringUtil.IsEmpty(resourceText)) + return resourceText; + } + return ""; + } + + //------------------------------------------------------------------- + // Image resources. + public static byte[] GetImageResource(ImageResource imageResource) + { + String partialPath = ""; + String resourceFilename = ""; + switch (imageResource) + { + case ImageResource.BusinessMgr_logo_h75_png: + resourceFilename = "BusinessMgr-logo-h75.png"; + break; + } + if (!StringUtil.IsEmpty(resourceFilename)) + { + var assembly = typeof(SbmResourceHelper).GetTypeInfo().Assembly; + byte[] resourceData = SacsResourceHelper.GetManifestResourceAsBinary(assembly, partialPath, resourceFilename); + if (resourceData != null) + return resourceData; + } + return new byte[0]; + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Organisation.cs b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Organisation.cs index d480360..e3c3a4d 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Organisation.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Organisation.cs @@ -217,344 +217,345 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr private OrganisationOptionData InitOrganisationOptionData() { OrganisationOptionData orgOptData = new OrganisationOptionData(); - SbmConfigConsole console = SbmGlobals.GetConfigConsole(UserContext.SessionContext); - SbmAccountsDfn accounts = new SbmAccountsDfn(UserContext); - - // Option types. - orgOptData.associationOptionTypes.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.AssociationOption)); - - // Yes/No. - orgOptData.Values_YesNo.Add(orgOptData.Value_Yes, "Yes"); - orgOptData.Values_YesNo.Add(orgOptData.Value_No, "No"); - - // Organisation configuration. - bool bAllowContacts = (AllowConfigOption(Sbm.ConfigOption.AllowContacts)); - bool bAllowCustomers = (AllowAssociationType(Sbm.AssociationType.Customer)); - bool bAllowStockists = (AllowAssociationType(Sbm.AssociationType.Stockist)); - bool bAllowFinanceAgencies = (AllowAssociationType(Sbm.AssociationType.FinanceAgency)); - bool bAllowCommodities = (AllowConfigOption(Sbm.ConfigOption.AllowCommodities)); - bool bAllowVehicles = (AllowConfigOption(Sbm.ConfigOption.AllowVehicles)); - bool bAllowAssets = (AllowConfigOption(Sbm.ConfigOption.AllowAssets)); - bool bAllowTransactions = (AllowConfigOption(Sbm.ConfigOption.AllowTransactions)); - bool bAllowSalesOrders = ((AllowTransactionType(Sbm.TransactionType.SalesOrder) || AllowTransactionType(Sbm.TransactionType.ProformaSalesOrder))); - bool bAllowSalesDispatches = (AllowTransactionType(Sbm.TransactionType.SalesDispatch)); - bool bAllowSalesInvoices = ((AllowTransactionType(Sbm.TransactionType.SalesInvoice) || AllowTransactionType(Sbm.TransactionType.ProformaSalesInvoice))); - bool bAllowPurchaseOrders = ((AllowTransactionType(Sbm.TransactionType.PurchaseOrder) || AllowTransactionType(Sbm.TransactionType.ProformaPurchaseOrder))); - bool bAllowInterfaces = (console.AllowInterfaces(UserContext)); - bool bAllowInterfaces_File = (bAllowInterfaces && console.AllowInterfaceCategory(UserContext, SaInterfaceCategory.File)); - - // Values: - List orgOptionValues = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Value); - if (bAllowTransactions) + using (SbmConfigConsole console = SbmGlobals.Application.CreateConfigConsole(UserContext.SessionContext)) + using (SbmAccountsDfn accounts = new SbmAccountsDfn(UserContext)) { - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.MaxTransactionsQueriedForEmptyFilter)); - if (CodeTypeHasCodes(Sbm.ApplCodeType.CommodityPromotion)) - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.AlternativePromotionText)); - if (console.GetRequirementCostingConfig(UserContext).AllowRequirementCosting(Sbm.TransactionType.SalesOrder)) - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.CostLabourRateDefault)); - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.CommoditiesAllowedNegativePrice)); - if (AllowConfigOption(Sbm.ConfigOption.TransactionSplitTimes)) - { - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.TransTimeChunk1Caption)); - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.TransTimeChunk2Caption)); - } - // Default Email content. - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.EmailSubject)); - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.EmailBody)); - } - if (accounts.IsUsingSageInterface()) - { - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.DefaultSalesCarriageNominal)); - orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.DefaultPurchaseCarriageNominal)); - } + // Option types. + orgOptData.associationOptionTypes.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.AssociationOption)); - // Folders: - List lOrgOptionFolder = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Folder); - if (bAllowCommodities) - { - orgOptData.Contexts_Folder.Add(lOrgOptionFolder.GetCodeDescForType(Sbm.OrgOption_Folder.CommodityImage)); - orgOptData.Contexts_Folder.Add(lOrgOptionFolder.GetCodeDescForType(Sbm.OrgOption_Folder.CommodityBarcodeImage)); - } + // Yes/No. + orgOptData.Values_YesNo.Add(orgOptData.Value_Yes, "Yes"); + orgOptData.Values_YesNo.Add(orgOptData.Value_No, "No"); - // Allow option contexts: - List lAllowOption = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_AllowOption); - if (bAllowContacts) - { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.UpdateAssociationCode)); - if (bAllowCustomers) - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.CustomerAccountDetails)); - if (bAllowStockists) - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.StockistAssociations)); - if (bAllowFinanceAgencies) - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.FinanceAgencyAssociations)); - } - if (bAllowCommodities) - { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Commodity_SalesBudget)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Commodity_PartialCodeFilter)); + // Organisation configuration. + bool bAllowContacts = (AllowConfigOption(Sbm.ConfigOption.AllowContacts)); + bool bAllowCustomers = (AllowAssociationType(Sbm.AssociationType.Customer)); + bool bAllowStockists = (AllowAssociationType(Sbm.AssociationType.Stockist)); + bool bAllowFinanceAgencies = (AllowAssociationType(Sbm.AssociationType.FinanceAgency)); + bool bAllowCommodities = (AllowConfigOption(Sbm.ConfigOption.AllowCommodities)); + bool bAllowVehicles = (AllowConfigOption(Sbm.ConfigOption.AllowVehicles)); + bool bAllowAssets = (AllowConfigOption(Sbm.ConfigOption.AllowAssets)); + bool bAllowTransactions = (AllowConfigOption(Sbm.ConfigOption.AllowTransactions)); + bool bAllowSalesOrders = ((AllowTransactionType(Sbm.TransactionType.SalesOrder) || AllowTransactionType(Sbm.TransactionType.ProformaSalesOrder))); + bool bAllowSalesDispatches = (AllowTransactionType(Sbm.TransactionType.SalesDispatch)); + bool bAllowSalesInvoices = ((AllowTransactionType(Sbm.TransactionType.SalesInvoice) || AllowTransactionType(Sbm.TransactionType.ProformaSalesInvoice))); + bool bAllowPurchaseOrders = ((AllowTransactionType(Sbm.TransactionType.PurchaseOrder) || AllowTransactionType(Sbm.TransactionType.ProformaPurchaseOrder))); + bool bAllowInterfaces = (console.AllowInterfaces(UserContext)); + bool bAllowInterfaces_File = (bAllowInterfaces && console.AllowInterfaceCategory(UserContext, SaInterfaceCategory.File)); + + // Values: + List orgOptionValues = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Value); if (bAllowTransactions) - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Commodity_EditHistoryItem)); - } - if (bAllowTransactions) - { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionFilter_AnyStatus)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionFilter_RetainRef)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionFilter_RetainRefExt)); - if (bAllowInterfaces_File) - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionExport_FixedContent)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Order_BillingAddress)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.OrderItem_ModifyCommodityDescription)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.OrderItem_ShowCommodityDetails)); + { + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.MaxTransactionsQueriedForEmptyFilter)); + if (CodeTypeHasCodes(Sbm.ApplCodeType.CommodityPromotion)) + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.AlternativePromotionText)); + if (console.GetRequirementCostingConfig(UserContext).AllowRequirementCosting(Sbm.TransactionType.SalesOrder)) + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.CostLabourRateDefault)); + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.CommoditiesAllowedNegativePrice)); + if (AllowConfigOption(Sbm.ConfigOption.TransactionSplitTimes)) + { + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.TransTimeChunk1Caption)); + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.TransTimeChunk2Caption)); + } + // Default Email content. + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.EmailSubject)); + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.EmailBody)); + } + if (accounts.IsUsingSageInterface()) + { + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.DefaultSalesCarriageNominal)); + orgOptData.Contexts_Value.Add(orgOptionValues.GetCodeDescForType(Sbm.OrgOption_Value.DefaultPurchaseCarriageNominal)); + } + + // Folders: + List lOrgOptionFolder = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Folder); + if (bAllowCommodities) + { + orgOptData.Contexts_Folder.Add(lOrgOptionFolder.GetCodeDescForType(Sbm.OrgOption_Folder.CommodityImage)); + orgOptData.Contexts_Folder.Add(lOrgOptionFolder.GetCodeDescForType(Sbm.OrgOption_Folder.CommodityBarcodeImage)); + } + + // Allow option contexts: + List lAllowOption = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_AllowOption); + if (bAllowContacts) + { + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.UpdateAssociationCode)); + if (bAllowCustomers) + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.CustomerAccountDetails)); + if (bAllowStockists) + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.StockistAssociations)); + if (bAllowFinanceAgencies) + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.FinanceAgencyAssociations)); + } + if (bAllowCommodities) + { + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Commodity_SalesBudget)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Commodity_PartialCodeFilter)); + if (bAllowTransactions) + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Commodity_EditHistoryItem)); + } + if (bAllowTransactions) + { + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionFilter_AnyStatus)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionFilter_RetainRef)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionFilter_RetainRefExt)); + if (bAllowInterfaces_File) + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.TransactionExport_FixedContent)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Order_BillingAddress)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.OrderItem_ModifyCommodityDescription)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.OrderItem_ShowCommodityDetails)); + if (StockControlConfig.AllowStockControl()) + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.OrderItem_ShowStockDetails)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Transaction_RetainCurrentViewOnRaise)); + } + if (bAllowSalesOrders) + { + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_OnHold)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_ReplacementOrders)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_DispatchDetails)); + if (bAllowSalesInvoices) + { + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_PartialInvoice)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_RaiseInvoiceOnCompletion)); + } + } + if (bAllowSalesOrders && bAllowPurchaseOrders) + { + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.PurchaseItem_AssociatedSalesItems)); + } if (StockControlConfig.AllowStockControl()) - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.OrderItem_ShowStockDetails)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Transaction_RetainCurrentViewOnRaise)); - } - if (bAllowSalesOrders) - { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_OnHold)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_ReplacementOrders)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_DispatchDetails)); - if (bAllowSalesInvoices) { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_PartialInvoice)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.SalesOrder_RaiseInvoiceOnCompletion)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.ImminentStock)); + if (StockControlConfig.AllowStockContainers()) + { + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.ManageContainerMovemements)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.AwaitingContainersInImminentStock)); + } } - } - if (bAllowSalesOrders && bAllowPurchaseOrders) - { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.PurchaseItem_AssociatedSalesItems)); - } - if (StockControlConfig.AllowStockControl()) - { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.ImminentStock)); - if (StockControlConfig.AllowStockContainers()) + if (bAllowAssets) { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.ManageContainerMovemements)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.AwaitingContainersInImminentStock)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Asset_Sale)); + orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Asset_Rental)); } - } - if (bAllowAssets) - { - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Asset_Sale)); - orgOptData.Contexts_AllowOption.Add(lAllowOption.GetCodeDescForType(Sbm.OrgOption_AllowOption.Asset_Rental)); - } - // Caption contexts: - orgOptData.Contexts_Caption.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Caption)); + // Caption contexts: + orgOptData.Contexts_Caption.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Caption)); - // Show field contexts. - // NB This list must be kept up to date with equivalent in 'SapphireConsole::DisplayAttribute': - List lShowField = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_ShowField); - if (ColumnExists(SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget)) - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Address_LastVisitOn)) - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Address_LastVisitOn)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_DrawingNo)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Department)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CatalogRef)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Volume)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Density)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_BoxQuantity)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)) - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_MaterialCost)) - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_MaterialCost)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)) - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)) - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative)) - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative)); - if (StockControlConfig.AllowStockControl()) - { - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay1)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay2)); - orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay3)); - } - - // Show column contexts: - List lShowColumn = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_ShowColumn); - if (bAllowSalesOrders) - { + // Show field contexts. + // NB This list must be kept up to date with equivalent in 'SapphireConsole::DisplayAttribute': + List lShowField = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_ShowField); if (ColumnExists(SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget)) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_AnnualSalesTarget)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_LastSaleRaised)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_SalesValue_Open)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_SalesValue_Cytd)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_SalesValue_Lcy)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Address_LastVisitOn)) + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Address_LastVisitOn)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_DrawingNo)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Department)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CatalogRef)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Volume)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Density)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_BoxQuantity)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)) + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_MaterialCost)) + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_MaterialCost)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)) + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)) + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative)) + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CarriageCostIndicative)); + if (StockControlConfig.AllowStockControl()) + { + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay1)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay2)); + orgOptData.Contexts_ShowField.Add(lShowField.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay3)); + } + + // Show column contexts: + List lShowColumn = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_ShowColumn); + if (bAllowSalesOrders) + { + if (ColumnExists(SbmDbDfn.ColumnIdx.Association_AnnualSalesTarget)) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_AnnualSalesTarget)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_LastSaleRaised)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_SalesValue_Open)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_SalesValue_Cytd)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Trans_SalesValue_Lcy)); + } + if (ColumnExists(SbmDbDfn.ColumnIdx.Association_Group)) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Group)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_CatalogRef)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_Weight)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_PackQtySale)); + if (StockControlConfig.AllowStockControl()) + { + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_StockAllocated)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_StockLevelSales)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_StockAvailable)); + } + if ((bAllowSalesOrders || bAllowPurchaseOrders) && StockControlConfig.AllowStockControl()) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Order_AllocationInd)); + if (bAllowSalesOrders && CodeTypeHasCodes(Sbm.ApplCodeType.DeliveryCourier)) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrder_DeliveryCourier)); + if (bAllowSalesOrders || bAllowSalesInvoices) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrder_HasInvoice)); + if (bAllowSalesInvoices) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Transaction_ContactArea)); + if (bAllowSalesInvoices && accounts.IsTransactionTypeManagedByAccounts(Sbm.TransactionType.SalesInvoice)) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Accounts_InvoiceRef)); + if ((bAllowSalesOrders || bAllowPurchaseOrders) && StockControlConfig.AllowStockControl()) + { + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_AllocationInd)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_Stock_Current)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_Stock_Available)); + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_Stock_BySalesLocation)); + } + if (bAllowSalesDispatches) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrderItem_QtyDispatched)); + if (bAllowSalesInvoices) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrderItem_QtyInvoiced)); + // Check for processes: + if (ProcessMgr.HasProcesses(Sbm.ProcessCategory.Commodity)) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrderItem_NextProcess)); + // Check for vehicles: + if (bAllowVehicles) + orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Vehicle_KeyLocation)); + + // Field label contexts: + List lFieldLabel = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_FieldLabel); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CatalogRef)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Dimensions)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CostPrice)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)) + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_MaterialCost)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)) + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks)) + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_SpecSummary)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_MaterialCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_FinishCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_DescDetail)); + if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)) + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Affiliate_Abbrev)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Affiliate_Nature)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_Location)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountManagerCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountTypeCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountRatingCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactAreaCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactMethodCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Transaction_Ref)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Transaction_RefExt)); + if (StockControlConfig.AllowStockControl()) + { + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay1)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay2)); + orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay3)); + } + + // Commodity status filter. + List lCmdStatusCat = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.CommodityStatusCat); + orgOptData.Values_CommodityStatusCat.Add(lCmdStatusCat.GetCodeDescForType(SbmCommodity.StatusCat.Any)); + orgOptData.Values_CommodityStatusCat.Add(lCmdStatusCat.GetCodeDescForType(SbmCommodity.StatusCat.Current)); + + // Commodity Stock Category filter. + List commodityCategories = GetCodeDescsForCodeType(Sbm.ApplCodeType.CommodityCategory, true); + orgOptData.Values_CommodityStockCat.AddRange(commodityCategories); + + // Container status caption. + if (CommodityMgr.ContainerDatabaseIsValid && StockControlConfig.AllowStockContainers()) + orgOptData.Contexts_ContainerStatus.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_ContainerStatusCaption)); + + // Generic options: + orgOptData.Contexts_Minutes.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Minutes)); + orgOptData.Contexts_PeriodDays.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_PeriodDays)); + orgOptData.Contexts_PeriodWeeks.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_PeriodWeeks)); + + // Minutes. + for (int iMins = 0; iMins <= 30; iMins++) + orgOptData.Values_Minutes.Add(iMins.ToString(), iMins.ToString() + " min" + (iMins == 1 ? "" : "s")); + + // Period - days. + orgOptData.Values_PeriodDays.Add("1", "1 day"); + orgOptData.Values_PeriodDays.Add("2", "2 days"); + orgOptData.Values_PeriodDays.Add("3", "3 days"); + orgOptData.Values_PeriodDays.Add("7", "1 week"); + orgOptData.Values_PeriodDays.Add("14", "2 weeks"); + orgOptData.Values_PeriodDays.Add("21", "3 weeks"); + orgOptData.Values_PeriodDays.Add("30", "30 days"); + orgOptData.Values_PeriodDays.Add("60", "60 days"); + orgOptData.Values_PeriodDays.Add("90", "90 days"); + orgOptData.Values_PeriodDays.Add("120", "120 days"); + orgOptData.Values_PeriodDays.Add("150", "150 days"); + orgOptData.Values_PeriodDays.Add("300", "300 days"); + + // Period - weeks. + orgOptData.Values_PeriodWeeks.Add("0", "0 weeks"); + orgOptData.Values_PeriodWeeks.Add("1", "1 week"); + orgOptData.Values_PeriodWeeks.Add("2", "2 weeks"); + orgOptData.Values_PeriodWeeks.Add("3", "3 weeks"); + orgOptData.Values_PeriodWeeks.Add("4", "4 weeks"); + orgOptData.Values_PeriodWeeks.Add("5", "5 weeks"); + orgOptData.Values_PeriodWeeks.Add("6", "6 weeks"); + orgOptData.Values_PeriodWeeks.Add("7", "7 weeks"); + orgOptData.Values_PeriodWeeks.Add("8", "8 weeks"); + orgOptData.Values_PeriodWeeks.Add("9", "9 weeks"); + orgOptData.Values_PeriodWeeks.Add("10", "10 weeks"); + orgOptData.Values_PeriodWeeks.Add("11", "11 weeks"); + orgOptData.Values_PeriodWeeks.Add("12", "12 weeks"); + orgOptData.Values_PeriodWeeks.Add("13", "13 weeks"); + orgOptData.Values_PeriodWeeks.Add("14", "14 weeks"); + orgOptData.Values_PeriodWeeks.Add("15", "15 weeks"); + orgOptData.Values_PeriodWeeks.Add("16", "16 weeks"); + orgOptData.Values_PeriodWeeks.Add("17", "17 weeks"); + orgOptData.Values_PeriodWeeks.Add("18", "18 weeks"); + orgOptData.Values_PeriodWeeks.Add("19", "19 weeks"); + orgOptData.Values_PeriodWeeks.Add("20", "20 weeks"); + orgOptData.Values_PeriodWeeks.Add("21", "21 weeks"); + orgOptData.Values_PeriodWeeks.Add("22", "22 weeks"); + orgOptData.Values_PeriodWeeks.Add("23", "23 weeks"); + orgOptData.Values_PeriodWeeks.Add("24", "24 weeks"); + orgOptData.Values_PeriodWeeks.Add("25", "25 weeks"); + orgOptData.Values_PeriodWeeks.Add("26", "26 weeks"); + orgOptData.Values_PeriodWeeks.Add("27", "27 weeks"); + orgOptData.Values_PeriodWeeks.Add("28", "28 weeks"); + orgOptData.Values_PeriodWeeks.Add("29", "29 weeks"); + orgOptData.Values_PeriodWeeks.Add("30", "30 weeks"); + + // Numeric Decimals: + orgOptData.Contexts_NumericDecimals.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_NumericDecimals)); + orgOptData.Values_Decimals_0To2.Add("0", "None"); + orgOptData.Values_Decimals_0To2.Add("1", "1 places"); + orgOptData.Values_Decimals_0To2.Add("2", "2 places"); + orgOptData.Values_Decimals_0To4.Add("0", "None"); + orgOptData.Values_Decimals_0To4.Add("1", "1 places"); + orgOptData.Values_Decimals_0To4.Add("2", "2 places"); + orgOptData.Values_Decimals_0To4.Add("3", "3 places"); + orgOptData.Values_Decimals_0To4.Add("4", "4 places"); + + // Commodity types. + orgOptData.Contexts_CommodityType.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.CommodityType)); + orgOptData.Values_CommodityTypes.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.CommodityType)); + + // Sales locations. + orgOptData.Contexts_SalesLocation.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_StockLocation)); + SbmLocation.Params prmLocation = new SbmLocation.Params(); + prmLocation.RestrictToSalesStock = true; + prmLocation.StatusCat = SbmLocation.StatusCat.ActiveOnly; + foreach (SbmLocation location in StockMgr.GetLocationList(prmLocation)) + orgOptData.Values_SalesLocation.Add(SysId.ToString(location.Id), location.Name); } - if (ColumnExists(SbmDbDfn.ColumnIdx.Association_Group)) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Association_Group)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_CatalogRef)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_Weight)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_PackQtySale)); - if (StockControlConfig.AllowStockControl()) - { - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_StockAllocated)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_StockLevelSales)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Commodity_StockAvailable)); - } - if ((bAllowSalesOrders || bAllowPurchaseOrders) && StockControlConfig.AllowStockControl()) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Order_AllocationInd)); - if (bAllowSalesOrders && CodeTypeHasCodes(Sbm.ApplCodeType.DeliveryCourier)) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrder_DeliveryCourier)); - if (bAllowSalesOrders || bAllowSalesInvoices) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrder_HasInvoice)); - if (bAllowSalesInvoices) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Transaction_ContactArea)); - if (bAllowSalesInvoices && accounts.IsTransactionTypeManagedByAccounts(Sbm.TransactionType.SalesInvoice)) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Accounts_InvoiceRef)); - if ((bAllowSalesOrders || bAllowPurchaseOrders) && StockControlConfig.AllowStockControl()) - { - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_AllocationInd)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_Stock_Current)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_Stock_Available)); - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.OrderItem_Stock_BySalesLocation)); - } - if (bAllowSalesDispatches) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrderItem_QtyDispatched)); - if (bAllowSalesInvoices) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrderItem_QtyInvoiced)); - // Check for processes: - if (ProcessMgr.HasProcesses(Sbm.ProcessCategory.Commodity)) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.SalesOrderItem_NextProcess)); - // Check for vehicles: - if (bAllowVehicles) - orgOptData.Contexts_ShowColumn.Add(lShowColumn.GetCodeDescForType(Sbm.OrgOption_ShowColumn.Vehicle_KeyLocation)); - - // Field label contexts: - List lFieldLabel = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_FieldLabel); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CatalogRef)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_Dimensions)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CostPrice)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)) - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_PlaceOfOrigin)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_MaterialCost)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)) - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_ExWorksCost)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks)) - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdExWorks)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_SpecSummary)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_MaterialCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_FinishCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_DescDetail)); - if (ColumnExists(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)) - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Commodity_RetailPricePlanned)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Affiliate_Abbrev)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Affiliate_Nature)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_Location)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountManagerCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountTypeCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_AccountRatingCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactAreaCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactMethodCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Transaction_Ref)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.Transaction_RefExt)); - if (StockControlConfig.AllowStockControl()) - { - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay1)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay2)); - orgOptData.Contexts_FieldLabelAssoc.Add(lFieldLabel.GetCodeDescForType(SbmDbDfn.ColumnIdx.StockLevel_Bay3)); - } - - // Commodity status filter. - List lCmdStatusCat = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.CommodityStatusCat); - orgOptData.Values_CommodityStatusCat.Add(lCmdStatusCat.GetCodeDescForType(SbmCommodity.StatusCat.Any)); - orgOptData.Values_CommodityStatusCat.Add(lCmdStatusCat.GetCodeDescForType(SbmCommodity.StatusCat.Current)); - - // Commodity Stock Category filter. - List commodityCategories = GetCodeDescsForCodeType(Sbm.ApplCodeType.CommodityCategory, true); - orgOptData.Values_CommodityStockCat.AddRange(commodityCategories); - - // Container status caption. - if (CommodityMgr.ContainerDatabaseIsValid && StockControlConfig.AllowStockContainers()) - orgOptData.Contexts_ContainerStatus.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_ContainerStatusCaption)); - - // Generic options: - orgOptData.Contexts_Minutes.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_Minutes)); - orgOptData.Contexts_PeriodDays.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_PeriodDays)); - orgOptData.Contexts_PeriodWeeks.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_PeriodWeeks)); - - // Minutes. - for (int iMins = 0; iMins <= 30; iMins++) - orgOptData.Values_Minutes.Add(iMins.ToString(), iMins.ToString() + " min" + (iMins == 1 ? "" : "s")); - - // Period - days. - orgOptData.Values_PeriodDays.Add("1", "1 day"); - orgOptData.Values_PeriodDays.Add("2", "2 days"); - orgOptData.Values_PeriodDays.Add("3", "3 days"); - orgOptData.Values_PeriodDays.Add("7", "1 week"); - orgOptData.Values_PeriodDays.Add("14", "2 weeks"); - orgOptData.Values_PeriodDays.Add("21", "3 weeks"); - orgOptData.Values_PeriodDays.Add("30", "30 days"); - orgOptData.Values_PeriodDays.Add("60", "60 days"); - orgOptData.Values_PeriodDays.Add("90", "90 days"); - orgOptData.Values_PeriodDays.Add("120", "120 days"); - orgOptData.Values_PeriodDays.Add("150", "150 days"); - orgOptData.Values_PeriodDays.Add("300", "300 days"); - - // Period - weeks. - orgOptData.Values_PeriodWeeks.Add("0", "0 weeks"); - orgOptData.Values_PeriodWeeks.Add("1", "1 week"); - orgOptData.Values_PeriodWeeks.Add("2", "2 weeks"); - orgOptData.Values_PeriodWeeks.Add("3", "3 weeks"); - orgOptData.Values_PeriodWeeks.Add("4", "4 weeks"); - orgOptData.Values_PeriodWeeks.Add("5", "5 weeks"); - orgOptData.Values_PeriodWeeks.Add("6", "6 weeks"); - orgOptData.Values_PeriodWeeks.Add("7", "7 weeks"); - orgOptData.Values_PeriodWeeks.Add("8", "8 weeks"); - orgOptData.Values_PeriodWeeks.Add("9", "9 weeks"); - orgOptData.Values_PeriodWeeks.Add("10", "10 weeks"); - orgOptData.Values_PeriodWeeks.Add("11", "11 weeks"); - orgOptData.Values_PeriodWeeks.Add("12", "12 weeks"); - orgOptData.Values_PeriodWeeks.Add("13", "13 weeks"); - orgOptData.Values_PeriodWeeks.Add("14", "14 weeks"); - orgOptData.Values_PeriodWeeks.Add("15", "15 weeks"); - orgOptData.Values_PeriodWeeks.Add("16", "16 weeks"); - orgOptData.Values_PeriodWeeks.Add("17", "17 weeks"); - orgOptData.Values_PeriodWeeks.Add("18", "18 weeks"); - orgOptData.Values_PeriodWeeks.Add("19", "19 weeks"); - orgOptData.Values_PeriodWeeks.Add("20", "20 weeks"); - orgOptData.Values_PeriodWeeks.Add("21", "21 weeks"); - orgOptData.Values_PeriodWeeks.Add("22", "22 weeks"); - orgOptData.Values_PeriodWeeks.Add("23", "23 weeks"); - orgOptData.Values_PeriodWeeks.Add("24", "24 weeks"); - orgOptData.Values_PeriodWeeks.Add("25", "25 weeks"); - orgOptData.Values_PeriodWeeks.Add("26", "26 weeks"); - orgOptData.Values_PeriodWeeks.Add("27", "27 weeks"); - orgOptData.Values_PeriodWeeks.Add("28", "28 weeks"); - orgOptData.Values_PeriodWeeks.Add("29", "29 weeks"); - orgOptData.Values_PeriodWeeks.Add("30", "30 weeks"); - - // Numeric Decimals: - orgOptData.Contexts_NumericDecimals.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_NumericDecimals)); - orgOptData.Values_Decimals_0To2.Add("0", "None"); - orgOptData.Values_Decimals_0To2.Add("1", "1 places"); - orgOptData.Values_Decimals_0To2.Add("2", "2 places"); - orgOptData.Values_Decimals_0To4.Add("0", "None"); - orgOptData.Values_Decimals_0To4.Add("1", "1 places"); - orgOptData.Values_Decimals_0To4.Add("2", "2 places"); - orgOptData.Values_Decimals_0To4.Add("3", "3 places"); - orgOptData.Values_Decimals_0To4.Add("4", "4 places"); - - // Commodity types. - orgOptData.Contexts_CommodityType.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.CommodityType)); - orgOptData.Values_CommodityTypes.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.CommodityType)); - - // Sales locations. - orgOptData.Contexts_SalesLocation.AddRange(SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.OrgOption_StockLocation)); - SbmLocation.Params prmLocation = new SbmLocation.Params(); - prmLocation.RestrictToSalesStock = true; - prmLocation.StatusCat = SbmLocation.StatusCat.ActiveOnly; - foreach (SbmLocation location in StockMgr.GetLocationList(prmLocation)) - orgOptData.Values_SalesLocation.Add(SysId.ToString(location.Id), location.Name); return orgOptData; } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs b/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs index 0823311..044c291 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmItemMgr.cs @@ -232,14 +232,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { SbmApplication application = SbmGlobals.Application; if (application != null) - return application.TableExists(SessionContext, tableIdx); + return application.BusMgrTableExists(SessionContext, tableIdx); return false; } public bool ColumnExists(SbmDbDfn.ColumnIdx columnIdx) { SbmApplication application = SbmGlobals.Application; if (application != null) - return application.ColumnExists(SessionContext, columnIdx); + return application.BusMgrColumnExists(SessionContext, columnIdx); return false; } diff --git a/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr_Transaction.cs b/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr_Transaction.cs index c8b2298..3822e28 100644 --- a/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr_Transaction.cs +++ b/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr_Transaction.cs @@ -260,7 +260,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr // Standard notes length: maxTranNotesLength = (int)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Transaction_Notes); // Check if this database allows longer notes: - ISacsDatabase db = SbmGlobals.Application.GetDatabase(SessionContext); + ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(SessionContext); if (db != null) { DbDfnTable tableDfn = db.GetTableDfn(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction, false)); diff --git a/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs b/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs index da6d8b6..859cc7c 100644 --- a/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs +++ b/SaBusMgrStandardBase/Base/Procs/SbmReport_Base.cs @@ -7,27 +7,23 @@ using Sarand.Net.Standard.Base.Procs; namespace Sarand.BusinessMgr.Net.Standard.Base.Procs { //======================================================================= - public abstract class SbmReport_Base : SacsReport + public abstract class SbmReport_Base : SaReport_Base { //------------------------------------------------------------------- // Configuration. - public new class Config : SacsReport.Config + public new class Config : SaReport_Base.Config { - protected Config(SbmUserContext userContext, DbUpdateInfo dbUpdateInfo) + protected Config(SbmUserContext userContext) { UserContext = userContext; - DbUpdateInfo = dbUpdateInfo; } public SbmUserContext UserContext { get; } - public DbUpdateInfo DbUpdateInfo { get; } } //------------------------------------------------------------------- // Data members. private Config config; - private SbmAccountMgr accountMgr = null; - private SbmCommodityMgr commodityMgr = null; - private SbmTransactionMgr transactionMgr = null; + private SbmInternals internals = null; //------------------------------------------------------------------- // Construction. @@ -39,44 +35,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.Procs { if (disposing) { - if (accountMgr != null) accountMgr.Dispose(); - if (commodityMgr != null) commodityMgr.Dispose(); - if (transactionMgr != null) transactionMgr.Dispose(); + if (internals != null) internals.Dispose(); } base.Dispose(disposing); } //------------------------------------------------------------------- // Properties. - protected SaCodeTypeConsole CodeTypeConsole { get { return SbmGlobals.Application.GetCodeTypeConsole(config.UserContext); } } - protected SbmAccountMgr AccountMgr - { - get - { - if (accountMgr == null) - accountMgr = SbmGlobals.System.CreateAccountMgr(config.UserContext); - return accountMgr; - } - } - protected SbmCommodityMgr CommodityMgr - { - get - { - if (commodityMgr == null) - commodityMgr = SbmGlobals.System.CreateCommodityMgr(config.UserContext); - return commodityMgr; - } - } - protected SbmTransactionMgr TransactionMgr - { - get - { - if (transactionMgr == null) - transactionMgr = SbmGlobals.System.CreateTransactionMgr(config.UserContext); - return transactionMgr; - } - } - protected DbUpdateInfo DbUpdateInfo { get { return config.DbUpdateInfo; } } + protected SbmInternals Internals { get { if (internals == null) internals = new SbmInternals(config.UserContext); return internals; } } + protected SaCodeTypeConsole CodeTypeConsole { get { return Internals.CodeTypeConsole; } } + protected SbmAccountMgr AccountMgr { get { return Internals.AccountMgr; } } + protected SbmCommodityMgr CommodityMgr { get { return Internals.CommodityMgr; } } + protected SbmTransactionMgr TransactionMgr { get { return Internals.TransactionMgr; } } + protected DbUpdateInfo DbUpdateInfo { get { return Internals.DbUpdateInfo; } } //------------------------------------------------------------------- } diff --git a/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs b/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs index e3e52dc..342b7e4 100644 --- a/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs +++ b/SaBusMgrStandardBase/Base/UpdateLog/SbmUpdateLogItemMonitor.cs @@ -13,12 +13,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.UpdateLog // Configuration. public new class Config : SaUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext) : - base(SbmGlobals.Application.GetUpdateLogConsole(userContext), userContext.DbUpdateInfo) + public Config(SbmInternals internals) : + base(internals.UpdateLogConsole, internals.DbUpdateInfo) { - UserContext = userContext; + Internals = internals; } - public SbmUserContext UserContext { get; } + public SbmInternals Internals { get; } } //------------------------------------------------------------------- @@ -35,7 +35,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.UpdateLog //------------------------------------------------------------------- // Properties. - public SbmUserContext UserContext { get { return config.UserContext; } } + public SbmUserContext UserContext { get { return config.Internals.UserContext; } } //------------------------------------------------------------------- // Internal utilities. @@ -43,7 +43,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Base.UpdateLog { if (!config.UpdateLogConsole.CanUpdateDatabase) return false; if (configConsole == null) - configConsole = SbmGlobals.Application.GetConfigConsole(config.UserContext.SessionContext); + configConsole = config.Internals.ConfigConsole; if (!configConsole.IsColumnChangeLogged(UserContext, columnIdx)) return false; return true; } diff --git a/SaBusMgrStandardBase/Base/WebService/SbmWebServiceClient.cs b/SaBusMgrStandardBase/Base/WebService/SbmWebServiceClient.cs index 8d83e9c..e94164f 100644 --- a/SaBusMgrStandardBase/Base/WebService/SbmWebServiceClient.cs +++ b/SaBusMgrStandardBase/Base/WebService/SbmWebServiceClient.cs @@ -5,7 +5,6 @@ using Sarand.Net.Standard.Base.Data; using Sarand.Net.Standard.Base.Net; using Sarand.Net.Standard.Base.Tasks; using Sarand.Net.Standard.Base.Utils; -using Sarand.Net.Standard.Base.Xml; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/SaBusMgrStandardBase/Base/WebService/SbmWebServiceRequest.cs b/SaBusMgrStandardBase/Base/WebService/SbmWebServiceRequest.cs index 5c2d871..38e60be 100644 --- a/SaBusMgrStandardBase/Base/WebService/SbmWebServiceRequest.cs +++ b/SaBusMgrStandardBase/Base/WebService/SbmWebServiceRequest.cs @@ -1,7 +1,6 @@ using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; -using Sarand.Net.Standard.Base.Xml; using System; using System.Collections.Generic; using System.Xml.Linq; diff --git a/SaBusMgrStandardBase/Base/WebService/SbmWebServiceResponse.cs b/SaBusMgrStandardBase/Base/WebService/SbmWebServiceResponse.cs index 2b8843e..a530d7e 100644 --- a/SaBusMgrStandardBase/Base/WebService/SbmWebServiceResponse.cs +++ b/SaBusMgrStandardBase/Base/WebService/SbmWebServiceResponse.cs @@ -3,7 +3,6 @@ using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Net; using Sarand.Net.Standard.Base.Utils; -using Sarand.Net.Standard.Base.Xml; using System; using System.Collections.Generic; using System.Xml.Linq; diff --git a/SaBusMgrStandardBase/SaBusMgrStandardBase.csproj b/SaBusMgrStandardBase/SaBusMgrStandardBase.csproj index 7aa1909..c84fe10 100644 --- a/SaBusMgrStandardBase/SaBusMgrStandardBase.csproj +++ b/SaBusMgrStandardBase/SaBusMgrStandardBase.csproj @@ -5,6 +5,10 @@ Sarand.BusinessMgr.Net.Standard + + + + diff --git a/SaBusMgrStandardDbas/Dbas/App/SbmSystem_WinDbas.cs b/SaBusMgrStandardDbas/Dbas/App/SbmSystem_Dbas.cs similarity index 96% rename from SaBusMgrStandardDbas/Dbas/App/SbmSystem_WinDbas.cs rename to SaBusMgrStandardDbas/Dbas/App/SbmSystem_Dbas.cs index b29fcc0..d330dd0 100644 --- a/SaBusMgrStandardDbas/Dbas/App/SbmSystem_WinDbas.cs +++ b/SaBusMgrStandardDbas/Dbas/App/SbmSystem_Dbas.cs @@ -13,7 +13,7 @@ using System.IO; namespace Sarand.BusinessMgr.Net.Standard.Dbas.App { //======================================================================= - public class SbmSystem_WinDbas : SbmSystem + public class SbmSystem_Dbas : SbmSystem { //------------------------------------------------------------------- // Static initialisation. @@ -32,7 +32,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.App //------------------------------------------------------------------- // Construction. - public SbmSystem_WinDbas(PropertySet properties) : base(properties) + public SbmSystem_Dbas(PropertySet properties) : base(properties) { if (IsExtendedLogging(ExtendedLogginOption.DbQueryExecution)) { diff --git a/SaBusMgrStandardDbas/Dbas/App/SbmUserContext_Dbas.cs b/SaBusMgrStandardDbas/Dbas/App/SbmUserContext_Dbas.cs new file mode 100644 index 0000000..60c596b --- /dev/null +++ b/SaBusMgrStandardDbas/Dbas/App/SbmUserContext_Dbas.cs @@ -0,0 +1,21 @@ +using Sarand.BusinessMgr.Net.Standard.Base.App; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Sarand.BusinessMgr.Net.Standard.Dbas.App +{ + public class SbmUserContext_Dbas : SbmUserContext + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public SbmUserContext_Dbas(SbmSessionContext sessionContext) : base(sessionContext) + { + } + + //------------------------------------------------------------------- + } +} diff --git a/SaBusMgrStandardDbas/Dbas/Base/SbmDatabaseConsole.cs b/SaBusMgrStandardDbas/Dbas/Base/SbmDatabaseConsole.cs index dcda9a3..836f677 100644 --- a/SaBusMgrStandardDbas/Dbas/Base/SbmDatabaseConsole.cs +++ b/SaBusMgrStandardDbas/Dbas/Base/SbmDatabaseConsole.cs @@ -27,7 +27,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Base public bool CreateDbIndices(IndexStats indexStats) { ClearErrorState(); - ISacsDatabase database = SbmGlobals.Application.GetDatabase(sessionContext); + ISacsDatabase database = SbmGlobals.Application.GetBusMgrDatabase(sessionContext); if (database == null || database.DbmsType != DbmsType.MsSql) return SetErrorState(""); // Turn off database exceptions. diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmAddress_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmAddress_Dbas.cs index 8e619da..4d38798 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmAddress_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmAddress_Dbas.cs @@ -12,20 +12,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmAddress_Dbas(SbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.AddressType addressType, ushort flags) : - base(userContext, id, itemType, itemId, addressType) + public SbmAddress_Dbas(SbmInternals internals, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.AddressType addressType, ushort flags) : + base(internals.UserContext, id, itemType, itemId, addressType) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -39,7 +40,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole != null) return false; bool has = interfaceConsole.ItemHasDataItems(new ItemId((short)Sbm.ItemType.Address, Id)); return has; @@ -49,16 +50,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus ClearErrorState(); if (!SysId.IsValid(Id)) return false; if (SbmGlobals.System == null) return SetErrorState("System is not available"); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) return SetErrorState("Database is not available"); // Delete interface data items. if (!HasErrorState()) { - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Association, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Association, Id), internals.DbUpdateInfo)) SetErrorState("Failed to clear interface data items - " + interfaceConsole.ErrorState); } else SetErrorState("failed to initialise interface console"); @@ -67,15 +68,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus // Remove data item references. if (!HasErrorState()) { - using (SbmDataItemMgr dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext)) + SbmDataItemMgr dataItemMgr = internals.DataItemMgr; + if (dataItemMgr != null) { - if (dataItemMgr != null) - { - if (!dataItemMgr.ClearDataItem(Sbm.ItemType.Address, Id)) - SetErrorState(dataItemMgr.ErrorState.ToString()); - } - else SetErrorState("Data item manager is not available"); + if (!dataItemMgr.ClearDataItem(Sbm.ItemType.Address, Id)) + SetErrorState(dataItemMgr.ErrorState.ToString()); } + else SetErrorState("Data item manager is not available"); } return !HasErrorState(); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmAffiliate_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmAffiliate_Dbas.cs index 87680fa..51a9ee6 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmAffiliate_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmAffiliate_Dbas.cs @@ -14,22 +14,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private SbmAccountMgr accountMgr; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmAffiliate_Dbas(SbmUserContext userContext, SysId id, Sbm.AffiliateType affiliateType, ushort flags) : - base(userContext, id, affiliateType) + public SbmAffiliate_Dbas(SbmInternals internals, SysId id, Sbm.AffiliateType affiliateType, ushort flags) : + base(internals.UserContext, id, affiliateType) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { - if (accountMgr != null) accountMgr.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -42,7 +41,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override long GetChildAffiliates() { if (!SysId.IsValid(Id)) return 0; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_AffIdParent) + "=" + Id.ToString(); @@ -58,28 +57,24 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override long OwnerOfAssociationsCount(Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool currentOnly = true) { - if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); - return accountMgr.OwnerAssociationCount(Id, associationType, currentOnly); + return internals.AccountMgr.OwnerAssociationCount(Id, associationType, currentOnly); } public override bool OwnerOfAssociations(Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool currentOnly = true) { - if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); - return accountMgr.OwnerHasAssociations(Id, associationType, currentOnly); + return internals.AccountMgr.OwnerHasAssociations(Id, associationType, currentOnly); } public override long TargetOfAssociationsCount(Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool currentOnly = true) { - if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); - return accountMgr.TargetAssociationCount(Id, associationType, currentOnly); + return internals.AccountMgr.TargetAssociationCount(Id, associationType, currentOnly); } public override bool TargetOfAssociations(Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool currentOnly = true) { - if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); - return accountMgr.TargetHasAssociations(Id, associationType, currentOnly); + return internals.AccountMgr.TargetHasAssociations(Id, associationType, currentOnly); } public override bool HasSystemUsers() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SystemUser_AffiliateId) + "=" + Id.ToString(); @@ -106,16 +101,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus ClearErrorState(); if (!SysId.IsValid(Id)) return false; if (SbmGlobals.System == null) return SetErrorState("System is not available"); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(internals.SessionContext); if (db != null) return SetErrorState("Database is not available"); // Delete interface data items. if (!HasErrorState()) { - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Association, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Association, Id), internals.DbUpdateInfo)) SetErrorState("Failed to clear interface data items - " + interfaceConsole.ErrorState); } else SetErrorState("failed to initialise interface console"); @@ -124,7 +119,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus // Remove data item references. if (!HasErrorState()) { - SbmDataItemMgr dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); + SbmDataItemMgr dataItemMgr = internals.DataItemMgr; if (dataItemMgr != null) { if (!dataItemMgr.ClearDataItem(Sbm.ItemType.Affiliate, Id)) diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetCategory_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetCategory_Dbas.cs index 6e54d22..4b6a756 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetCategory_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetCategory_Dbas.cs @@ -16,26 +16,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private SbmProcessMgr processMgr; + private readonly SbmInternals internals; private List itemProcesses = new List(); //------------------------------------------------------------------- // Construction. - public SbmAssetCategory_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, Sbm.AssetType assetType, ushort flags) : - base(userContext, id) + public SbmAssetCategory_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, Sbm.AssetType assetType, ushort flags) : + base(internals.UserContext, id) { - this.userContext = userContext; - Id = id; - AffIdOwner = affIdOwner; - AssetType = assetType; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { - if (processMgr != null) processMgr.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -43,29 +39,19 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus //------------------------------------------------------------------- // Properties. - //------------------------------------------------------------------- - // Internal Processing. - public bool InitProcMgr() - { - if (processMgr == null) - processMgr = SbmGlobals.System.CreateProcessMgr(userContext); - return (processMgr != null); - } - //------------------------------------------------------------------- // Associated data. public override bool HasProcesses() { ClearErrorState(); if (!SysId.IsValid(Id)) return SetErrorState("invalid item"); - if (processMgr == null) return SetErrorState("process manager not available"); - return false;// processMgr.ItemHasProcesses(Sbm.ItemType.Asset, Id); + return internals.ProcessMgr.HasItemProcesses(Sbm.ItemType.Asset, Id); } public override bool HasAssets() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableAsset = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset); @@ -83,7 +69,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (this == null || !SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null && !HasErrorState()) { if (!HasErrorState()) @@ -113,11 +99,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (!HasErrorState()) { // Remove interface data items: - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; //DbUpdateInfo dbUpdateInfo = userContext.DbUpdateInfo; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), internals.DbUpdateInfo)) SetErrorState(interfaceConsole.ErrorState.ToString()); } else SetErrorState("Failed to retrieve interface console"); @@ -135,15 +121,15 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (activeOnly) { // Retrieve the list of 'active' processes for this item. - processMgr.GetProcessesForItem(Sbm.ItemType.AssetCategory, Id, true); + internals.ProcessMgr.GetProcessesForItem(Sbm.ItemType.AssetCategory, Id, true); } else { // Full list required - check whether the internal list has been populated yet. - if (itemProcesses == null && SysId.IsValid(Id) && processMgr != null) + if (itemProcesses == null && SysId.IsValid(Id)) { // Get the list of processes: - processMgr.GetProcessesForItem(Sbm.ItemType.AssetCategory, Id, false); + internals.ProcessMgr.GetProcessesForItem(Sbm.ItemType.AssetCategory, Id, false); } // Clone the list. itemProcesesCopy = itemProcesses.Clone(); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetProcess_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetProcess_Dbas.cs index dc5014c..609525c 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetProcess_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmAssetProcess_Dbas.cs @@ -9,23 +9,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmAssetProcess_Dbas(SbmUserContext userContext, SysId id, SysId assetId, SysId processId, ushort flags) : - base(userContext, id, assetId, processId) + public SbmAssetProcess_Dbas(SbmInternals internals, SysId id, SysId assetId, SysId processId, ushort flags) : + base(internals.UserContext, id, assetId, processId) { - this.userContext = userContext; - Id = id; - AssetId = assetId; - ProcessId = processId; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmAsset_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmAsset_Dbas.cs index c39a075..729e969 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmAsset_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmAsset_Dbas.cs @@ -16,19 +16,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private SbmAssetMgr assetMgr; - private SbmDataItemMgr dataItemMgr; - private SbmProcessMgr processMgr; + private readonly SbmInternals internals; private List itemProcesses = new List(); private List itemPrices = new List(); //------------------------------------------------------------------- // Construction. - public SbmAsset_Dbas(SbmUserContext userContext, SysId id, SysId assetCatId, ushort flags) : - base(userContext, id, assetCatId) + public SbmAsset_Dbas(SbmInternals internals, SysId id, SysId assetCatId, ushort flags) : + base(internals.UserContext, id, assetCatId) { - this.userContext = userContext; + this.internals = internals; Id = id; AssetCategoryId = assetCatId; Flags = flags; @@ -37,9 +34,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { if (disposing) { - if (assetMgr != null) assetMgr.Dispose(); - if (dataItemMgr != null) dataItemMgr.Dispose(); - if (processMgr != null) processMgr.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -47,36 +42,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus //------------------------------------------------------------------- // Properties. - //------------------------------------------------------------------- - // Internal Processing. - public bool InitAssetMgr() - { - if (assetMgr == null) - assetMgr = SbmGlobals.System.CreateAssetMgr(userContext); - return (assetMgr != null); - } - public bool InitDataItemMgr() - { - if (dataItemMgr == null) - dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); - return (dataItemMgr != null); - } - public bool InitProcessMgr() - { - if (processMgr == null) - processMgr = SbmGlobals.System.CreateProcessMgr(userContext); - return (processMgr != null); - } - //------------------------------------------------------------------- // Associated data. public override bool HasProcesses() { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - if (processMgr == null) return SetErrorState("process manager not available"); //processMgr.ItemHasProcesses(Sbm.ItemType.Asset, Id);ISacsDatabase db = SbmGlobals.Application.GetDatabase(SessionContext); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableAssetProcess = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetProcess); @@ -93,19 +66,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); - if (db != null) - { - String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_Id) + "=" + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_AssetId); - return db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), filter + "=" + Id.ToString()) > 0; - } - return false; + String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_Id) + "=" + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_AssetId); + return internals.BusMgrDatabase.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), filter + "=" + Id.ToString()) > 0; } public override bool HasInterfaceDataItems() { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole == null) return false; return interfaceConsole.ItemHasDataItems(new ItemId((short)Sbm.ItemType.Asset, Id)); } @@ -113,15 +81,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - if (dataItemMgr != null) - return dataItemMgr.HasItemLinks(Sbm.ItemType.Asset, Id); - return false; + return internals.DataItemMgr.HasItemLinks(Sbm.ItemType.Asset, Id); } public override bool ClearDependentData() { ClearErrorState(); if (this == null || !SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null && !HasErrorState()) { if (!HasErrorState()) @@ -151,26 +117,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus // Remove items data. if (!HasErrorState()) { - SbmDataItemMgr dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); - if (dataItemMgr != null) + if (internals.DataItemMgr != null) { - if (!dataItemMgr.ClearDataItem(Sbm.ItemType.Asset, Id)) - SetErrorState(dataItemMgr.ErrorState.ToString()); + if (!internals.DataItemMgr.ClearDataItem(Sbm.ItemType.Asset, Id)) + SetErrorState(internals.DataItemMgr.ErrorState.ToString()); } else SetErrorState("Failed to retrieve Data Item manager"); } if (!HasErrorState()) { // Remove interface data items. - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); - //DbUpdateInfo dbUpdateInfo = userContext.DbUpdateInfo; - if (interfaceConsole != null) + if (internals.InterfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), userContext.DbUpdateInfo)) - SetErrorState(interfaceConsole.ErrorState.ToString()); + if (!internals.InterfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), internals.DbUpdateInfo)) + SetErrorState(internals.InterfaceConsole.ErrorState.ToString()); } else SetErrorState("Failed to retrieve interface console"); - interfaceConsole = null; // Do not delete this global object. } } else SetErrorState("database is unavailable"); @@ -185,15 +147,15 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (activeOnly) { // Retrieve the list of 'active' processes for this item. - processMgr.GetProcessesForItem(Sbm.ItemType.Asset, Id, true); + internals.ProcessMgr.GetProcessesForItem(Sbm.ItemType.Asset, Id, true); } else { // Full list required - check whether the internal list has been populated yet. - if (itemProcesses == null && SysId.IsValid(Id) && processMgr != null) + if (itemProcesses == null && SysId.IsValid(Id)) { // Get the list of processes: - itemProcesses = processMgr.GetProcessesForItem(Sbm.ItemType.Asset, Id, false); + itemProcesses = internals.ProcessMgr.GetProcessesForItem(Sbm.ItemType.Asset, Id, false); } // Copy the list. itemProcesesCopy = new List(itemProcesses); @@ -213,7 +175,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); SbmAsset asset = null; - if (!processMgr.StoreItemProcesses(Sbm.ItemType.Asset, Id, itemProcesses, userContext.DbUpdateInfo)) + if (!internals.ProcessMgr.StoreItemProcesses(Sbm.ItemType.Asset, Id, itemProcesses, internals.DbUpdateInfo)) { // Make a note of the 'Next' process. SbmItemProcess itemProcessNext = itemProcesses.GetNextProcessInSequence(SaStatus.Awaiting); @@ -221,15 +183,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (ProcessIdNext != itemProcessIdNext) { ProcessIdNext = itemProcessIdNext; - if (assetMgr != null) - { - if (!assetMgr.UpdateAsset(asset, userContext.DbUpdateInfo)) - SetErrorState("Failed to update next process id - " + assetMgr.ErrorState); - } - else SetErrorState("Asset manager is unavailable"); + if (!internals.AssetMgr.UpdateAsset(asset, internals.DbUpdateInfo)) + SetErrorState("Failed to update next process id - " + internals.AssetMgr.ErrorState); } } - SetErrorState(processMgr.ErrorState.ToString()); + SetErrorState(internals.ProcessMgr.ErrorState.ToString()); return !HasErrorState(); } public override bool PopulateDefaultProcesses() @@ -267,7 +225,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus prm.ItemLinkType = Sbm.ItemLinkType.ItemPrice; prm.ItemTypeFrom = Sbm.ItemType.Asset; prm.ItemIdFrom = Id; - foreach (SbmItemLink itemLink in dataItemMgr.GetItemLinkList(prm)) + foreach (SbmItemLink itemLink in internals.DataItemMgr.GetItemLinkList(prm)) if (itemLink != null) return true; } return false; @@ -275,13 +233,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override List GetPrices() { List itemPricesCopy = null; - if (itemPrices == null && SysId.IsValid(Id) && dataItemMgr != null) + if (itemPrices == null && SysId.IsValid(Id)) { SbmItemLink.Params prm = new SbmItemLink.Params(); prm.ItemLinkType = Sbm.ItemLinkType.ItemPrice; prm.ItemTypeFrom = Sbm.ItemType.Asset; prm.ItemIdFrom = Id; - List itemLinks = dataItemMgr.GetItemLinkList(prm); + List itemLinks = internals.DataItemMgr.GetItemLinkList(prm); if (itemLinks != null) { foreach (SbmItemLink itemLink in itemLinks) @@ -314,14 +272,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); // Do not attempt any updates unless the list has been populated: - if (itemPrices != null && SysId.IsValid(Id) && dataItemMgr != null) + if (itemPrices != null && SysId.IsValid(Id)) { // Build an item link list corresponding to the list of prices. List itemLinks = new List(); foreach (SbmItemPrice itemPrice in itemPrices) { if (itemPrice == null) continue; - SbmItemLink itemLink = dataItemMgr.CreateItemLink(Sbm.ItemLinkType.ItemPrice, Sbm.ItemType.Asset, Id, Sbm.ItemType.Unknown, new SysId(0)); + SbmItemLink itemLink = internals.DataItemMgr.CreateItemLink(Sbm.ItemLinkType.ItemPrice, Sbm.ItemType.Asset, Id, Sbm.ItemType.Unknown, new SysId(0)); if (itemLink != null) { itemLink.Seq = (short)itemPrice.CodeSeq; @@ -332,12 +290,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus } } // Store these details. - if (dataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.ItemPrice, Sbm.ItemType.Asset, Id, itemLinks, userContext.DbUpdateInfo)) + if (internals.DataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.ItemPrice, Sbm.ItemType.Asset, Id, itemLinks, internals.DbUpdateInfo)) { } else { - SetErrorState("Failed to save asset price item links - " + dataItemMgr.ErrorState); + SetErrorState("Failed to save asset price item links - " + internals.DataItemMgr.ErrorState); } if (itemLinks != null) itemLinks.Clear(); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmAssociation_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmAssociation_Dbas.cs index 71ce3d1..f6380d1 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmAssociation_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmAssociation_Dbas.cs @@ -13,20 +13,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmAssociation_Dbas(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget, ushort flags) : - base(userContext, id, affiliateIdOwner, associationType, affiliateIdTarget) + public SbmAssociation_Dbas(SbmInternals internals, SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget, ushort flags) : + base(internals.UserContext, id, affiliateIdOwner, associationType, affiliateIdTarget) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -42,7 +43,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasTransactions() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_AssocId) + "=" + Id.ToString(); @@ -53,7 +54,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasRequirements() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_AssocId) + "=" + Id.ToString(); @@ -64,7 +65,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasConstituents() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_AssocId) + "=" + Id.ToString(); @@ -76,7 +77,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { // Is associated with transaction for delivery. if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_AssIdDeliver) + "=" + Id.ToString(); @@ -89,16 +90,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus ClearErrorState(); if (!SysId.IsValid(Id)) return false; if (SbmGlobals.System == null) return SetErrorState("System is not available"); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) return SetErrorState("Database is not available"); // Delete interface data items. if (!HasErrorState()) { - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Association, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Association, Id), internals.DbUpdateInfo)) SetErrorState("Failed to clear interface data items - " + interfaceConsole.ErrorState); } else SetErrorState("failed to initialise interface console"); @@ -119,13 +120,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus // Remove data item references. if (!HasErrorState()) { - SbmDataItemMgr dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); - if (dataItemMgr != null) - { - if (!dataItemMgr.ClearDataItem(Sbm.ItemType.Association, Id)) - SetErrorState(dataItemMgr.ErrorState.ToString()); - } - else SetErrorState("Data item manager is not available"); + if (!internals.DataItemMgr.ClearDataItem(Sbm.ItemType.Association, Id)) + SetErrorState(internals.DataItemMgr.ErrorState.ToString()); } return !HasErrorState(); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodityCustomer_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodityCustomer_Dbas.cs index a97250b..88710b8 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodityCustomer_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodityCustomer_Dbas.cs @@ -9,20 +9,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmCommodityCustomer_Dbas(SbmUserContext userContext, SysId commodityId, SysId assocIdCustomer, ushort flags) : - base(userContext, commodityId, assocIdCustomer) + public SbmCommodityCustomer_Dbas(SbmInternals internals, SysId commodityId, SysId assocIdCustomer, ushort flags) : + base(internals.UserContext, commodityId, assocIdCustomer) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmCommoditySupplier_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmCommoditySupplier_Dbas.cs index 38c73db..3034bb9 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmCommoditySupplier_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmCommoditySupplier_Dbas.cs @@ -9,20 +9,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmCommoditySupplier_Dbas(SbmUserContext userContext, SysId commodityId, SysId assocIdSupplier, ushort flags) : - base(userContext, commodityId, assocIdSupplier) + public SbmCommoditySupplier_Dbas(SbmInternals internals, SysId commodityId, SysId assocIdSupplier, ushort flags) : + base(internals.UserContext, commodityId, assocIdSupplier) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodity_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodity_Dbas.cs index ee5b99a..0891e08 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodity_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmCommodity_Dbas.cs @@ -18,28 +18,23 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private SbmDataItemMgr dataItemMgr; - private SbmProcessMgr processMgr; - private SbmTransactionMgr transactionMgr; + private readonly SbmInternals internals; private List costEstimates = new List(); private List itemProcesses = new List(); //------------------------------------------------------------------- // Construction. - public SbmCommodity_Dbas(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code, ushort flags) : - base(userContext, id, affiliateIdOwner, commodityType, code) + public SbmCommodity_Dbas(SbmInternals internals, SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code, ushort flags) : + base(internals.UserContext, id, affiliateIdOwner, commodityType, code) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { - if (transactionMgr != null) transactionMgr.Dispose(); - if (processMgr != null) processMgr.Dispose(); - if (dataItemMgr != null) dataItemMgr.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -47,27 +42,6 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus //------------------------------------------------------------------- // Properties. - //------------------------------------------------------------------- - // Internal Processing. - public bool InitDataItemMgr() - { - if (dataItemMgr == null) - dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); - return dataItemMgr != null; - } - public bool InitProcMgr() - { - if (processMgr == null) - processMgr = SbmGlobals.System.CreateProcessMgr(userContext); - return processMgr != null; - } - public bool InitTransactionMgr() - { - if (transactionMgr == null) - transactionMgr = SbmGlobals.System.CreateTransactionMgr(userContext); - return transactionMgr != null; - } - //------------------------------------------------------------------- // Associated data. //------------------------------------------------------------------- @@ -75,14 +49,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return SetErrorState("invalid item"); - if (processMgr != null) return SetErrorState("process manager not available"); - return processMgr.HasItemProcesses(Sbm.ItemType.Commodity, Id); + return internals.ProcessMgr.HasItemProcesses(Sbm.ItemType.Commodity, Id); } public override bool HasRequirements() { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableRequirement = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement); @@ -95,7 +68,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableCommodity = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity); @@ -113,7 +86,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tablePortfolioItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem); @@ -131,7 +104,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableContainer = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container); @@ -149,7 +122,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasCustomerDetails() { ClearErrorState(); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableCommodityCustomer = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommodityCustomer); @@ -165,7 +138,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasSupplierDetails() { ClearErrorState(); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableCommoditySupplier = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier); @@ -182,7 +155,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableMovement = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement); @@ -201,7 +174,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableStockLevel = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel); @@ -218,26 +191,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null && !HasErrorState()) { if (!HasErrorState()) { // Remove data item references. - if (dataItemMgr != null) - { - if (!dataItemMgr.ClearDataItem(Sbm.ItemType.Commodity, Id)) - SetErrorState(dataItemMgr.ErrorState.ToString()); - } - else SetErrorState("Data item manager is not available"); + if (!internals.DataItemMgr.ClearDataItem(Sbm.ItemType.Commodity, Id)) + SetErrorState(internals.DataItemMgr.ErrorState.ToString()); } if (!HasErrorState()) { // ToDo SaItemDocConsole for Remove document references. - SaItemDocConsole itemDocConsole = SbmGlobals.Application.GetItemDocConsole(userContext); + SaItemDocConsole itemDocConsole = internals.ItemDocConsole; if (itemDocConsole != null) { - if (!itemDocConsole.ClearItemDocs(new ItemId((short)Sbm.ItemType.Commodity, Id), SaItemDocConsole.Category.Document, userContext.DbUpdateInfo)) + if (!itemDocConsole.ClearItemDocs(new ItemId((short)Sbm.ItemType.Commodity, Id), SaItemDocConsole.Category.Document, internals.DbUpdateInfo)) SetErrorState(itemDocConsole.ErrorState.ToString()); } else SetErrorState("Failed to retrieve item document console"); @@ -246,10 +215,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (!HasErrorState()) { // Remove interface references. - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Commodity, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Commodity, Id), internals.DbUpdateInfo)) SetErrorState(interfaceConsole.ErrorState.ToString()); } else SetErrorState("Failed to retrieve interface console"); @@ -281,11 +250,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //ClearErrorState(); List costEstimatesCopy = null; - if (costEstimates == null && SysId.IsValid(Id) && dataItemMgr != null) + if (costEstimates == null && SysId.IsValid(Id)) { //*************************************************************** // 15-Dec MPE Fix - Commodity cost estimates were stored as requirement cost estimates. Here we convert the data for this commodity. - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null /*&& SbmGlobals.GetConsole().GetVersion().GetName() == "MPE" && Id.ToInt() < 6000*/) { String colItemLink_Type = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_Type); @@ -315,7 +284,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus prmItemLink.ItemLinkType = Sbm.ItemLinkType.ItemCostEstimate; prmItemLink.ItemTypeFrom = Sbm.ItemType.Commodity; prmItemLink.ItemIdFrom = Id; - List itemLinks = dataItemMgr.GetItemLinkList(prmItemLink); + List itemLinks = internals.DataItemMgr.GetItemLinkList(prmItemLink); if (itemLinks != null) { foreach (SbmItemLink itemLink in itemLinks) @@ -346,14 +315,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool CommitCostEstimates() { ClearErrorState();// Do not attempt any updates unless the list has been populated. - if (costEstimates != null && SysId.IsValid(Id) && dataItemMgr != null) + if (costEstimates != null && SysId.IsValid(Id)) { // Build an item link list corresponding to the list of cost estimates. List itemLinks = new List(); foreach (SbmCostEstimate costEstimate in costEstimates) { if (costEstimate == null) continue; - SbmItemLink itemLink = dataItemMgr.CreateItemLink(Sbm.ItemLinkType.ItemCostEstimate, Sbm.ItemType.Commodity, Id, Sbm.ItemType.Unknown, new SysId()); + SbmItemLink itemLink = internals.DataItemMgr.CreateItemLink(Sbm.ItemLinkType.ItemCostEstimate, Sbm.ItemType.Commodity, Id, Sbm.ItemType.Unknown, new SysId()); if (itemLink != null) { itemLink.Seq = (short)costEstimate.CodeSeq; @@ -364,12 +333,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus } } // Store these details. - if (dataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.ItemCostEstimate, Sbm.ItemType.Commodity, Id, itemLinks, userContext.DbUpdateInfo)) + if (internals.DataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.ItemCostEstimate, Sbm.ItemType.Commodity, Id, itemLinks, internals.DbUpdateInfo)) { } else { - SetErrorState("Failed to save cost estimate item links - " + dataItemMgr.ErrorState); + SetErrorState("Failed to save cost estimate item links - " + internals.DataItemMgr.ErrorState); } if (itemLinks != null) itemLinks.Clear(); @@ -386,15 +355,15 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (activeOnly) { // Retrieve the list of 'active' processes for this item. - processMgr.GetProcessesForItem(Sbm.ItemType.Commodity, Id, true); + internals.ProcessMgr.GetProcessesForItem(Sbm.ItemType.Commodity, Id, true); } else { // Full list required - check whether the internal list has been populated yet. - if (itemProcesses == null && SysId.IsValid(Id) && processMgr != null) + if (itemProcesses == null && SysId.IsValid(Id)) { // Get the list of processes. - processMgr.GetProcessesForItem(Sbm.ItemType.Commodity, Id, false); + internals.ProcessMgr.GetProcessesForItem(Sbm.ItemType.Commodity, Id, false); } // Clone the list. itemProcesesCopy = itemProcesses.Clone(); @@ -413,8 +382,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool CommitProcesses() { ClearErrorState(); - if (!processMgr.StoreItemProcesses(Sbm.ItemType.Commodity, Id, itemProcesses, userContext.DbUpdateInfo)) - SetErrorState(processMgr.ErrorState.ToString()); + if (!internals.ProcessMgr.StoreItemProcesses(Sbm.ItemType.Commodity, Id, itemProcesses, internals.DbUpdateInfo)) + SetErrorState(internals.ProcessMgr.ErrorState.ToString()); return !HasErrorState(); } } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmConstituent_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmConstituent_Dbas.cs index d591ce6..b03f194 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmConstituent_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmConstituent_Dbas.cs @@ -11,20 +11,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmConstituent_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, SysId assocId, Sbm.ConstituentType constituentType, ushort flags) : - base(userContext, id, affIdOwner, assocId, constituentType) + public SbmConstituent_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, SysId assocId, Sbm.ConstituentType constituentType, ushort flags) : + base(internals.UserContext, id, affIdOwner, assocId, constituentType) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -37,7 +38,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasConstituents() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(internals.SessionContext); if (db != null) { String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_ConstId) + "=" + Id.ToString(); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmContainerItem_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmContainerItem_Dbas.cs index 24824b0..06bf04f 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmContainerItem_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmContainerItem_Dbas.cs @@ -9,23 +9,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmContainerItem_Dbas(SbmUserContext userContext, SysId containerId, Sbm.ItemType itemType, SysId itemId, ushort flags) : - base(userContext, containerId, itemType, itemId) + public SbmContainerItem_Dbas(SbmInternals internals, SysId containerId, Sbm.ItemType itemType, SysId itemId, ushort flags) : + base(internals.UserContext, containerId, itemType, itemId) { - this.userContext = userContext; - ContainerId = containerId; - ItemType = itemType; - ItemId = itemId; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmContainer_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmContainer_Dbas.cs index c7c6a2f..33e33a4 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmContainer_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmContainer_Dbas.cs @@ -15,24 +15,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmContainer_Dbas(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType, ushort flags) : - base(userContext, id, affiliateIdOwner, containerCategory, containerType) + public SbmContainer_Dbas(SbmInternals internals, SysId id, SysId affiliateIdOwner, Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType, ushort flags) : + base(internals.UserContext, id, affiliateIdOwner, containerCategory, containerType) { - this.userContext = userContext; - Id = id; - AffiliateIdOwner = affiliateIdOwner; - ContainerCategory = containerCategory; - ContainerType = containerType; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -46,7 +43,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableContainItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem); @@ -63,7 +60,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableMovement = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement); @@ -81,7 +78,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableMovement = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmItemBatch_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmItemBatch_Dbas.cs index d2b63bd..22f84ce 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmItemBatch_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmItemBatch_Dbas.cs @@ -10,20 +10,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmItemBatch_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, Sbm.ItemBatchType itemBatchType, String reference, ushort flags) : - base(userContext, id, affIdOwner, itemBatchType, reference) + public SbmItemBatch_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, Sbm.ItemBatchType itemBatchType, String reference, ushort flags) : + base(internals.UserContext, id, affIdOwner, itemBatchType, reference) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmItemLink_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmItemLink_Dbas.cs index a9ffeb2..6880250 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmItemLink_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmItemLink_Dbas.cs @@ -9,20 +9,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmItemLink_Dbas(SbmUserContext userContext, SysId id, Sbm.ItemLinkType itemLinkType, Sbm.ItemType itemTypeFrom, SysId itemIdFrom, Sbm.ItemType itemTypeTo, SysId itemIdTo, ushort flags) : - base(userContext, id, itemLinkType, itemTypeFrom, itemIdFrom, itemTypeTo, itemIdTo) + public SbmItemLink_Dbas(SbmInternals internals, SysId id, Sbm.ItemLinkType itemLinkType, Sbm.ItemType itemTypeFrom, SysId itemIdFrom, Sbm.ItemType itemTypeTo, SysId itemIdTo, ushort flags) : + base(internals.UserContext, id, itemLinkType, itemTypeFrom, itemIdFrom, itemTypeTo, itemIdTo) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmItemProcess_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmItemProcess_Dbas.cs index 9b422c6..37fa88b 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmItemProcess_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmItemProcess_Dbas.cs @@ -9,20 +9,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmItemProcess_Dbas(SbmUserContext userContext, Sbm.ItemType itemType, SysId itemId, SysId processId, ushort flags) : - base(userContext, itemType, itemId, processId) + public SbmItemProcess_Dbas(SbmInternals internals, Sbm.ItemType itemType, SysId itemId, SysId processId, ushort flags) : + base(internals.UserContext, itemType, itemId, processId) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmLocation_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmLocation_Dbas.cs index 0573958..9909627 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmLocation_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmLocation_Dbas.cs @@ -14,20 +14,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmLocation_Dbas(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.LocationCategory locationCategory, ushort flags) : - base(userContext, id, affiliateIdOwner, locationCategory) + public SbmLocation_Dbas(SbmInternals internals, SysId id, SysId affiliateIdOwner, Sbm.LocationCategory locationCategory, ushort flags) : + base(internals.UserContext, id, affiliateIdOwner, locationCategory) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -41,7 +42,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableMovement = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement); @@ -58,7 +59,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableStockLevel = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.StockLevel); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmMovement_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmMovement_Dbas.cs index c27d9e9..bcce7f8 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmMovement_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmMovement_Dbas.cs @@ -9,14 +9,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmMovement_Dbas(SbmUserContext userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.MovementType movementType, ushort flags) : - base(userContext, id, itemType, itemId, movementType) + public SbmMovement_Dbas(SbmInternals internals, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.MovementType movementType, ushort flags) : + base(internals.UserContext, id, itemType, itemId, movementType) { - this.userContext = userContext; + this.internals = internals; Id = id; MovementType = movementType; Flags = flags; @@ -25,6 +25,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmPortfolioItem_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmPortfolioItem_Dbas.cs index 0584cfa..d7b26a8 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmPortfolioItem_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmPortfolioItem_Dbas.cs @@ -16,20 +16,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmPortfolioItem_Dbas(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType, ushort flags) : - base(userContext, id, affiliateIdOwner, portfolioItemType) + public SbmPortfolioItem_Dbas(SbmInternals internals, SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType, ushort flags) : + base(internals.UserContext, id, affiliateIdOwner, portfolioItemType) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -47,7 +48,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return 0; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tablePortfolioItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem); @@ -66,7 +67,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tablePortfolioItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.PortfolioItem); @@ -109,7 +110,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (!dataItemMgr.ClearDataItem(Sbm.ItemType.PortfolioItem, Id)) return SetErrorState(dataItemMgr.ErrorStateMessage); } - SaItemDocConsole itemDocConsole = SbmGlobals.GetItemDocConsole(UserContext); + SaItemDocConsole itemDocConsole = internals.ItemDocConsole; if (!itemDocConsole.ClearItemDocs(new ItemId((short)Sbm.ItemType.PortfolioItem, Id), SaItemDocConsole.Category.Unknown, UserContext.DbUpdateInfo)) return SetErrorState(itemDocConsole.ErrorStateMessage); return true; diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmPriceSet_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmPriceSet_Dbas.cs index d30bdd1..1136408 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmPriceSet_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmPriceSet_Dbas.cs @@ -15,22 +15,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private SbmPriceMgr priceMgr; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmPriceSet_Dbas(SbmUserContext userContext, SysId id, SysId affiliateIdOwner, String reference, Sbm.PriceType priceType, ushort flags) : - base(userContext, id, affiliateIdOwner, reference, priceType) + public SbmPriceSet_Dbas(SbmInternals internals, SysId id, SysId affiliateIdOwner, String reference, Sbm.PriceType priceType, ushort flags) : + base(internals.UserContext, id, affiliateIdOwner, reference, priceType) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { - if (priceMgr != null) priceMgr.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -38,23 +37,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus //------------------------------------------------------------------- // Properties. - //------------------------------------------------------------------- - // Internal Processing. - public bool InitPriceMgr() - { - if (priceMgr == null) - priceMgr = SbmGlobals.System.CreatePriceMgr(userContext); - return (priceMgr != null); - } - //------------------------------------------------------------------- // Associated data. public override bool HasPrices() { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - InitPriceMgr(); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tablePrice = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaPrice); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmPrice_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmPrice_Dbas.cs index eb9d01e..02282a1 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmPrice_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmPrice_Dbas.cs @@ -9,20 +9,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmPrice_Dbas(SbmUserContext userContext, SysId priceSetId, SysId commodityId, Sbm.PriceType priceType, ushort flags) : - base(userContext, priceSetId, commodityId, priceType) + public SbmPrice_Dbas(SbmInternals internals, SysId priceSetId, SysId commodityId, Sbm.PriceType priceType, ushort flags) : + base(internals.UserContext, priceSetId, commodityId, priceType) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmProcess_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmProcess_Dbas.cs index 3e23003..8345d9b 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmProcess_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmProcess_Dbas.cs @@ -16,42 +16,30 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private SaItemDataConsole itemDataConsole; - private SbmDataItemMgr dataItemMgr; + private readonly SbmInternals internals; private readonly List itemDataTypes; private static readonly String codeDelim = ","; //------------------------------------------------------------------- // Construction. - public SbmProcess_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, Sbm.ProcessCategory processCategory, ushort flags) : - base(userContext, id, affIdOwner, processCategory) + public SbmProcess_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, Sbm.ProcessCategory processCategory, ushort flags) : + base(internals.UserContext, id, affIdOwner, processCategory) { - this.userContext = userContext; - itemDataTypes = SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.ItemDataType); + this.internals = internals; + itemDataTypes = SbmSystem.GetCodesOfType(internals.UserContext, Sbm.SystemCode.ItemDataType); Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { - if (dataItemMgr != null) dataItemMgr.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } //------------------------------------------------------------------- // Properties. - private SbmDataItemMgr DataItemMgr { get { if (dataItemMgr == null) dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); return dataItemMgr; } } - - //------------------------------------------------------------------- - // I n i t i a l i s a t i o n - //------------------------------------------------------------------- - private void InitItemDataConsole() - { - if (itemDataConsole == null) - itemDataConsole = SbmGlobals.Application.GetItemDataConsole(userContext); - } //------------------------------------------------------------------- // Associated codes. @@ -69,8 +57,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasCostCodes() { ClearErrorState(); - InitItemDataConsole(); - if (itemDataConsole == null || !SysId.IsValid(Id)) return false; + if (!SysId.IsValid(Id)) return false; SaItemData.Params prmItemData = new SaItemData.Params(); prmItemData.IncludedItemIds.Add(new ItemId((short)Sbm.ItemType.Process, Id)); @@ -78,13 +65,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus prmItemData.IncludedDataTypes.Add(GetCodeForCostCode(SbmProcessCostCode.Fixed_Job)); prmItemData.IncludedDataTypes.Add(GetCodeForCostCode(SbmProcessCostCode.Labour_Unit)); prmItemData.IncludedDataTypes.Add(GetCodeForCostCode(SbmProcessCostCode.Labour_Job)); - return itemDataConsole.ItemDataExists(prmItemData); + return internals.ItemDataConsole.ItemDataExists(prmItemData); } public override bool HasCostCodes(SbmProcessCostCode processCostCode) { ClearErrorState(); - InitItemDataConsole(); - if (itemDataConsole == null || !SysId.IsValid(Id)) return false; + if (!SysId.IsValid(Id)) return false; bool bHas = false; // Identify process code type code. String itemDataTypeCode = GetCodeForCostCode(processCostCode); @@ -93,7 +79,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus SaItemData.Params prmItemData = new SaItemData.Params(); prmItemData.IncludedItemIds.Add(new ItemId((short)Sbm.ItemType.Process, Id)); prmItemData.IncludedDataTypes.Add(itemDataTypeCode); - bHas = itemDataConsole.ItemDataExists(prmItemData); + bHas = internals.ItemDataConsole.ItemDataExists(prmItemData); } return bHas; } @@ -103,13 +89,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus ClearErrorState(); // Identify process code type code. String itemDataTypeCode = GetCodeForCostCode(processCostCode); - InitItemDataConsole(); - if (itemDataConsole != null || !SysId.IsValid(Id) && !StringUtil.IsEmpty(itemDataTypeCode)) + if (!SysId.IsValid(Id) && !StringUtil.IsEmpty(itemDataTypeCode)) { SaItemData.Params prmItemData = new SaItemData.Params(); prmItemData.IncludedItemIds.Add(new ItemId((short)Sbm.ItemType.Process, Id)); prmItemData.IncludedDataTypes.Add(itemDataTypeCode); - List itemDatas = itemDataConsole.GetItemDataList(prmItemData); + List itemDatas = internals.ItemDataConsole.GetItemDataList(prmItemData); foreach (SaItemData itemData in itemDatas) { if (itemData == null) continue; @@ -126,13 +111,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (StringUtil.IsEmpty(costCodes.Concat(codeDelim))) return ClearCostCodes(processCostCode); // Identify process code type code. String itemDataTypeCode = GetCodeForCostCode(processCostCode); - InitItemDataConsole(); - if (itemDataConsole != null || !SysId.IsValid(Id) && !StringUtil.IsEmpty(itemDataTypeCode)) + if (!SysId.IsValid(Id) && !StringUtil.IsEmpty(itemDataTypeCode)) { SaItemData.Params prmItemData = new SaItemData.Params(); prmItemData.IncludedItemIds.Add(new ItemId((short)Sbm.ItemType.Process, Id)); prmItemData.IncludedDataTypes.Add(itemDataTypeCode); - List itemDatas = itemDataConsole.GetItemDataList(prmItemData); + List itemDatas = internals.ItemDataConsole.GetItemDataList(prmItemData); // ToDo itemData condition. //itemDatas.GotoStart(); SaItemData itemData = null;//itemDatas.Count == 1 ? itemDatas.Remove(1) : null; @@ -140,16 +124,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (itemData == null) { // Code type not found - create a new entry. - itemData = itemDataConsole.CreateItemData(new ItemId((short)Sbm.ItemType.Process, Id)); + itemData = internals.ItemDataConsole.CreateItemData(new ItemId((short)Sbm.ItemType.Process, Id)); itemData.DataType = itemDataTypeCode; } if (itemData != null) { // Populate item data for these codes. itemData.ItemData = costCodes.Concat(codeDelim); - if (!itemDataConsole.Store(itemData, userContext.DbUpdateInfo)) + if (!internals.ItemDataConsole.Store(itemData, internals.DbUpdateInfo)) { - SetErrorState(itemDataConsole.ErrorStateMessage); + SetErrorState(internals.ItemDataConsole.ErrorStateMessage); } } } @@ -160,12 +144,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus ClearErrorState(); // Identify process code type code. String itemDataTypeCode = GetCodeForCostCode(processCostCode); - InitItemDataConsole(); - if (itemDataConsole != null || !SysId.IsValid(Id) && !StringUtil.IsEmpty(itemDataTypeCode)) + if (!SysId.IsValid(Id) && !StringUtil.IsEmpty(itemDataTypeCode)) { - if (!itemDataConsole.ClearItemData(new ItemId((short)Sbm.ItemType.Process, Id), itemDataTypeCode, userContext.DbUpdateInfo)) + if (!internals.ItemDataConsole.ClearItemData(new ItemId((short)Sbm.ItemType.Process, Id), itemDataTypeCode, internals.DbUpdateInfo)) { - SetErrorState(itemDataConsole.ErrorStateMessage); + SetErrorState(internals.ItemDataConsole.ErrorStateMessage); } } return !HasErrorState(); @@ -181,9 +164,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasReferences() { if (!SysId.IsValid(Id)) return false; - if (DataItemMgr.HasItemLinks(Sbm.ItemType.Process, Id)) return true; + if (internals.DataItemMgr.HasItemLinks(Sbm.ItemType.Process, Id)) return true; // Is this process referenced by Constituents. - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); if (db != null) return true; + ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(internals.SessionContext); if (db != null) return true; // Constituents. String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Id) + "=" + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_ProcessId) + "=" + Id.ToString(); @@ -192,29 +175,24 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasItemData() { ClearErrorState(); - InitItemDataConsole(); - if (itemDataConsole == null || !SysId.IsValid(Id)) return false; + if (!SysId.IsValid(Id)) return false; SaItemData.Params prmItemData = new SaItemData.Params(); prmItemData.IncludedItemIds.Add(new ItemId((short)Sbm.ItemType.Process, Id)); - return itemDataConsole.ItemDataExists(prmItemData); + return internals.ItemDataConsole.ItemDataExists(prmItemData); } public override bool ClearAssociatedData() { ClearErrorState(); if (!SysId.IsValid(Id)) return SetErrorState("item not specified"); // Clear Item data records. - InitItemDataConsole(); - if (itemDataConsole != null) + SaItemData.Params prmItemData = new SaItemData.Params(); + prmItemData.IncludedItemIds.Add(new ItemId((short)Sbm.ItemType.Process, Id)); + List itemDatas = internals.ItemDataConsole.GetItemDataList(prmItemData); + foreach (SaItemData itemData in itemDatas) { - SaItemData.Params prmItemData = new SaItemData.Params(); - prmItemData.IncludedItemIds.Add(new ItemId((short)Sbm.ItemType.Process, Id)); - List itemDatas = itemDataConsole.GetItemDataList(prmItemData); - foreach (SaItemData itemData in itemDatas) - { - itemDataConsole.Remove(itemData, userContext.DbUpdateInfo); - } - itemDatas.Clear(); + internals.ItemDataConsole.Remove(itemData, internals.DbUpdateInfo); } + itemDatas.Clear(); return !HasErrorState(); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmRequirement_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmRequirement_Dbas.cs index cffd9b5..619396c 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmRequirement_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmRequirement_Dbas.cs @@ -16,75 +16,32 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private class Managers - { - public SbmDataItemMgr DataItemMgr { get; set; } - public SbmProcessMgr ProcessMgr { get; set; } - public SbmStockMgr StockMgr { get; set; } - public SbmTransactionMgr TransactionMgr { get; set; } - } - private readonly Managers mgrs = new Managers(); + private readonly SbmInternals internals; private readonly String statusCancelled = SacsSystem.GetStatusCode(SaStatus.Cancelled); //------------------------------------------------------------------- // Construction. - public SbmRequirement_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, SysId assocId, SysId transId, Sbm.RequirementType requirementType, ushort flags) : - base(userContext, id, affIdOwner, assocId, transId, requirementType) + public SbmRequirement_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, SysId assocId, SysId transId, Sbm.RequirementType requirementType, ushort flags) : + base(internals.UserContext, id, affIdOwner, assocId, transId, requirementType) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { - if (mgrs.StockMgr != null) mgrs.StockMgr.Dispose(); - if (mgrs.TransactionMgr != null) mgrs.TransactionMgr.Dispose(); - if (mgrs.ProcessMgr != null) mgrs.ProcessMgr.Dispose(); - if (mgrs.DataItemMgr != null) mgrs.DataItemMgr.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } //------------------------------------------------------------------- // Properties. - private SbmTransactionMgr TransactionMgr - { - get - { - if (mgrs.TransactionMgr == null) - mgrs.TransactionMgr = SbmGlobals.System.CreateTransactionMgr(userContext); - return mgrs.TransactionMgr; - } - } - private SbmDataItemMgr DataItemMgr - { - get - { - if (mgrs.DataItemMgr == null) - mgrs.DataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); - return mgrs.DataItemMgr; - } - } - private SbmProcessMgr ProcessMgr - { - get - { - if (mgrs.ProcessMgr == null) - mgrs.ProcessMgr = SbmGlobals.System.CreateProcessMgr(userContext); - return mgrs.ProcessMgr; - } - } - private SbmStockMgr StockMgr - { - get - { - if (mgrs.StockMgr == null) - mgrs.StockMgr = SbmGlobals.System.CreateStockMgr(userContext); - return mgrs.StockMgr; - } - } + private SbmTransactionMgr TransactionMgr { get { return internals.TransactionMgr; } } + private SbmDataItemMgr DataItemMgr { get { return internals.DataItemMgr; } } + private SbmProcessMgr ProcessMgr { get { return internals.ProcessMgr; } } + private SbmStockMgr StockMgr { get { return internals.StockMgr; } } //------------------------------------------------------------------- // Associated data. @@ -148,7 +105,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus } public override decimal GetQuantityDispatched(SysId transIdExclude) { - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (SysId.IsValid(Id)) { // Build query to sum associated dispatch item quantities. @@ -179,7 +136,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus //------------------------------------------------------------------- public override decimal GetQuantityInvoiced(SysId transIdExclude) { - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (SysId.IsValid(Id)) { // Build query to sum associated dispatch item quantities. @@ -263,7 +220,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus } } // Store these details. - if (!DataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.Requirement_CostEstimate, Sbm.ItemType.Requirement, Id, itemLinks, userContext.DbUpdateInfo)) + if (!DataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.Requirement_CostEstimate, Sbm.ItemType.Requirement, Id, itemLinks, internals.DbUpdateInfo)) SetErrorState("Failed to save cost estimate item links - " + DataItemMgr.ErrorState); if (itemLinks != null) itemLinks.Clear(); @@ -319,7 +276,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { // Update the details. CopyFrom(itemProcessLocal, constituent); - if (TransactionMgr.UpdateConstituent(constituent, userContext.DbUpdateInfo)) + if (TransactionMgr.UpdateConstituent(constituent, internals.DbUpdateInfo)) itemProcessLocal.Changed = false; else SetErrorState("failed to update process constituent"); } @@ -330,7 +287,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { // Process no longer required. constituent.Status = SaStatus.Cancelled; - if (!TransactionMgr.DeleteConstituent(constituent, userContext.DbUpdateInfo)) + if (!TransactionMgr.DeleteConstituent(constituent, internals.DbUpdateInfo)) SetErrorState("failed to delete process constituent"); } } @@ -347,7 +304,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus constituent.RequirementId = Id; CopyFrom(itemprocess, constituent); // Add it to the database: - if (TransactionMgr.InsertConstituent(constituent, userContext.DbUpdateInfo)) + if (TransactionMgr.InsertConstituent(constituent, internals.DbUpdateInfo)) itemprocess.Changed = false; else SetErrorState("failed to add constituent - " + TransactionMgr.ErrorState); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmSysParam_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmSysParam_Dbas.cs index 1d1736c..566b28a 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmSysParam_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmSysParam_Dbas.cs @@ -10,20 +10,23 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmSysParam_Dbas(SbmUserContext userContext, SysId id, Sbm.SysParamCategory category, String name, ushort flags) : - base(userContext, id, category, name) + public SbmSysParam_Dbas(SbmInternals internals, SysId id, Sbm.SysParamCategory category, String name, ushort flags) : + base(internals.UserContext, id, category, name) { - this.userContext = userContext; + this.internals = internals; + if (this.internals != null) { } + Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccountUser_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccountUser_Dbas.cs index 58500fd..3e13f7e 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccountUser_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccountUser_Dbas.cs @@ -9,20 +9,23 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmSystemAccountUser_Dbas(SbmUserContext userContext, SysId accountId, SysId userId, ushort flags) : - base(userContext, accountId, userId) + public SbmSystemAccountUser_Dbas(SbmInternals internals, SysId accountId, SysId userId, ushort flags) : + base(internals.UserContext, accountId, userId) { - this.userContext = userContext; + this.internals = internals; + if (this.internals != null) { } + Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccount_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccount_Dbas.cs index c1969eb..a23042e 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccount_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemAccount_Dbas.cs @@ -14,20 +14,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmSystemAccount_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, Sbm.SystemAccountType systemAccountType, SysId interfaceId, SysId assocId, ushort flags) : - base(userContext, id, affIdOwner, systemAccountType, interfaceId, assocId) + public SbmSystemAccount_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, Sbm.SystemAccountType systemAccountType, SysId interfaceId, SysId assocId, ushort flags) : + base(internals.UserContext, id, affIdOwner, systemAccountType, interfaceId, assocId) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -40,7 +41,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasUsers() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String table = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SystemAccountUser); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemUser_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemUser_Dbas.cs index f58b82f..c1408a9 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemUser_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmSystemUser_Dbas.cs @@ -9,20 +9,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmSystemUser_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, SysId interfaceId, SysId affiliateId, ushort flags) : - base(userContext, id, affIdOwner, interfaceId, affiliateId) + public SbmSystemUser_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, SysId interfaceId, SysId affiliateId, ushort flags) : + base(internals.UserContext, id, affIdOwner, interfaceId, affiliateId) { - this.userContext = userContext; + this.internals = internals; + if (this.internals != null) { } Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmTransaction_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmTransaction_Dbas.cs index 30bc6e9..705bb11 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmTransaction_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmTransaction_Dbas.cs @@ -18,12 +18,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; - private SbmAccountMgr accountMgr; - private SbmDataItemMgr dataItemMgr; - private SbmStockMgr stockMgr; - private SbmTransactionMgr transactionMgr; - private SbmAccountsDfn accountDfn = null; + private readonly SbmInternals internals; private List transactionPayments = new List(); private readonly List transactionTypes; private readonly List transactionStatusCats; @@ -33,24 +28,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus //------------------------------------------------------------------- // Construction. - public SbmTransaction_Dbas(SbmUserContext userContext, SysId id, SysId affIdOwner, SysId assocId, Sbm.TransactionType transactionType, ushort flags) : - base(userContext, id, affIdOwner, assocId, transactionType) + public SbmTransaction_Dbas(SbmInternals internals, SysId id, SysId affIdOwner, SysId assocId, Sbm.TransactionType transactionType, ushort flags) : + base(internals.UserContext, id, affIdOwner, assocId, transactionType) { - this.userContext = userContext; - transactionTypes = SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.TransactionType); - transactionStatusCats = SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.TransactionStatusCat); - requirementStatusCats = SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.RequirementStatusCat); - constituentStatusCats = SbmSystem.GetCodesOfType(userContext, Sbm.SystemCode.ConstituentStatusCat); + this.internals = internals; + transactionTypes = internals.GetCodesOfType(Sbm.SystemCode.TransactionType); + transactionStatusCats = internals.GetCodesOfType(Sbm.SystemCode.TransactionStatusCat); + requirementStatusCats = internals.GetCodesOfType(Sbm.SystemCode.RequirementStatusCat); + constituentStatusCats = internals.GetCodesOfType(Sbm.SystemCode.ConstituentStatusCat); Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { - if (accountMgr != null) accountMgr.Dispose(); - if (transactionMgr != null) transactionMgr.Dispose(); - if (dataItemMgr != null) dataItemMgr.Dispose(); - if (accountDfn != null) accountDfn.Dispose(); + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -68,12 +60,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus // Transaction can't be updated after it has been exporetd to an accounts system. if (!bReadOnly) { - if (accountDfn == null) accountDfn = new SbmAccountsDfn(userContext); - if (accountDfn != null) - { - if (accountDfn.IsTransactionTypeManagedByAccounts(TransactionType)) - bReadOnly = true; - } + if (internals.AccountsDfn.IsTransactionTypeManagedByAccounts(TransactionType)) + bReadOnly = true; } return bReadOnly; } @@ -97,7 +85,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (TransactionStatusCat == SbmTransaction.StatusCat.Closed) { // Once the 'grace' period has passed, only the status can be modified. - int graceDaysUpdateClosedTrans = Math.Max(0, userContext.GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodDays.UpdateClosedTransaction, 0)); + int graceDaysUpdateClosedTrans = Math.Max(0, internals.UserContext.GetOwnerOption_UpdateLimit(Sbm.OrgOption_PeriodDays.UpdateClosedTransaction, 0)); DateTime closed = Closed; detailsAreReadOnly = (DateUtil.IsValid(closed) && closed <= DateTime.Today.AddDays(-graceDaysUpdateClosedTrans)); } @@ -106,40 +94,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus return detailsAreReadOnly; } - //------------------------------------------------------------------- - // Internal Processing. - public bool InitAccountMgr() - { - if (accountMgr == null) - accountMgr = SbmGlobals.System.CreateAccountMgr(userContext); - return (accountMgr != null); - } - public bool InitDataItemMgr() - { - if (dataItemMgr == null) - dataItemMgr = SbmGlobals.System.CreateDataItemMgr(userContext); - return (dataItemMgr != null); - } - public bool InitStockMgr() - { - if (stockMgr == null) - stockMgr = SbmGlobals.System.CreateStockMgr(userContext); - return (stockMgr != null); - } - public bool InitTransactionMgr() - { - if (transactionMgr == null) - transactionMgr = SbmGlobals.System.CreateTransactionMgr(userContext); - return (transactionMgr != null); - } - //------------------------------------------------------------------- // Associated data. public override bool IsReferencedByOtherTransactions() { ClearErrorState(); - InitTransactionMgr(); - return transactionMgr.TransactionIsReferencedByOtherTransactions(Id); + return internals.TransactionMgr.TransactionIsReferencedByOtherTransactions(Id); } public override bool HasRequirements(SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.NotDeleted) { @@ -148,26 +108,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasConstituents(SbmConstituent.StatusCat constituentStatusCat = SbmConstituent.StatusCat.NotDeleted) { ClearErrorState(); - InitTransactionMgr(); - return transactionMgr.TransactionHasConstituents(Id, constituentStatusCat); + return internals.TransactionMgr.TransactionHasConstituents(Id, constituentStatusCat); } public override bool HasContainerItems() { ClearErrorState(); - InitTransactionMgr(); - return transactionMgr.TransactionHasContainerItems(Id); + return internals.TransactionMgr.TransactionHasContainerItems(Id); } public override bool HasStockMovements() { ClearErrorState(); - InitTransactionMgr(); - return transactionMgr.TransactionHasStockMovements(Id); + return internals.TransactionMgr.TransactionHasStockMovements(Id); } public override bool HasPendingStockMovements() { ClearErrorState(); - InitTransactionMgr(); - return transactionMgr.TransactionHasPendingStockMovements(Id); + return internals.TransactionMgr.TransactionHasPendingStockMovements(Id); } public override bool HasDiaryLinks() { @@ -182,7 +138,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return 0; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { List filter = new List(); @@ -198,21 +154,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus } public override List GetRequirements(SbmRequirement.StatusCat requirementStatusCat = SbmRequirement.StatusCat.Any) { - if (SysId.IsValid(Id) && InitTransactionMgr()) + if (SysId.IsValid(Id)) { // Retrieve the current set of requirements for this transaction. SbmRequirement.Params prmRequirement = new SbmRequirement.Params(); //prmRequirement.RequirementStatusCat = requirementStatusCat; prmRequirement.TransIncludedIds.Add(Id); - return transactionMgr.GetRequirementList(prmRequirement); + return internals.TransactionMgr.GetRequirementList(prmRequirement); } return new List(); } public override bool ItemsRequireJobNumber() { // Check whether Job Number should be allocated: - SbmConfigConsole configConsole = SbmGlobals.GetConfigConsole(userContext.SessionContext); - if (configConsole != null && configConsole.AllowOption(UserContext, Sbm.ConfigOption.SalesOrderItemJobNumber) && SbmGlobals.Application.ColumnExists(userContext.SessionContext, SbmDbDfn.ColumnIdx.Requirement_JobNumber)) + SbmConfigConsole configConsole = internals.ConfigConsole; + if (configConsole != null && configConsole.AllowOption(UserContext, Sbm.ConfigOption.SalesOrderItemJobNumber) && SbmGlobals.Application.BusMgrColumnExists(internals.SessionContext, SbmDbDfn.ColumnIdx.Requirement_JobNumber)) return TransactionType == Sbm.TransactionType.SalesOrder; return false; } @@ -220,10 +176,9 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { if (this == null) return false; ClearErrorState(); - SacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext) as SacsDatabase; + SacsDatabase db = internals.BusMgrDatabase as SacsDatabase; if (db == null) return SetErrorState("Database not available"); if (!SysId.IsValid(Id)) return SetErrorState("transaction does not exist"); - if (!InitTransactionMgr()) return SetErrorState("requirement manager is not available"); // Verify requirements list. if (!HasErrorState()) { @@ -253,7 +208,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus requirement.TransactionId = Id; if (ItemsRequireJobNumber() && StringUtil.IsEmpty(requirement.JobNumber)) { - String jobNumberNextIdObject = "JobNumber:" + SysId.ToString(userContext.Organisation.AffiliateId); + String jobNumberNextIdObject = "JobNumber:" + SysId.ToString(internals.UserContext.Organisation.AffiliateId); /* // Check for original Job Number 'NextId' key and convert to organisation specific. String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.NextId_Object) + "='JobNumber'"; @@ -264,7 +219,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus db.ExecuteQuery(query); } */ - String jobNumber = SysId.ToString(db.GetNextId(jobNumberNextIdObject, userContext.DbUpdateInfo, false)); + String jobNumber = SysId.ToString(db.GetNextId(jobNumberNextIdObject, internals.UserContext.DbUpdateInfo, false)); requirement.JobNumber = ""; } SetDefaults(requirement); @@ -275,13 +230,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus List requirementsNotUpdated = new List(requirements); // Retrieve each of the requirements currently specified for this transaction in turn. List requirementIdsUpdated = new List(); - if (!HasErrorState() && InitTransactionMgr()) + if (!HasErrorState()) { List columnsQuery = new List(); String colRequirement_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_Id); SbmRequirement.Params prmRequirement = new SbmRequirement.Params(); prmRequirement.TransIncludedIds.Add(Id); - using (DbResultSet dbResultSet = transactionMgr.ExecuteRequirementQuery(columnsQuery, prmRequirement)) + using (DbResultSet dbResultSet = internals.TransactionMgr.ExecuteRequirementQuery(columnsQuery, prmRequirement)) { while (!HasErrorState() && dbResultSet != null && dbResultSet.NextRecord()) { @@ -292,24 +247,24 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { // Requirement still in list - update the details. SbmRequirement requirement = requirementsNotUpdated[0]; - if (transactionMgr.UpdateRequirement(requirement, userContext.DbUpdateInfo)) + if (internals.TransactionMgr.UpdateRequirement(requirement, internals.DbUpdateInfo)) { if (!requirement.CommitAssociatedData()) SetErrorState("Failed to update requirement's data: " + requirement.ErrorState); } - else SetErrorState("Failed to update requirement: " + transactionMgr.ErrorState); + else SetErrorState("Failed to update requirement: " + internals.TransactionMgr.ErrorState); requirementsNotUpdated.Remove(requirement); } else { // Requirement not in list - remove it. - SbmRequirement requirement = transactionMgr.GetRequirement(prmRequirement); + SbmRequirement requirement = internals.TransactionMgr.GetRequirement(prmRequirement); if (requirement != null) { - if (!transactionMgr.DeleteRequirement(requirement, TransactionType, userContext.DbUpdateInfo)) - SetErrorState("Failed to remove requirement: " + transactionMgr.ErrorState); + if (!internals.TransactionMgr.DeleteRequirement(requirement, TransactionType, internals.DbUpdateInfo)) + SetErrorState("Failed to remove requirement: " + internals.TransactionMgr.ErrorState); } - else SetErrorState("Failed to retrieve requirement for deletion: " + transactionMgr.ErrorState); + else SetErrorState("Failed to retrieve requirement for deletion: " + internals.TransactionMgr.ErrorState); } } } @@ -323,12 +278,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (!SysId.IsValid(requirementNotUpdate.Id)) { // Requirement does not yet exist - create it: - if (transactionMgr.InsertRequirement(requirementNotUpdate, userContext.DbUpdateInfo)) + if (internals.TransactionMgr.InsertRequirement(requirementNotUpdate, internals.DbUpdateInfo)) { if (!requirementNotUpdate.CommitAssociatedData()) SetErrorState("Failed to update requirement's data: " + requirementNotUpdate.ErrorState); } - else SetErrorState("Failed to create requirement: " + transactionMgr.ErrorState); + else SetErrorState("Failed to create requirement: " + internals.TransactionMgr.ErrorState); } } else SetErrorState("null item in list"); @@ -349,16 +304,16 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { if (!HasErrorState()) { // Delete interface data items. - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Transaction, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.Transaction, Id), internals.DbUpdateInfo)) SetErrorState("Failed to clear interface data items - " + interfaceConsole.ErrorState); } else SetErrorState("Failed to retrieve interface console"); @@ -379,12 +334,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus // Delete any associated items links. if (!HasErrorState()) { - if (InitDataItemMgr()) - { - if (!dataItemMgr.ClearDataItem(Sbm.ItemType.Transaction, Id)) - SetErrorState("failed to clear transaction item links"); - } - else SetErrorState("failed to initialise data item manager"); + if (!internals.DataItemMgr.ClearDataItem(Sbm.ItemType.Transaction, Id)) + SetErrorState("failed to clear transaction item links"); } // Delete any constituents that belong to this Transaction. if (!HasErrorState()) @@ -394,25 +345,25 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus SetErrorState("failed to clear Transaction constituents"); } // Clear requirements. - if (!HasErrorState() && InitTransactionMgr()) + if (!HasErrorState()) { List requirements = GetRequirements(); if (requirements != null && requirements.Count > 0) { foreach (SbmRequirement requirement in requirements) { - if (!transactionMgr.DeleteRequirement(requirement, TransactionType, userContext.DbUpdateInfo)) - SetErrorState(transactionMgr.ErrorState.ToString()); + if (!internals.TransactionMgr.DeleteRequirement(requirement, TransactionType, internals.DbUpdateInfo)) + SetErrorState(internals.TransactionMgr.ErrorState.ToString()); requirements = null; } } if (requirements != null) requirements.Clear(); } // Clear addresses. - if (!HasErrorState() && InitAccountMgr()) + if (!HasErrorState()) { - if (!accountMgr.ClearAddressesFor(Sbm.ItemType.Transaction, new ItemId())) - SetErrorState("failed to clear addresses - " + accountMgr.ErrorState); + if (!internals.AccountMgr.ClearAddressesFor(Sbm.ItemType.Transaction, new ItemId())) + SetErrorState("failed to clear addresses - " + internals.AccountMgr.ErrorState); } // Clear any references to this transaction from other transactions: if (!HasErrorState()) @@ -430,7 +381,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasPayments() { if (transactionPayments != null) return true; - else if (SysId.IsValid(Id) && InitDataItemMgr() && dataItemMgr != null) + else if (SysId.IsValid(Id)) { SbmItemLink.Params prmItemLink = new SbmItemLink.Params { @@ -438,7 +389,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus ItemTypeFrom = Sbm.ItemType.Transaction, ItemIdFrom = Id }; - foreach (SbmItemLink itemLink in dataItemMgr.GetItemLinkList(prmItemLink)) + foreach (SbmItemLink itemLink in internals.DataItemMgr.GetItemLinkList(prmItemLink)) if (itemLink != null) return true; } return false; @@ -446,13 +397,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override List GetPayments() { List transactionPaymentsCopy = new List(); - if (transactionPayments == null && SysId.IsValid(Id) && InitDataItemMgr() && dataItemMgr != null) + if (transactionPayments == null && SysId.IsValid(Id)) { SbmItemLink.Params prm = new SbmItemLink.Params(); prm.ItemLinkType = Sbm.ItemLinkType.Transaction_Payment; prm.ItemTypeFrom = Sbm.ItemType.Transaction; prm.ItemIdFrom = Id; - List itemLinks = dataItemMgr.GetItemLinkList(prm); + List itemLinks = internals.DataItemMgr.GetItemLinkList(prm); if (itemLinks != null) { foreach (SbmItemLink itemLink in itemLinks) @@ -486,7 +437,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); // Do not attempt any updates unless the list has been populated. - if (transactionPayments != null && SysId.IsValid(Id) && InitDataItemMgr() && dataItemMgr != null) + if (transactionPayments != null && SysId.IsValid(Id)) { // Build an item link list corresponding to the list of payment: List itemLinks = new List(); @@ -494,7 +445,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus foreach (SbmTransactionPayment transactionPayment in transactionPayments) { if (transactionPayment == null) continue; - SbmItemLink itemLink = dataItemMgr.CreateItemLink(Sbm.ItemLinkType.Transaction_Payment, Sbm.ItemType.Transaction, Id, Sbm.ItemType.Unknown, new SysId(0)); + SbmItemLink itemLink = internals.DataItemMgr.CreateItemLink(Sbm.ItemLinkType.Transaction_Payment, Sbm.ItemType.Transaction, Id, Sbm.ItemType.Unknown, new SysId(0)); if (itemLink != null) { itemLink.Seq = (short)transactionPayment.CodeSeq; @@ -505,12 +456,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus } } // Store these details: - if (dataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.Transaction_Payment, Sbm.ItemType.Transaction, Id, itemLinks, userContext.DbUpdateInfo)) + if (internals.DataItemMgr.StoreFromItemLinks(Sbm.ItemLinkType.Transaction_Payment, Sbm.ItemType.Transaction, Id, itemLinks, internals.DbUpdateInfo)) { } else { - SetErrorState("Failed to save transaction payment item links - " + dataItemMgr.ErrorState); + SetErrorState("Failed to save transaction payment item links - " + internals.DataItemMgr.ErrorState); } if (itemLinks != null) itemLinks.Clear(); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleClass_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleClass_Dbas.cs index f6e5ffd..81806b1 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleClass_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleClass_Dbas.cs @@ -17,20 +17,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmVehicleClass_Dbas(SbmUserContext userContext, SysId id, ushort flags) : - base(userContext, id) + public SbmVehicleClass_Dbas(SbmInternals internals, SysId id, ushort flags) : + base(internals.UserContext, id) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -45,7 +46,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus String make = ""; SbmSystem system = SbmGlobals.System; - SaCodeTypeConsole codeTypeConsole = SbmGlobals.Application.GetCodeTypeConsole(userContext); + SaCodeTypeConsole codeTypeConsole = internals.CodeTypeConsole; // Identify make: if (system == null && codeTypeConsole == null) { @@ -68,7 +69,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return 0; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableVehicle = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicle); @@ -89,7 +90,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (this == null || !SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null && !HasErrorState()) { if (!HasErrorState()) @@ -119,11 +120,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (!HasErrorState()) { // Remove interface data items: - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; //DbUpdateInfo dbUpdateInfo = userContext.DbUpdateInfo; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), internals.DbUpdateInfo)) SetErrorState(interfaceConsole.ErrorState.ToString()); } else SetErrorState("Failed to retrieve interface console"); diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleEvent_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleEvent_Dbas.cs index c33db02..0a972e0 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleEvent_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleEvent_Dbas.cs @@ -9,20 +9,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmVehicleEvent_Dbas(SbmUserContext userContext, SysId vehicleId, Sbm.VehicleEventType vehicleEventType, ushort flags) : - base(userContext, vehicleId, vehicleEventType) + public SbmVehicleEvent_Dbas(SbmInternals internals, SysId vehicleId, Sbm.VehicleEventType vehicleEventType, ushort flags) : + base(internals.UserContext, vehicleId, vehicleEventType) { - this.userContext = userContext; + this.internals = internals; + if (this.internals != null) { } Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleFeature_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleFeature_Dbas.cs index 140018e..b47662e 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleFeature_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicleFeature_Dbas.cs @@ -9,20 +9,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmVehicleFeature_Dbas(SbmUserContext userContext, SysId vehicleId, Sbm.VehicleFeatureSource vehicleFeatureSource, Sbm.VehicleFeatureType vehicleFeatureType, ushort flags) : - base(userContext, vehicleId, vehicleFeatureSource, vehicleFeatureType) + public SbmVehicleFeature_Dbas(SbmInternals internals, SysId vehicleId, Sbm.VehicleFeatureSource vehicleFeatureSource, Sbm.VehicleFeatureType vehicleFeatureType, ushort flags) : + base(internals.UserContext, vehicleId, vehicleFeatureSource, vehicleFeatureType) { - this.userContext = userContext; + this.internals = internals; + if (this.internals != null) { } Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } diff --git a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicle_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicle_Dbas.cs index 17d9ecb..3817003 100644 --- a/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicle_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicle_Dbas.cs @@ -16,20 +16,21 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { //------------------------------------------------------------------- // Data members. - private readonly SbmUserContext userContext; + private readonly SbmInternals internals; //------------------------------------------------------------------- // Construction. - public SbmVehicle_Dbas(SbmUserContext userContext, SysId id, ushort flags) : - base(userContext, id) + public SbmVehicle_Dbas(SbmInternals internals, SysId id, ushort flags) : + base(internals.UserContext, id) { - this.userContext = userContext; + this.internals = internals; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { + // NB Do not dispose the Internals - owned by manager. } base.Dispose(disposing); } @@ -44,65 +45,62 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { if (SysId.IsValid(Id) || odometer < 1) return false; DateTime todayDate = DateTime.MinValue; - SbmAssetMgr assetMgr = SbmGlobals.System.CreateAssetMgr(userContext); - if (assetMgr != null) + // Check whether there is already a reading for today. + SbmVehicleEvent vehicleEventUpdated = null; + SbmVehicleEvent.Params prm = new SbmVehicleEvent.Params(); + prm.VehicleId = Id; + prm.VehicleEventType = Sbm.VehicleEventType.Odometer; + foreach (SbmVehicleEvent vehicleEvent in internals.AssetMgr.GetVehicleEventList(prm)) { - // Check whether there is already a reading for today. - SbmVehicleEvent vehicleEventUpdated = null; - SbmVehicleEvent.Params prm = new SbmVehicleEvent.Params(); - prm.VehicleId = Id; - prm.VehicleEventType = Sbm.VehicleEventType.Odometer; - foreach (SbmVehicleEvent vehicleEvent in assetMgr.GetVehicleEventList(prm)) + // Check whether this event should be used in preference to any previously found. + if (vehicleEvent.StartOn.Date == todayDate) { - // Check whether this event should be used in preference to any previously found. - if (vehicleEvent.StartOn.Date == todayDate) - { - // Always refresh any odometer reading recorded today. - vehicleEventUpdated = vehicleEvent; - break; - } - else if (vehicleEventUpdated == null && vehicleEvent.Odometer == odometer) - vehicleEventUpdated = vehicleEvent; // Events with the same reading can be updated (to refresh the date). - else if (vehicleEventUpdated == null && vehicleEvent.StartOn.Date > vehicleEventUpdated.StartOn.Date && vehicleEvent.Odometer == odometer) - vehicleEventUpdated = vehicleEvent; // Events with the same reading and more recent date can be refreshed. + // Always refresh any odometer reading recorded today. + vehicleEventUpdated = vehicleEvent; + break; } - if (vehicleEventUpdated != null) + else if (vehicleEventUpdated == null && vehicleEvent.Odometer == odometer) + vehicleEventUpdated = vehicleEvent; // Events with the same reading can be updated (to refresh the date). + else if (vehicleEventUpdated == null && vehicleEvent.StartOn.Date > vehicleEventUpdated.StartOn.Date && vehicleEvent.Odometer == odometer) + vehicleEventUpdated = vehicleEvent; // Events with the same reading and more recent date can be refreshed. + } + if (vehicleEventUpdated != null) + { + vehicleEventUpdated.StartOn = todayDate; + vehicleEventUpdated.FinishOn = todayDate; + vehicleEventUpdated.Odometer = odometer; + if (internals.AssetMgr.UpdateVehicleEvent(vehicleEventUpdated, internals.DbUpdateInfo)) + { + } +#if _DEBUG + else TRACE("SapVehicle::SetOdometerReading: Failed to update vehicle event - %s\n", assetMgr.ErrorState.Message.ToString()); +#endif + } + else + { + // Create a new reading. + SbmVehicleEvent vehicleEvent = internals.AssetMgr.CreateVehicleEvent(Id, Sbm.VehicleEventType.Odometer); + if (vehicleEvent != null) { vehicleEventUpdated.StartOn = todayDate; vehicleEventUpdated.FinishOn = todayDate; vehicleEventUpdated.Odometer = odometer; - if (assetMgr.UpdateVehicleEvent(vehicleEventUpdated, userContext.DbUpdateInfo)) + if (internals.AssetMgr.InsertVehicleEvent(vehicleEvent, internals.DbUpdateInfo)) { } -#if _DEBUG - else TRACE("SapVehicle::SetOdometerReading: Failed to update vehicle event - %s\n", assetMgr.ErrorState.Message.ToString()); -#endif - } - else - { - // Create a new reading. - SbmVehicleEvent vehicleEvent = assetMgr.CreateVehicleEvent(Id, Sbm.VehicleEventType.Odometer); - if (vehicleEvent != null) - { - vehicleEventUpdated.StartOn = todayDate; - vehicleEventUpdated.FinishOn = todayDate; - vehicleEventUpdated.Odometer = odometer; - if (assetMgr.InsertVehicleEvent(vehicleEvent, userContext.DbUpdateInfo)) - { - } #if _DEBUG else TRACE("SapVehicle::SetOdometerReading: Failed to add vehicle event - %s\n", assetMgr.ErrorState.Message.ToString()); #endif - } + } #if _DEBUG else TRACE("SapVehicle::SetOdometerReading: Failed to create vehicle event - %s\n", assetMgr.ErrorState.Message.ToString()); #endif - } - // Update this vehicle itself. - LatestOdo = odometer; - LatestOdoOn = todayDate; - assetMgr.UpdateVehicle(this, userContext.DbUpdateInfo); } + // Update this vehicle itself. + LatestOdo = odometer; + LatestOdoOn = todayDate; + internals.AssetMgr.UpdateVehicle(this, internals.DbUpdateInfo); + return true; } @@ -111,7 +109,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus public override bool HasAssets() { if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableAsset = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset); @@ -130,7 +128,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableAssetProcess = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetProcess); @@ -147,7 +145,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableVehicleEvent = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent); @@ -164,7 +162,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return 0; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null) { String tableVehicleFeature = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleFeature); @@ -185,7 +183,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (!SysId.IsValid(Id)) return false; - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole == null) return false; return interfaceConsole.ItemHasDataItems(new ItemId((short)Sbm.ItemType.Vehicle, Id)); } @@ -223,7 +221,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus { ClearErrorState(); if (this == null || !SysId.IsValid(Id)) return false; - ISacsDatabase db = SbmGlobals.Application.GetDatabase(userContext.SessionContext); + ISacsDatabase db = internals.BusMgrDatabase; if (db != null && !HasErrorState()) { if (!HasErrorState()) @@ -253,10 +251,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus if (!HasErrorState()) { // Remove interface data items. - SaInterfaceConsole interfaceConsole = SbmGlobals.Application.GetInterfaceConsole(userContext); + SaInterfaceConsole interfaceConsole = internals.InterfaceConsole; if (interfaceConsole != null) { - if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), userContext.DbUpdateInfo)) + if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), internals.DbUpdateInfo)) SetErrorState(interfaceConsole.ErrorState.ToString()); } else SetErrorState("Failed to retrieve interface console"); diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs index 39a867b..4a3a366 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmInterfaceConsole_Dbas.cs @@ -17,25 +17,64 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //------------------------------------------------------------------- // Data members. + private SbmConfigConsole configConsole; + private SaItemOptionConsole itemOptionConsole; + private SaUpdateLogConsole updateLogConsole; private readonly List dataItemTypes; private readonly List interfaceDataTypes; //------------------------------------------------------------------- // Construction. - protected SbmInterfaceConsole_Dbas(SbmUserContext userContext) : base(SbmGlobals.Application.GetDatabase(userContext.SessionContext) as SacsDatabase) + protected SbmInterfaceConsole_Dbas(SbmUserContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext) as SacsDatabase) { UserContext = userContext; dataItemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); interfaceDataTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.InterfaceDataType); } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (configConsole != null) configConsole.Dispose(); configConsole = null; + if (itemOptionConsole != null) itemOptionConsole.Dispose(); itemOptionConsole = null; + if (updateLogConsole != null) updateLogConsole.Dispose(); updateLogConsole = null; + } + base.Dispose(disposing); + } //------------------------------------------------------------------- // Properties. public SbmUserContext UserContext { get; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } public override short InterfaceDataType { get { return (short)Sbm.ItemType.Interface; } } - public override SaItemOptionConsole ItemOptionConsole { get { return SbmGlobals.Application.GetItemOptionConsole(UserContext); } } - public override SaUpdateLogConsole UpdateLogConsole { get { return SbmGlobals.Application.GetUpdateLogConsole(UserContext); } } + // Consoles. + private SbmConfigConsole ConfigConsole + { + get + { + if (configConsole == null) + configConsole = SbmGlobals.Application.CreateConfigConsole(UserContext.SessionContext); + return configConsole; + } + } + public override SaItemOptionConsole ItemOptionConsole + { + get + { + if (itemOptionConsole == null) + itemOptionConsole = SbmGlobals.Application.CreateItemOptionConsole(UserContext); + return itemOptionConsole; + } + } + public override SaUpdateLogConsole UpdateLogConsole + { + get + { + if (updateLogConsole == null) + updateLogConsole = SbmGlobals.Application.CreateUpdateLogConsole(UserContext); + return updateLogConsole; + } + } //--------------------------------------------------------------- // Utilities. @@ -88,7 +127,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles } public bool InterfaceTypeValidForContextCategory(SaInterfaceCategory interfaceCategory, short interfaceType) { - return SbmGlobals.GetConfigConsole(UserContext.SessionContext).AllowInterface(UserContext, interfaceCategory, interfaceType); + return ConfigConsole.AllowInterface(UserContext, interfaceCategory, interfaceType); } //------------------------------------------------------------------- diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs index e142629..58958f9 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmItemOptionConsole_Dbas.cs @@ -1,6 +1,7 @@ using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.Net.Standard.Base.Bus; +using Sarand.Net.Standard.Base.Interfaces; using Sarand.Net.Standard.Base.ItemOptions; using Sarand.Net.Standard.Base.UpdateLog; using Sarand.Net.Standard.Dbas.Base; @@ -15,20 +16,49 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //------------------------------------------------------------------- // Data members. private SbmAccountMgr accountMgr = null; + private SaInterfaceConsole interfaceConsole; + private SaUpdateLogConsole updateLogConsole; //------------------------------------------------------------------- // Construction. protected SbmItemOptionConsole_Dbas(SacsDatabase database) : base(database) { } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (accountMgr != null) accountMgr.Dispose(); accountMgr = null; + if (updateLogConsole != null) updateLogConsole.Dispose(); updateLogConsole = null; + } + base.Dispose(disposing); + } //------------------------------------------------------------------- // Properties. public SbmUserContext UserContext { get; set; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } public override short ItemOptionDataType { get { return (short)Sbm.ItemType.ItemOption; } } - public override SaUpdateLogConsole UpdateLogConsole { get { return SbmGlobals.Application.GetUpdateLogConsole(UserContext); } } private SbmAccountMgr AccountMgr { get { if (accountMgr == null) accountMgr = SbmGlobals.System.CreateAccountMgr(UserContext); return accountMgr; } } + // Consoles. + public SaInterfaceConsole InterfaceConsole + { + get + { + if (interfaceConsole == null) + interfaceConsole = SbmGlobals.Application.CreateInterfaceConsole(UserContext); + return interfaceConsole; + } + } + public override SaUpdateLogConsole UpdateLogConsole + { + get + { + if (updateLogConsole == null) + updateLogConsole = SbmGlobals.Application.CreateUpdateLogConsole(UserContext); + return updateLogConsole; + } + } //------------------------------------------------------------------- // I t e m O p t i o n D e f i n i t i o n s @@ -38,7 +68,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles if (itemId.Type == (int)Sbm.ItemType.Association) return AccountMgr.GetOrganisationItemOptionDfns(itemId.Id); if (itemId.Type == (int)Sbm.ItemType.Interface) - return SbmGlobals.Application.GetInterfaceConsole(UserContext).GetInterfaceItemOptionDfns(itemId.Id); + return InterfaceConsole.GetInterfaceItemOptionDfns(itemId.Id); return new List(); } diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs index ac78889..7ab3fbc 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmReferenceDataConsole_Dbas.cs @@ -8,6 +8,10 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles //======================================================================= public abstract class SbmReferenceDataConsole_Dbas : SaReferenceDataConsole_Dbas { + //------------------------------------------------------------------- + // Data members. + private SaUpdateLogConsole updateLogConsole; + //------------------------------------------------------------------- // Construction. protected SbmReferenceDataConsole_Dbas(SbmUserContext userContext, SacsDatabase database) : @@ -15,18 +19,35 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { UserContext = userContext; } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (updateLogConsole != null) updateLogConsole.Dispose(); updateLogConsole = null; + } + base.Dispose(disposing); + } //------------------------------------------------------------------- // Properties. public SbmSessionContext SessionContext { get; } public SbmUserContext UserContext { get; } - public override SaUpdateLogConsole UpdateLogConsole { get { return SbmGlobals.Application.GetUpdateLogConsole(UserContext); } } // Item types. public override short LanguageItemType { get { return (short)Sbm.ItemDataType.Unknown; } } public override short RegionItemType { get { return (short)Sbm.ItemDataType.Region; } } public override short CurrencyItemType { get { return (short)Sbm.ItemDataType.Currency; } } public override short TaxCodeItemType { get { return (short)Sbm.ItemDataType.Unknown; } } public override short UnitMeasureItemType { get { return (short)Sbm.ItemDataType.Unknown; } } + // Consoles. + public override SaUpdateLogConsole UpdateLogConsole + { + get + { + if (updateLogConsole == null) + updateLogConsole = SbmGlobals.Application.CreateUpdateLogConsole(UserContext); + return updateLogConsole; + } + } //------------------------------------------------------------------- } diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs index 0780a62..7e6ccc0 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs @@ -17,14 +17,24 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //------------------------------------------------------------------- // Data members. - private readonly SbmConfigConsole configConsole; + private SbmConfigConsole configConsole; + private SaUpdateLogConsole updateLogConsole; private List securityRights; //------------------------------------------------------------------- // Construction. - protected SbmSecurityConsole_Dbas(SacsDatabase database, SbmConfigConsole configConsole) : base(database) + protected SbmSecurityConsole_Dbas(SbmUserContext userContext, SacsDatabase database) : base(database) { - this.configConsole = configConsole; + UserContext = userContext; + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (configConsole != null) configConsole.Dispose(); configConsole = null; + if (updateLogConsole != null) updateLogConsole.Dispose(); updateLogConsole = null; + } + base.Dispose(disposing); } //------------------------------------------------------------------- @@ -33,7 +43,25 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } public override short SecurityItemDataType { get { return (short)Sbm.ItemType.SecurityItem; } } public override short SecurityLinkDataType { get { return (short)Sbm.ItemType.SecurityLink; } } - public override SaUpdateLogConsole UpdateLogConsole { get { return SbmGlobals.Application.GetUpdateLogConsole(UserContext); } } + // Consoles. + private SbmConfigConsole ConfigConsole + { + get + { + if (configConsole == null) + configConsole = SbmGlobals.Application.CreateConfigConsole(UserContext.SessionContext); + return configConsole; + } + } + public override SaUpdateLogConsole UpdateLogConsole + { + get + { + if (updateLogConsole == null) + updateLogConsole = SbmGlobals.Application.CreateUpdateLogConsole(UserContext); + return updateLogConsole; + } + } //------------------------------------------------------------------- // Utilities. diff --git a/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs index e2ed464..e14ee98 100644 --- a/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Consoles/SbmUpdateLogConsole_Dbas.cs @@ -13,27 +13,45 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //------------------------------------------------------------------- // Data members. + private SaSecurityConsole securityConsole; //------------------------------------------------------------------- // Construction. protected SbmUpdateLogConsole_Dbas(SacsDatabase database) : base(database) { } + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (securityConsole != null) securityConsole.Dispose(); securityConsole = null; + } + base.Dispose(disposing); + } //------------------------------------------------------------------- // Properties. public SbmUserContext UserContext { get; set; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } + // Consoles. + public SaSecurityConsole SecurityConsole + { + get + { + if (securityConsole == null) + securityConsole = SbmGlobals.Application.CreateSecurityConsole(UserContext); + return securityConsole; + } + } //------------------------------------------------------------------- // Get name for User Id. public override Dictionary GetNameForUserIds(List userIds) { Dictionary userNames = new Dictionary(); - SaSecurityConsole securityConsole = SbmGlobals.Application.GetSecurityConsole(UserContext); - if (securityConsole != null) + if (SecurityConsole != null) { - userNames = securityConsole.GetSecurityItemDescriptions(userIds); + userNames = SecurityConsole.GetSecurityItemDescriptions(userIds); } return userNames; } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs index 7a1063c..fc5c749 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Address.cs @@ -77,7 +77,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Address. public override SbmAddress CreateAddress(Sbm.ItemType itemType, SysId idItem, Sbm.AddressType addressType) { - return new SbmAddress_Dbas(UserContext, null, itemType, idItem, addressType, 0); + return new SbmAddress_Dbas(Internals, null, itemType, idItem, addressType, 0); } private SbmAddress_Dbas CreateAddress(Address_Db dbAddress) { @@ -94,7 +94,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr itemId = new SysId(dbAddress._AffIdOwner); } } - SbmAddress_Dbas address = new SbmAddress_Dbas(UserContext, new SysId(dbAddress._Id), itemType, itemId, (Sbm.AddressType)dbAddress._Type, (ushort)dbAddress._Flags); + SbmAddress_Dbas address = new SbmAddress_Dbas(Internals, new SysId(dbAddress._Id), itemType, itemId, (Sbm.AddressType)dbAddress._Type, (ushort)dbAddress._Flags); PopulateFrom(dbAddress, address); return address; } @@ -198,7 +198,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Address_Db dbAddress = new Address_Db(DbInfo); dbAddress.PopulateFrom(dbCommand, aliasAddress, "Id=" + SysId.ToString(address.Id)); - SbmUpdateLogItemMonitor_Address updateLogMonitor = new SbmUpdateLogItemMonitor_Address(UserContext, CreateAddress(dbAddress)); + SbmUpdateLogItemMonitor_Address updateLogMonitor = new SbmUpdateLogItemMonitor_Address(Internals, CreateAddress(dbAddress)); // Update properties. PopulateTo(dbAddress, address, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs index 765151f..e60bf58 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Affiliate.cs @@ -37,12 +37,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Affiliate. public override SbmAffiliate CreateAffiliate(Sbm.AffiliateType affiliateType) { - return new SbmAffiliate_Dbas(UserContext, null, affiliateType, 0); + return new SbmAffiliate_Dbas(Internals, null, affiliateType, 0); } private SbmAffiliate_Dbas CreateAffiliate(Affiliate_Db dbAffiliate) { ClearErrorState(); - SbmAffiliate_Dbas affiliate = new SbmAffiliate_Dbas(UserContext, new SysId(dbAffiliate._Id), (Sbm.AffiliateType)dbAffiliate._Type, (ushort)dbAffiliate._Flags); + SbmAffiliate_Dbas affiliate = new SbmAffiliate_Dbas(Internals, new SysId(dbAffiliate._Id), (Sbm.AffiliateType)dbAffiliate._Type, (ushort)dbAffiliate._Flags); PopulateFrom(dbAffiliate, affiliate); return affiliate; } @@ -220,7 +220,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Affiliate_Db dbAffiliate = new Affiliate_Db(DbInfo); dbAffiliate.PopulateFrom(dbCommand, aliasAffiliate, "Id=" + SysId.ToString(affiliate.Id)); - SbmUpdateLogItemMonitor_Affiliate updateLogMonitor = new SbmUpdateLogItemMonitor_Affiliate(UserContext, CreateAffiliate(dbAffiliate)); + SbmUpdateLogItemMonitor_Affiliate updateLogMonitor = new SbmUpdateLogItemMonitor_Affiliate(Internals, CreateAffiliate(dbAffiliate)); // Update properties. PopulateTo(dbAffiliate, affiliate, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs index cd88092..6cfc9f7 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-Association.cs @@ -225,12 +225,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Association. public override SbmAssociation CreateAssociation(SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) { - return new SbmAssociation_Dbas(UserContext, null, affiliateIdOwner, associationType, affiliateIdTarget, 0); + return new SbmAssociation_Dbas(Internals, null, affiliateIdOwner, associationType, affiliateIdTarget, 0); } private SbmAssociation_Dbas CreateAssociation(Association_Db dbAssociation) { ClearErrorState(); - SbmAssociation_Dbas association = new SbmAssociation_Dbas(UserContext, new SysId(dbAssociation._Id), new SysId(dbAssociation._AffIdOwner), (Sbm.AssociationType)dbAssociation._Type, new SysId(dbAssociation._AffIdTarget), (ushort)dbAssociation._Flags); + SbmAssociation_Dbas association = new SbmAssociation_Dbas(Internals, new SysId(dbAssociation._Id), new SysId(dbAssociation._AffIdOwner), (Sbm.AssociationType)dbAssociation._Type, new SysId(dbAssociation._AffIdTarget), (ushort)dbAssociation._Flags); PopulateFrom(dbAssociation, association); return association; } @@ -393,7 +393,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Association_Db dbAssociation = new Association_Db(DbInfo); dbAssociation.PopulateFrom(dbCommand, aliasAssociation, "Id=" + SysId.ToString(association.Id)); - SbmUpdateLogItemMonitor_Association updateLogMonitor = new SbmUpdateLogItemMonitor_Association(UserContext, CreateAssociation(dbAssociation)); + SbmUpdateLogItemMonitor_Association updateLogMonitor = new SbmUpdateLogItemMonitor_Association(Internals, CreateAssociation(dbAssociation)); // Update properties. PopulateTo(dbAssociation, association, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SysParam.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SysParam.cs index 495eeca..0feff4e 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SysParam.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SysParam.cs @@ -36,13 +36,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create SysParam. public override SbmSysParam CreateSysParam(Sbm.SysParamCategory sysparamCategory, String sysparamName) { - return new SbmSysParam_Dbas(UserContext, null, sysparamCategory, sysparamName, 0); + return new SbmSysParam_Dbas(Internals, null, sysparamCategory, sysparamName, 0); } private SbmSysParam_Dbas CreateSysParam(SysParam_Db dbSysParam) { ClearErrorState(); - SbmSysParam_Dbas sysparam = new SbmSysParam_Dbas(UserContext, new SysId(dbSysParam._Id), (Sbm.SysParamCategory)dbSysParam._Cat, dbSysParam._Name, (ushort)dbSysParam._Flags); + SbmSysParam_Dbas sysparam = new SbmSysParam_Dbas(Internals, new SysId(dbSysParam._Id), (Sbm.SysParamCategory)dbSysParam._Cat, dbSysParam._Name, (ushort)dbSysParam._Flags); PopulateFrom(dbSysParam, sysparam); return sysparam; } @@ -146,7 +146,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SysParam_Db dbSysParam = new SysParam_Db(DbInfo); dbSysParam.PopulateFrom(dbCommand, aliasSysParam, "Id=" + SysId.ToString(sysparam.Id)); - SbmUpdateLogItemMonitor_SysParam updateLogMonitor = new SbmUpdateLogItemMonitor_SysParam(UserContext, CreateSysParam(dbSysParam)); + SbmUpdateLogItemMonitor_SysParam updateLogMonitor = new SbmUpdateLogItemMonitor_SysParam(Internals, CreateSysParam(dbSysParam)); // Update properties. PopulateTo(dbSysParam, sysparam, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccount.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccount.cs index 7fe3ec5..dc0ba18 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccount.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccount.cs @@ -40,7 +40,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (SysId.IsValid(AffiliateId_Owner)) { if (systemAccountType > 0) - systemAccount = new SbmSystemAccount_Dbas(UserContext, new SysId(), AffiliateId_Owner, systemAccountType, interfaceId, assocId, 0); + systemAccount = new SbmSystemAccount_Dbas(Internals, new SysId(), AffiliateId_Owner, systemAccountType, interfaceId, assocId, 0); else SetErrorState("Invalid account type"); } else SetErrorState("Owner not selected"); @@ -49,7 +49,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr private SbmSystemAccount_Dbas CreateSystemAccount(SystemAccount_Db dbSystemAccount) { ClearErrorState(); - SbmSystemAccount_Dbas systemAccount = new SbmSystemAccount_Dbas(UserContext, new SysId(dbSystemAccount._Id), new SysId(dbSystemAccount._AffIdOwner), (Sbm.SystemAccountType)dbSystemAccount._Type, new SysId(dbSystemAccount._InterfaceId), new SysId(dbSystemAccount._AssocId), (ushort)dbSystemAccount._Flags); + SbmSystemAccount_Dbas systemAccount = new SbmSystemAccount_Dbas(Internals, new SysId(dbSystemAccount._Id), new SysId(dbSystemAccount._AffIdOwner), (Sbm.SystemAccountType)dbSystemAccount._Type, new SysId(dbSystemAccount._InterfaceId), new SysId(dbSystemAccount._AssocId), (ushort)dbSystemAccount._Flags); PopulateFrom(dbSystemAccount, systemAccount); return systemAccount; } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccountUser.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccountUser.cs index 56ae94f..1748756 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccountUser.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemAccountUser.cs @@ -36,13 +36,13 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override SbmSystemAccountUser CreateSystemAccountUser(SysId accountId, SysId userId) { ClearErrorState(); - SbmSystemAccountUser systemAccountUser = new SbmSystemAccountUser_Dbas(UserContext, accountId, userId, 0); + SbmSystemAccountUser systemAccountUser = new SbmSystemAccountUser_Dbas(Internals, accountId, userId, 0); return systemAccountUser; } private SbmSystemAccountUser_Dbas CreateSystemAccountUser(SystemAccountUser_Db dbSystemAccountUser) { ClearErrorState(); - SbmSystemAccountUser_Dbas systemAccountUser = new SbmSystemAccountUser_Dbas(UserContext, new SysId(dbSystemAccountUser._AccountId), new SysId(dbSystemAccountUser._UserId), (ushort)dbSystemAccountUser._Flags); + SbmSystemAccountUser_Dbas systemAccountUser = new SbmSystemAccountUser_Dbas(Internals, new SysId(dbSystemAccountUser._AccountId), new SysId(dbSystemAccountUser._UserId), (ushort)dbSystemAccountUser._Flags); PopulateFrom(dbSystemAccountUser, systemAccountUser); return systemAccountUser; } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemUser.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemUser.cs index ed426ff..324e2ac 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemUser.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas-SystemUser.cs @@ -38,14 +38,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmSystemUser systemUser = null; if (SysId.IsValid(AffiliateId_Owner)) - systemUser = new SbmSystemUser_Dbas(UserContext, new SysId(), AffiliateId_Owner, interfaceId, affiliateId, 0); + systemUser = new SbmSystemUser_Dbas(Internals, new SysId(), AffiliateId_Owner, interfaceId, affiliateId, 0); else SetErrorState("Owner not selected"); return systemUser; } private SbmSystemUser_Dbas CreateSystemUser(SystemUser_Db dbSystemUser) { ClearErrorState(); - SbmSystemUser_Dbas systemUser = new SbmSystemUser_Dbas(UserContext, new SysId(dbSystemUser._Id), new SysId(dbSystemUser._AffIdOwner), new SysId(dbSystemUser._InterfaceId), new SysId(dbSystemUser._AffiliateId), (ushort)dbSystemUser._Flags); + SbmSystemUser_Dbas systemUser = new SbmSystemUser_Dbas(Internals, new SysId(dbSystemUser._Id), new SysId(dbSystemUser._AffIdOwner), new SysId(dbSystemUser._InterfaceId), new SysId(dbSystemUser._AffiliateId), (ushort)dbSystemUser._Flags); PopulateFrom(dbSystemUser, systemUser); return systemUser; } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs index 829c399..ac225d6 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAccountMgr_Dbas.cs @@ -18,7 +18,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmAccountMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); DbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); } protected override void Dispose(bool disposing) diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Asset.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Asset.cs index 6554242..9bae70b 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Asset.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Asset.cs @@ -80,14 +80,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmAsset asset = null; if (SysId.IsValid(assetCatId)) - asset = new SbmAsset_Dbas(UserContext, new SysId(), assetCatId, 0); + asset = new SbmAsset_Dbas(Internals, new SysId(), assetCatId, 0); else SetErrorState("Asset Cat Id is not identified"); return asset; } private SbmAsset_Dbas CreateAsset(SaAsset_Db dbAsset) { ClearErrorState(); - SbmAsset_Dbas asset = new SbmAsset_Dbas(UserContext, new SysId(dbAsset._Id), new SysId(dbAsset._AssetCategoryId), (ushort)dbAsset._Flags); + SbmAsset_Dbas asset = new SbmAsset_Dbas(Internals, new SysId(dbAsset._Id), new SysId(dbAsset._AssetCategoryId), (ushort)dbAsset._Flags); PopulateFrom(dbAsset, asset); return asset; } @@ -154,7 +154,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaAsset_Db dbAsset = new SaAsset_Db(DbInfo); dbAsset.PopulateFrom(dbCommand, aliasAsset, "Id=" + SysId.ToString(asset.Id)); - SbmUpdateLogItemMonitor_Asset updateLogMonitor = new SbmUpdateLogItemMonitor_Asset(UserContext, CreateAsset(dbAsset)); + SbmUpdateLogItemMonitor_Asset updateLogMonitor = new SbmUpdateLogItemMonitor_Asset(Internals, CreateAsset(dbAsset)); // Update properties. PopulateTo(dbAsset, asset, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetCategory.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetCategory.cs index a7a455f..2640911 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetCategory.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetCategory.cs @@ -48,7 +48,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public bool HasAssetCategory(SbmAssetCategory.Params prm) { ClearErrorState(); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(SessionContext); + ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(SessionContext); if (db != null) { if (db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetCategory))) @@ -138,14 +138,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmAssetCategory assetCategory = null; if (assetType > 0) - assetCategory = new SbmAssetCategory_Dbas(UserContext, new SysId(), AffiliateId_Owner, assetType, 0); + assetCategory = new SbmAssetCategory_Dbas(Internals, new SysId(), AffiliateId_Owner, assetType, 0); else SetErrorState("Asset type not identified"); return assetCategory; } private SbmAssetCategory_Dbas CreateAssetCategory(SaAssetCategory_Db dbAssetCategory) { ClearErrorState(); - SbmAssetCategory_Dbas assetCategory = new SbmAssetCategory_Dbas(UserContext, new SysId(dbAssetCategory._Id), new SysId(dbAssetCategory._AffIdOwner), (Sbm.AssetType)dbAssetCategory._AssetType, (ushort)dbAssetCategory._Flags); + SbmAssetCategory_Dbas assetCategory = new SbmAssetCategory_Dbas(Internals, new SysId(dbAssetCategory._Id), new SysId(dbAssetCategory._AffIdOwner), (Sbm.AssetType)dbAssetCategory._AssetType, (ushort)dbAssetCategory._Flags); PopulateFrom(dbAssetCategory, assetCategory); return assetCategory; } @@ -212,7 +212,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaAssetCategory_Db dbAssetCategory = new SaAssetCategory_Db(DbInfo); dbAssetCategory.PopulateFrom(dbCommand, aliasAssetCategory, "Id=" + SysId.ToString(assetCategory.Id)); - SbmUpdateLogItemMonitor_AssetCategory updateLogMonitor = new SbmUpdateLogItemMonitor_AssetCategory(UserContext, CreateAssetCategory(dbAssetCategory)); + SbmUpdateLogItemMonitor_AssetCategory updateLogMonitor = new SbmUpdateLogItemMonitor_AssetCategory(Internals, CreateAssetCategory(dbAssetCategory)); // Update properties. PopulateTo(dbAssetCategory, assetCategory, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetProcess.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetProcess.cs index f3a5166..9b4d315 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetProcess.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-AssetProcess.cs @@ -80,14 +80,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmAssetProcess assetProcess = null; if (assetType > 0) - assetProcess = new SbmAssetProcess_Dbas(UserContext, new SysId(), null, AffiliateId_Owner, 0); + assetProcess = new SbmAssetProcess_Dbas(Internals, new SysId(), null, AffiliateId_Owner, 0); else SetErrorState("Asset type not identified"); return assetProcess; } private SbmAssetProcess_Dbas CreateAssetProcess(SaAssetProcess_Db dbAssetProcess) { ClearErrorState(); - SbmAssetProcess_Dbas assetProcess = new SbmAssetProcess_Dbas(UserContext, new SysId(dbAssetProcess._Id), new SysId(dbAssetProcess._AssetId), new SysId(dbAssetProcess._ProcessId), (ushort)dbAssetProcess._Flags); + SbmAssetProcess_Dbas assetProcess = new SbmAssetProcess_Dbas(Internals, new SysId(dbAssetProcess._Id), new SysId(dbAssetProcess._AssetId), new SysId(dbAssetProcess._ProcessId), (ushort)dbAssetProcess._Flags); PopulateFrom(dbAssetProcess, assetProcess); return assetProcess; } @@ -154,7 +154,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaAssetProcess_Db dbAssetProcess = new SaAssetProcess_Db(DbInfo); dbAssetProcess.PopulateFrom(dbCommand, aliasAssetProcess, "Id=" + SysId.ToString(assetProcess.Id)); - SbmUpdateLogItemMonitor_AssetProcess updateLogMonitor = new SbmUpdateLogItemMonitor_AssetProcess(UserContext, CreateAssetProcess(dbAssetProcess)); + SbmUpdateLogItemMonitor_AssetProcess updateLogMonitor = new SbmUpdateLogItemMonitor_AssetProcess(Internals, CreateAssetProcess(dbAssetProcess)); // Update properties. PopulateTo(dbAssetProcess, assetProcess, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Vehicle.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Vehicle.cs index 4eb0682..8bc3449 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Vehicle.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-Vehicle.cs @@ -80,12 +80,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override SbmVehicle CreateVehicle() { ClearErrorState(); - return new SbmVehicle_Dbas(UserContext, new SysId(), 0); + return new SbmVehicle_Dbas(Internals, new SysId(), 0); } private SbmVehicle_Dbas CreateVehicle(SaVehicle_Db dbVehicle) { ClearErrorState(); - SbmVehicle_Dbas vehicle = new SbmVehicle_Dbas(UserContext, new SysId(dbVehicle._Id), (ushort)dbVehicle._Flags); + SbmVehicle_Dbas vehicle = new SbmVehicle_Dbas(Internals, new SysId(dbVehicle._Id), (ushort)dbVehicle._Flags); PopulateFrom(dbVehicle, vehicle); return vehicle; } @@ -152,7 +152,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaVehicle_Db dbVehicle = new SaVehicle_Db(DbInfo); dbVehicle.PopulateFrom(dbCommand, aliasVehicle, "Id=" + SysId.ToString(vehicle.Id)); - SbmUpdateLogItemMonitor_Vehicle updateLogMonitor = new SbmUpdateLogItemMonitor_Vehicle(UserContext, CreateVehicle(dbVehicle)); + SbmUpdateLogItemMonitor_Vehicle updateLogMonitor = new SbmUpdateLogItemMonitor_Vehicle(Internals, CreateVehicle(dbVehicle)); // Update properties. PopulateTo(dbVehicle, vehicle, dbUpdateInfo); @@ -753,7 +753,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr bool bCountHpiChecks = columns.HasId((int)SbmVehicle.Column.HpiCheckCount); if (bCountHpiChecks) { - SaItemDataConsole itemDataConsole = SbmGlobals.Application.GetItemDataConsole(UserContext); + SaItemDataConsole itemDataConsole = Internals.ItemDataConsole; if (itemDataConsole != null && itemDataConsole.DatabaseIsValid) { // Build sub query to directly return the number of associated HpiChecks. diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleClass.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleClass.cs index 6aa192c..5583da1 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleClass.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleClass.cs @@ -172,12 +172,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override SbmVehicleClass CreateVehicleClass() { ClearErrorState(); - return new SbmVehicleClass_Dbas(UserContext, new SysId(), 0); + return new SbmVehicleClass_Dbas(Internals, new SysId(), 0); } private SbmVehicleClass_Dbas CreateVehicleClass(SaVehicleClass_Db dbVehicleClass) { ClearErrorState(); - SbmVehicleClass_Dbas vehicleClass = new SbmVehicleClass_Dbas(UserContext, new SysId(dbVehicleClass._Id), (ushort)dbVehicleClass._Flags); + SbmVehicleClass_Dbas vehicleClass = new SbmVehicleClass_Dbas(Internals, new SysId(dbVehicleClass._Id), (ushort)dbVehicleClass._Flags); PopulateFrom(dbVehicleClass, vehicleClass); return vehicleClass; } @@ -244,7 +244,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaVehicleClass_Db dbVehicleClass = new SaVehicleClass_Db(DbInfo); dbVehicleClass.PopulateFrom(dbCommand, aliasVehicleClass, "Id=" + SysId.ToString(vehicleClass.Id)); - SbmUpdateLogItemMonitor_VehicleClass updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleClass(UserContext, CreateVehicleClass(dbVehicleClass)); + SbmUpdateLogItemMonitor_VehicleClass updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleClass(Internals, CreateVehicleClass(dbVehicleClass)); // Update properties. PopulateTo(dbVehicleClass, vehicleClass, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleEvent.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleEvent.cs index 17b19f7..0d71295 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleEvent.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleEvent.cs @@ -80,14 +80,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmVehicleEvent vehicleEvent = null; if (vehicleEventType > 0) - vehicleEvent = new SbmVehicleEvent_Dbas(UserContext, vehicleId, vehicleEventType, 0); + vehicleEvent = new SbmVehicleEvent_Dbas(Internals, vehicleId, vehicleEventType, 0); else SetErrorState("Asset type not identified"); return vehicleEvent; } private SbmVehicleEvent_Dbas CreateVehicleEvent(SaVehicleEvent_Db dbVehicleEvent) { ClearErrorState(); - SbmVehicleEvent_Dbas vehicleEvent = new SbmVehicleEvent_Dbas(UserContext, new SysId(dbVehicleEvent._VehicleId), (Sbm.VehicleEventType)dbVehicleEvent._EventType, (ushort)dbVehicleEvent._Flags); + SbmVehicleEvent_Dbas vehicleEvent = new SbmVehicleEvent_Dbas(Internals, new SysId(dbVehicleEvent._VehicleId), (Sbm.VehicleEventType)dbVehicleEvent._EventType, (ushort)dbVehicleEvent._Flags); PopulateFrom(dbVehicleEvent, vehicleEvent); return vehicleEvent; } @@ -154,7 +154,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaVehicleEvent_Db dbVehicleEvent = new SaVehicleEvent_Db(DbInfo); dbVehicleEvent.PopulateFrom(dbCommand, aliasVehicleEvent, "Id=" + SysId.ToString(vehicleEvent.Id)); - SbmUpdateLogItemMonitor_VehicleEvent updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleEvent(UserContext, CreateVehicleEvent(dbVehicleEvent)); + SbmUpdateLogItemMonitor_VehicleEvent updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleEvent(Internals, CreateVehicleEvent(dbVehicleEvent)); // Update properties. PopulateTo(dbVehicleEvent, vehicleEvent, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleFeature.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleFeature.cs index ee8cc42..b086641 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleFeature.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas-VehicleFeature.cs @@ -178,14 +178,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmVehicleFeature vehicleFeature = null; if (vehicleFeatureId != null) - vehicleFeature = new SbmVehicleFeature_Dbas(UserContext, vehicleFeatureId.VehicleId, vehicleFeatureId.VehicleFeatureSource, vehicleFeatureId.VehicleFeatureType, 0); + vehicleFeature = new SbmVehicleFeature_Dbas(Internals, vehicleFeatureId.VehicleId, vehicleFeatureId.VehicleFeatureSource, vehicleFeatureId.VehicleFeatureType, 0); else SetErrorState("Asset type not identified"); return vehicleFeature; } private SbmVehicleFeature_Dbas CreateVehicleFeature(SaVehicleFeature_Db dbVehicleFeature) { ClearErrorState(); - SbmVehicleFeature_Dbas vehicleFeature = new SbmVehicleFeature_Dbas(UserContext, new SysId(dbVehicleFeature._VehicleId), (Sbm.VehicleFeatureSource)dbVehicleFeature._Source, (Sbm.VehicleFeatureType)dbVehicleFeature._Type, (ushort)dbVehicleFeature._Flags); + SbmVehicleFeature_Dbas vehicleFeature = new SbmVehicleFeature_Dbas(Internals, new SysId(dbVehicleFeature._VehicleId), (Sbm.VehicleFeatureSource)dbVehicleFeature._Source, (Sbm.VehicleFeatureType)dbVehicleFeature._Type, (ushort)dbVehicleFeature._Flags); PopulateFrom(dbVehicleFeature, vehicleFeature); return vehicleFeature; } @@ -253,7 +253,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaVehicleFeature_Db dbVehicleFeature = new SaVehicleFeature_Db(DbInfo); dbVehicleFeature.PopulateFrom(dbCommand, aliasVehicleFeature, "Id=" + SysId.ToString(vehicleFeature.Id)); - SbmUpdateLogItemMonitor_VehicleFeature updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleFeature(UserContext, CreateVehicleFeature(dbVehicleFeature)); + SbmUpdateLogItemMonitor_VehicleFeature updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleFeature(Internals, CreateVehicleFeature(dbVehicleFeature)); // Update properties. PopulateTo(dbVehicleFeature, vehicleFeature, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs index 8682051..289ff29 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmAssetMgr_Dbas.cs @@ -22,7 +22,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmAssetMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); dbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs index afe11b5..da4d307 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Commodity.cs @@ -595,12 +595,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Commodity. public override SbmCommodity CreateCommodity(SysId id, SysId affiliateIdOwner, Sbm.CommodityType commodityType, String code) { - return new SbmCommodity_Dbas(UserContext, id, affiliateIdOwner, commodityType, code, 0); + return new SbmCommodity_Dbas(Internals, id, affiliateIdOwner, commodityType, code, 0); } private SbmCommodity_Dbas CreateCommodity(Commodity_Db dbCommodity) { ClearErrorState(); - SbmCommodity_Dbas commodity = new SbmCommodity_Dbas(UserContext, new SysId(dbCommodity._Id), new SysId(dbCommodity._AffIdOwner), (Sbm.CommodityType)dbCommodity._Type, dbCommodity._Code, (ushort)dbCommodity._Flags); + SbmCommodity_Dbas commodity = new SbmCommodity_Dbas(Internals, new SysId(dbCommodity._Id), new SysId(dbCommodity._AffIdOwner), (Sbm.CommodityType)dbCommodity._Type, dbCommodity._Code, (ushort)dbCommodity._Flags); PopulateFrom(dbCommodity, commodity); return commodity; } @@ -667,7 +667,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Commodity_Db dbCommodity = new Commodity_Db(DbInfo); dbCommodity.PopulateFrom(dbCommand, aliasCommodity, "Id=" + SysId.ToString(commodity.Id)); - SbmUpdateLogItemMonitor_Commodity updateLogMonitor = new SbmUpdateLogItemMonitor_Commodity(UserContext, CreateCommodity(dbCommodity)); + SbmUpdateLogItemMonitor_Commodity updateLogMonitor = new SbmUpdateLogItemMonitor_Commodity(Internals, CreateCommodity(dbCommodity)); // Update properties. PopulateTo(dbCommodity, commodity, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommodityCustomer.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommodityCustomer.cs index 12049b9..e49c5de 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommodityCustomer.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommodityCustomer.cs @@ -188,12 +188,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create CommodityCustomer. public override SbmCommodityCustomer CreateCommodityCustomer(SysId commodityId, SysId assocIdCustomer) { - return new SbmCommodityCustomer_Dbas(UserContext, commodityId, assocIdCustomer, 0); + return new SbmCommodityCustomer_Dbas(Internals, commodityId, assocIdCustomer, 0); } private SbmCommodityCustomer_Dbas CreateCommodityCustomer(CommodityCustomer_Db dbCommodityCustomer) { ClearErrorState(); - SbmCommodityCustomer_Dbas commodityCustomer = new SbmCommodityCustomer_Dbas(UserContext, new SysId(dbCommodityCustomer._CommodityId), new SysId(dbCommodityCustomer._AssocIdCustomer), (ushort)dbCommodityCustomer._Flags); + SbmCommodityCustomer_Dbas commodityCustomer = new SbmCommodityCustomer_Dbas(Internals, new SysId(dbCommodityCustomer._CommodityId), new SysId(dbCommodityCustomer._AssocIdCustomer), (ushort)dbCommodityCustomer._Flags); PopulateFrom(dbCommodityCustomer, commodityCustomer); return commodityCustomer; } @@ -260,7 +260,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); CommodityCustomer_Db dbCommodityCustomer = new CommodityCustomer_Db(DbInfo); dbCommodityCustomer.PopulateFrom(dbCommand, aliasCommodityCustomer, "Id=" + SysId.ToString(commodityCustomer.Id)); - SbmUpdateLogItemMonitor_CommodityCustomer updateLogMonitor = new SbmUpdateLogItemMonitor_CommodityCustomer(UserContext, CreateCommodityCustomer(dbCommodityCustomer)); + SbmUpdateLogItemMonitor_CommodityCustomer updateLogMonitor = new SbmUpdateLogItemMonitor_CommodityCustomer(Internals, CreateCommodityCustomer(dbCommodityCustomer)); // Update properties. PopulateTo(dbCommodityCustomer, commodityCustomer, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommoditySupplier.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommoditySupplier.cs index 0315755..d949440 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommoditySupplier.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-CommoditySupplier.cs @@ -81,12 +81,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create CommoditySupplier. public override SbmCommoditySupplier CreateCommoditySupplier(SysId commodityId, SysId assocIdSupplier) { - return new SbmCommoditySupplier_Dbas(UserContext, commodityId, assocIdSupplier, 0); + return new SbmCommoditySupplier_Dbas(Internals, commodityId, assocIdSupplier, 0); } private SbmCommoditySupplier_Dbas CreateCommoditySupplier(CommoditySupplier_Db dbCommoditySupplier) { ClearErrorState(); - SbmCommoditySupplier_Dbas commoditySupplier = new SbmCommoditySupplier_Dbas(UserContext, new SysId(dbCommoditySupplier._CommodityId), new SysId(dbCommoditySupplier._AssocIdSupplier), (ushort)dbCommoditySupplier._Flags); + SbmCommoditySupplier_Dbas commoditySupplier = new SbmCommoditySupplier_Dbas(Internals, new SysId(dbCommoditySupplier._CommodityId), new SysId(dbCommoditySupplier._AssocIdSupplier), (ushort)dbCommoditySupplier._Flags); PopulateFrom(dbCommoditySupplier, commoditySupplier); return commoditySupplier; } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Container.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Container.cs index d744d6b..ade5795 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Container.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-Container.cs @@ -77,12 +77,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Container. public override SbmContainer CreateContainer(Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType) { - return new SbmContainer_Dbas(UserContext, new SysId(), AffiliateId_Owner, containerCategory, containerType, 0); + return new SbmContainer_Dbas(Internals, new SysId(), AffiliateId_Owner, containerCategory, containerType, 0); } private SbmContainer_Dbas CreateContainer(Container_Db dbContainer) { ClearErrorState(); - SbmContainer_Dbas container = new SbmContainer_Dbas(UserContext, new SysId(dbContainer._Id), new SysId(dbContainer._AffIdOwner), (Sbm.ContainerCategory)dbContainer._Category, (Sbm.ContainerType)ContainerTypes.GetTypeForCode(dbContainer._Type), (ushort)dbContainer._Flags); + SbmContainer_Dbas container = new SbmContainer_Dbas(Internals, new SysId(dbContainer._Id), new SysId(dbContainer._AffIdOwner), (Sbm.ContainerCategory)dbContainer._Category, (Sbm.ContainerType)ContainerTypes.GetTypeForCode(dbContainer._Type), (ushort)dbContainer._Flags); PopulateFrom(dbContainer, container); return container; } @@ -149,7 +149,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Container_Db dbContainer = new Container_Db(DbInfo); dbContainer.PopulateFrom(dbCommand, aliasContainer, "Id=" + SysId.ToString(container.Id)); - SbmUpdateLogItemMonitor_Container updateLogMonitor = new SbmUpdateLogItemMonitor_Container(UserContext, CreateContainer(dbContainer)); + SbmUpdateLogItemMonitor_Container updateLogMonitor = new SbmUpdateLogItemMonitor_Container(Internals, CreateContainer(dbContainer)); // Update properties. PopulateTo(dbContainer, container, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-ContainerItem.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-ContainerItem.cs index 58ddfb7..60e2f38 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-ContainerItem.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-ContainerItem.cs @@ -57,7 +57,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override ushort GetMaxItemSeq(SysId containerId, Sbm.ItemType itemType, SysId itemId) { ClearErrorState(); - ISacsDatabase db = SbmGlobals.Application.GetDatabase(SessionContext); + ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(SessionContext); if (!HasErrorState()) { String tableContainerItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem); @@ -113,12 +113,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create ContainerItem. public override SbmContainerItem CreateContainerItem(SysId containerItemId, Sbm.ItemType itemType, SysId itemId) { - return new SbmContainerItem_Dbas(UserContext, containerItemId, itemType, itemId, 0); + return new SbmContainerItem_Dbas(Internals, containerItemId, itemType, itemId, 0); } private SbmContainerItem_Dbas CreateContainerItem(ContainerItem_Db dbContainerItem) { ClearErrorState(); - SbmContainerItem_Dbas containerItem = new SbmContainerItem_Dbas(UserContext, new SysId(dbContainerItem._ContainerId), (Sbm.ItemType)dbContainerItem._ItemType, new SysId(dbContainerItem._ItemId), (ushort)dbContainerItem._Flags); + SbmContainerItem_Dbas containerItem = new SbmContainerItem_Dbas(Internals, new SysId(dbContainerItem._ContainerId), (Sbm.ItemType)dbContainerItem._ItemType, new SysId(dbContainerItem._ItemId), (ushort)dbContainerItem._Flags); PopulateFrom(dbContainerItem, containerItem); return containerItem; } @@ -185,7 +185,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); ContainerItem_Db dbContainerItem = new ContainerItem_Db(DbInfo); dbContainerItem.PopulateFrom(dbCommand, aliasContainerItem, "Id=" + SysId.ToString(containerItem.Id)); - SbmUpdateLogItemMonitor_ContainerItem updateLogMonitor = new SbmUpdateLogItemMonitor_ContainerItem(UserContext, CreateContainerItem(dbContainerItem)); + SbmUpdateLogItemMonitor_ContainerItem updateLogMonitor = new SbmUpdateLogItemMonitor_ContainerItem(Internals, CreateContainerItem(dbContainerItem)); // Update properties. PopulateTo(dbContainerItem, containerItem, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs index 135eb7b..e190111 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas-PortfolioItem.cs @@ -235,12 +235,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Item. public override SbmPortfolioItem CreatePortfolioItem(SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType) { - return new SbmPortfolioItem_Dbas(UserContext, new SysId(), affiliateIdOwner, portfolioItemType, 0); + return new SbmPortfolioItem_Dbas(Internals, new SysId(), affiliateIdOwner, portfolioItemType, 0); } private SbmPortfolioItem_Dbas CreatePortfolioItem(PortfolioItem_Db dbPortfolioItem) { ClearErrorState(); - SbmPortfolioItem_Dbas portfolioItem = new SbmPortfolioItem_Dbas(UserContext, new SysId(dbPortfolioItem._Id), new SysId(dbPortfolioItem._AffIdOwner), (Sbm.PortfolioItemType)dbPortfolioItem._Type, (ushort)dbPortfolioItem._Flags); + SbmPortfolioItem_Dbas portfolioItem = new SbmPortfolioItem_Dbas(Internals, new SysId(dbPortfolioItem._Id), new SysId(dbPortfolioItem._AffIdOwner), (Sbm.PortfolioItemType)dbPortfolioItem._Type, (ushort)dbPortfolioItem._Flags); PopulateFrom(dbPortfolioItem, portfolioItem); return portfolioItem; } @@ -347,7 +347,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); PortfolioItem_Db dbPortfolioItem = new PortfolioItem_Db(DbInfo); dbPortfolioItem.PopulateFrom(dbCommand, aliasPortfolioItem, "Id=" + SysId.ToString(portfolioItem.Id)); - SbmUpdateLogItemMonitor_PortfolioItem updateLogMonitor = new SbmUpdateLogItemMonitor_PortfolioItem(UserContext, CreatePortfolioItem(dbPortfolioItem)); + SbmUpdateLogItemMonitor_PortfolioItem updateLogMonitor = new SbmUpdateLogItemMonitor_PortfolioItem(Internals, CreatePortfolioItem(dbPortfolioItem)); // Update properties. PopulateTo(dbPortfolioItem, portfolioItem, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs index 4c68bdf..6d90aaf 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmCommodityMgr_Dbas.cs @@ -21,7 +21,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmCommodityMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); dbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); OrderQuantityDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.OrderQuantity); } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemBatch.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemBatch.cs index 898ec6e..eed65d6 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemBatch.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemBatch.cs @@ -81,14 +81,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmItemBatch itemBatch = null; if (itemBatchType > 0) - itemBatch = new SbmItemBatch_Dbas(UserContext, new SysId(), AffiliateId_Owner, itemBatchType, refs, 0); + itemBatch = new SbmItemBatch_Dbas(Internals, new SysId(), AffiliateId_Owner, itemBatchType, refs, 0); else SetErrorState("Asset type not identified"); return itemBatch; } private SbmItemBatch_Dbas CreateItemBatch(ItemBatch_Db dbItemBatch) { ClearErrorState(); - SbmItemBatch_Dbas itemBatch = new SbmItemBatch_Dbas(UserContext, new SysId(dbItemBatch._Id), new SysId(dbItemBatch._AffIdOwner), (Sbm.ItemBatchType)dbItemBatch._Type, dbItemBatch._Ref, (ushort)dbItemBatch._Flags); + SbmItemBatch_Dbas itemBatch = new SbmItemBatch_Dbas(Internals, new SysId(dbItemBatch._Id), new SysId(dbItemBatch._AffIdOwner), (Sbm.ItemBatchType)dbItemBatch._Type, dbItemBatch._Ref, (ushort)dbItemBatch._Flags); PopulateFrom(dbItemBatch, itemBatch); return itemBatch; } @@ -155,7 +155,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); ItemBatch_Db dbItemBatch = new ItemBatch_Db(DbInfo); dbItemBatch.PopulateFrom(dbCommand, aliasItemBatch, "Id=" + SysId.ToString(itemBatch.Id)); - SbmUpdateLogItemMonitor_ItemBatch updateLogMonitor = new SbmUpdateLogItemMonitor_ItemBatch(UserContext, CreateItemBatch(dbItemBatch)); + SbmUpdateLogItemMonitor_ItemBatch updateLogMonitor = new SbmUpdateLogItemMonitor_ItemBatch(Internals, CreateItemBatch(dbItemBatch)); // Update properties. PopulateTo(dbItemBatch, itemBatch, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemLink.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemLink.cs index 601f0c2..95b86a4 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemLink.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas-ItemLink.cs @@ -146,14 +146,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmItemLink itemLink = null; if (itemLinkType > 0) - itemLink = new SbmItemLink_Dbas(UserContext, new SysId(), itemLinkType, itemTypeFrom, itemIdFrom, itemTypeTo, itemIdTo, 0); + itemLink = new SbmItemLink_Dbas(Internals, new SysId(), itemLinkType, itemTypeFrom, itemIdFrom, itemTypeTo, itemIdTo, 0); else SetErrorState("Asset type not identified"); return itemLink; } private SbmItemLink_Dbas CreateItemLink(ItemLink_Db dbItemLink) { ClearErrorState(); - SbmItemLink_Dbas itemLink = new SbmItemLink_Dbas(UserContext, new SysId(0), (Sbm.ItemLinkType)dbItemLink._Type, (Sbm.ItemType)dbItemLink._ItemTypeFrom, new SysId(dbItemLink._ItemIdFrom), (Sbm.ItemType)dbItemLink._ItemTypeTo, new SysId(dbItemLink._ItemIdTo), (ushort)dbItemLink._Flags); + SbmItemLink_Dbas itemLink = new SbmItemLink_Dbas(Internals, new SysId(0), (Sbm.ItemLinkType)dbItemLink._Type, (Sbm.ItemType)dbItemLink._ItemTypeFrom, new SysId(dbItemLink._ItemIdFrom), (Sbm.ItemType)dbItemLink._ItemTypeTo, new SysId(dbItemLink._ItemIdTo), (ushort)dbItemLink._Flags); PopulateFrom(dbItemLink, itemLink); return itemLink; } @@ -236,7 +236,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); ItemLink_Db dbItemLink = new ItemLink_Db(DbInfo); dbItemLink.PopulateFrom(dbCommand, aliasItemLink, "Id=" + SysId.ToString(itemLink.Id)); - SbmUpdateLogItemMonitor_ItemLink updateLogMonitor = new SbmUpdateLogItemMonitor_ItemLink(UserContext, CreateItemLink(dbItemLink)); + SbmUpdateLogItemMonitor_ItemLink updateLogMonitor = new SbmUpdateLogItemMonitor_ItemLink(Internals, CreateItemLink(dbItemLink)); // Update properties. PopulateTo(dbItemLink, itemLink, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs index 1d18b6e..37661c8 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmDataItemMgr_Dbas.cs @@ -22,7 +22,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmDataItemMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); dbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-Price.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-Price.cs index 02e00f3..f92f169 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-Price.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-Price.cs @@ -75,12 +75,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override SbmPrice CreatePrice(SysId priceSetId, SysId commodityId, Sbm.PriceType priceType) { ClearErrorState(); - return new SbmPrice_Dbas(UserContext, priceSetId, commodityId, priceType, 0); + return new SbmPrice_Dbas(Internals, priceSetId, commodityId, priceType, 0); } private SbmPrice_Dbas CreatePrice(SaPrice_Db dbPrice) { ClearErrorState(); - SbmPrice_Dbas price = new SbmPrice_Dbas(UserContext, new SysId(dbPrice._PriceSetId), new SysId(dbPrice._CommodityId), (Sbm.PriceType)dbPrice._Type, (ushort)dbPrice._Flags); + SbmPrice_Dbas price = new SbmPrice_Dbas(Internals, new SysId(dbPrice._PriceSetId), new SysId(dbPrice._CommodityId), (Sbm.PriceType)dbPrice._Type, (ushort)dbPrice._Flags); PopulateFrom(dbPrice, price); return price; } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-PriceSet.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-PriceSet.cs index fb82a6d..4378ce3 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-PriceSet.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas-PriceSet.cs @@ -76,12 +76,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public override SbmPriceSet CreatePriceSet(String reference, Sbm.PriceType priceType) { ClearErrorState(); - return new SbmPriceSet_Dbas(UserContext, new SysId(), UserContext.Organisation.AffiliateId, reference, priceType, 0); + return new SbmPriceSet_Dbas(Internals, new SysId(), UserContext.Organisation.AffiliateId, reference, priceType, 0); } private SbmPriceSet_Dbas CreatePriceSet(SaPriceSet_Db dbPriceSet) { ClearErrorState(); - SbmPriceSet_Dbas priceSet = new SbmPriceSet_Dbas(UserContext, new SysId(dbPriceSet._Id), new SysId(dbPriceSet._AffIdOwner), dbPriceSet._Ref, (Sbm.PriceType)dbPriceSet._Type, (ushort)dbPriceSet._Flags); + SbmPriceSet_Dbas priceSet = new SbmPriceSet_Dbas(Internals, new SysId(dbPriceSet._Id), new SysId(dbPriceSet._AffIdOwner), dbPriceSet._Ref, (Sbm.PriceType)dbPriceSet._Type, (ushort)dbPriceSet._Flags); PopulateFrom(dbPriceSet, priceSet); return priceSet; } @@ -148,7 +148,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); SaPriceSet_Db dbPriceSet = new SaPriceSet_Db(DbInfo); dbPriceSet.PopulateFrom(dbCommand, aliasPriceSet, "Id=" + SysId.ToString(priceSet.Id)); - SbmUpdateLogItemMonitor_PriceSet updateLogMonitor = new SbmUpdateLogItemMonitor_PriceSet(UserContext, CreatePriceSet(dbPriceSet)); + SbmUpdateLogItemMonitor_PriceSet updateLogMonitor = new SbmUpdateLogItemMonitor_PriceSet(Internals, CreatePriceSet(dbPriceSet)); // Update properties. PopulateTo(dbPriceSet, priceSet, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs index 94c023c..6f30fb1 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmPriceMgr_Dbas.cs @@ -19,7 +19,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmPriceMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); DbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); } protected override void Dispose(bool disposing) diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs index b54344e..a30fe63 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-ItemProcess.cs @@ -189,7 +189,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr Sbm.ItemType itemType = EnumUtil.ParseEnum(values.GetValue(aliasCol_ItemType).ToString(), Sbm.ItemType.Unknown); SysId itemId = new SysId((int)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_ItemIdFrom)).AsLong()); SysId processId = new SysId((int)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_ItemIdTo)).AsLong()); - SbmItemProcess_Dbas itemProcess_Dbas = new SbmItemProcess_Dbas(UserContext, itemType, itemId, processId, (ushort)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_Flags)).AsLong()); + SbmItemProcess_Dbas itemProcess_Dbas = new SbmItemProcess_Dbas(Internals, itemType, itemId, processId, (ushort)values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ItemLink_Flags)).AsLong()); if (itemProcess_Dbas != null) { @@ -244,7 +244,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SbmProcess process = GetProcessById(processId); if (process != null) { - itemProcess_Dbas = new SbmItemProcess_Dbas(UserContext, itemType, itemId, processId, 0); + itemProcess_Dbas = new SbmItemProcess_Dbas(Internals, itemType, itemId, processId, 0); //itemProcess_Dbas.Status = process.Status; itemProcess_Dbas.Notes = process.Notes; itemProcess_Dbas.ProcessCategory = process.ProcessCategory; @@ -268,7 +268,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr if (process != null) { // Create an item process from this constituent. - NB constituent flags should not be relevant. - itemProcess_Dbas = new SbmItemProcess_Dbas(UserContext, Sbm.ItemType.Requirement, constituent.RequirementId, constituent.ProcessId, 0); + itemProcess_Dbas = new SbmItemProcess_Dbas(Internals, Sbm.ItemType.Requirement, constituent.RequirementId, constituent.ProcessId, 0); itemProcess_Dbas.Seq = constituent.Seq; itemProcess_Dbas.Completed = constituent.Completed; itemProcess_Dbas.AssocIdContractor = constituent.AssociationIdContractor; diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-Process.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-Process.cs index 0af26a2..ac372d0 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-Process.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas-Process.cs @@ -126,14 +126,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmProcess process = null; if (processCategory > 0) - process = new SbmProcess_Dbas(UserContext, new SysId(), AffiliateId_Owner, processCategory, 0); + process = new SbmProcess_Dbas(Internals, new SysId(), AffiliateId_Owner, processCategory, 0); else SetErrorState("Asset type not identified"); return process; } private SbmProcess_Dbas CreateProcess(Process_Db dbProcess) { ClearErrorState(); - SbmProcess_Dbas process = new SbmProcess_Dbas(UserContext, new SysId(dbProcess._Id), new SysId(dbProcess._AffIdOwner), (Sbm.ProcessCategory)dbProcess._Category, (ushort)dbProcess._Flags); + SbmProcess_Dbas process = new SbmProcess_Dbas(Internals, new SysId(dbProcess._Id), new SysId(dbProcess._AffIdOwner), (Sbm.ProcessCategory)dbProcess._Category, (ushort)dbProcess._Flags); PopulateFrom(dbProcess, process); return process; } @@ -200,7 +200,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Process_Db dbProcess = new Process_Db(DbInfo); dbProcess.PopulateFrom(dbCommand, aliasProcess, "Id=" + SysId.ToString(process.Id)); - SbmUpdateLogItemMonitor_Process updateLogMonitor = new SbmUpdateLogItemMonitor_Process(UserContext, CreateProcess(dbProcess)); + SbmUpdateLogItemMonitor_Process updateLogMonitor = new SbmUpdateLogItemMonitor_Process(Internals, CreateProcess(dbProcess)); // Update properties. PopulateTo(dbProcess, process, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs index 4bf70b4..4a54540 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmProcessMgr_Dbas.cs @@ -23,7 +23,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmProcessMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); dbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Location.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Location.cs index 73f117c..ee5ac4c 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Location.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Location.cs @@ -77,12 +77,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Location. public override SbmLocation CreateLocation(Sbm.LocationCategory locationCategory) { - return new SbmLocation_Dbas(UserContext, new SysId(), AffiliateId_Owner, locationCategory, 0); + return new SbmLocation_Dbas(Internals, new SysId(), AffiliateId_Owner, locationCategory, 0); } private SbmLocation_Dbas CreateLocation(Location_Db dbLocation) { ClearErrorState(); - SbmLocation_Dbas location = new SbmLocation_Dbas(UserContext, new SysId(dbLocation._Id), new SysId(dbLocation._AffIdOwner), (Sbm.LocationCategory)dbLocation._Category, (ushort)dbLocation._Flags); + SbmLocation_Dbas location = new SbmLocation_Dbas(Internals, new SysId(dbLocation._Id), new SysId(dbLocation._AffIdOwner), (Sbm.LocationCategory)dbLocation._Category, (ushort)dbLocation._Flags); PopulateFrom(dbLocation, location); return location; } @@ -149,7 +149,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Location_Db dbLocation = new Location_Db(DbInfo); dbLocation.PopulateFrom(dbCommand, aliasLocation, "Id=" + SysId.ToString(location.Id)); - SbmUpdateLogItemMonitor_Location updateLogMonitor = new SbmUpdateLogItemMonitor_Location(UserContext, CreateLocation(dbLocation)); + SbmUpdateLogItemMonitor_Location updateLogMonitor = new SbmUpdateLogItemMonitor_Location(Internals, CreateLocation(dbLocation)); // Update properties. PopulateTo(dbLocation, location, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Movement.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Movement.cs index c0c0ed0..2c8e79a 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Movement.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas-Movement.cs @@ -196,12 +196,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr // Create Movement. public override SbmMovement CreateMovement(Sbm.ItemType itemType, SysId itemId, Sbm.MovementType movementType) { - return new SbmMovement_Dbas(UserContext, new SysId(), itemType, itemId, movementType, 0); + return new SbmMovement_Dbas(Internals, new SysId(), itemType, itemId, movementType, 0); } private SbmMovement_Dbas CreateMovement(Movement_Db dbMovement) { ClearErrorState(); - SbmMovement_Dbas movement = new SbmMovement_Dbas(UserContext, new SysId(dbMovement._Id), (Sbm.ItemType)dbMovement._ItemType, new SysId(dbMovement._ItemId), (Sbm.MovementType)dbMovement._Type, (ushort)dbMovement._Flags); + SbmMovement_Dbas movement = new SbmMovement_Dbas(Internals, new SysId(dbMovement._Id), (Sbm.ItemType)dbMovement._ItemType, new SysId(dbMovement._ItemId), (Sbm.MovementType)dbMovement._Type, (ushort)dbMovement._Flags); PopulateFrom(dbMovement, movement); return movement; } @@ -268,7 +268,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Movement_Db dbMovement = new Movement_Db(DbInfo); dbMovement.PopulateFrom(dbCommand, aliasMovement, "Id=" + SysId.ToString(movement.Id)); - SbmUpdateLogItemMonitor_Movement updateLogMonitor = new SbmUpdateLogItemMonitor_Movement(UserContext, CreateMovement(dbMovement)); + SbmUpdateLogItemMonitor_Movement updateLogMonitor = new SbmUpdateLogItemMonitor_Movement(Internals, CreateMovement(dbMovement)); // Update properties. PopulateTo(dbMovement, movement, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs index 50c0d59..5c6d85e 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmStockMgr_Dbas.cs @@ -22,7 +22,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmStockMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); dbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); } diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs index e0c7d81..f4d7bc3 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Constituent.cs @@ -344,14 +344,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmConstituent constituent = null; if (SysId.IsValid(assocId) && constituentType > 0) - constituent = new SbmConstituent_Dbas(UserContext, new SysId(), AffiliateId_Owner, assocId, constituentType, 0); + constituent = new SbmConstituent_Dbas(Internals, new SysId(), AffiliateId_Owner, assocId, constituentType, 0); else SetErrorState("Asset type not identified"); return constituent; } private SbmConstituent_Dbas CreateConstituent(Constituent_Db dbConstituent) { ClearErrorState(); - SbmConstituent_Dbas constituent = new SbmConstituent_Dbas(UserContext, new SysId(dbConstituent._Id), new SysId(dbConstituent._AffIdOwner), new SysId(dbConstituent._AssocId), (Sbm.ConstituentType)dbConstituent._Type, (ushort)dbConstituent._Flags); + SbmConstituent_Dbas constituent = new SbmConstituent_Dbas(Internals, new SysId(dbConstituent._Id), new SysId(dbConstituent._AffIdOwner), new SysId(dbConstituent._AssocId), (Sbm.ConstituentType)dbConstituent._Type, (ushort)dbConstituent._Flags); PopulateFrom(dbConstituent, constituent); return constituent; } @@ -418,7 +418,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Constituent_Db dbConstituent = new Constituent_Db(DbInfo); dbConstituent.PopulateFrom(dbCommand, aliasConstituent, "Id=" + SysId.ToString(constituent.Id)); - SbmUpdateLogItemMonitor_Constituent updateLogMonitor = new SbmUpdateLogItemMonitor_Constituent(UserContext, CreateConstituent(dbConstituent)); + SbmUpdateLogItemMonitor_Constituent updateLogMonitor = new SbmUpdateLogItemMonitor_Constituent(Internals, CreateConstituent(dbConstituent)); // Update properties. PopulateTo(dbConstituent, constituent, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs index ed4aa9b..e0e2551 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Requirement.cs @@ -409,14 +409,14 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr ClearErrorState(); SbmRequirement requirement = null; if (SysId.IsValid(assocId) && SysId.IsValid(transId) && requirementType > 0) - requirement = new SbmRequirement_Dbas(UserContext, new SysId(), AffiliateId_Owner, assocId, transId, requirementType, 0); + requirement = new SbmRequirement_Dbas(Internals, new SysId(), AffiliateId_Owner, assocId, transId, requirementType, 0); else SetErrorState("Asset type not identified"); return requirement; } private SbmRequirement_Dbas CreateRequirement(Requirement_Db dbRequirement) { ClearErrorState(); - SbmRequirement_Dbas requirement = new SbmRequirement_Dbas(UserContext, new SysId(dbRequirement._Id), new SysId(dbRequirement._AffIdOwner), new SysId(dbRequirement._AssocId), new SysId(dbRequirement._TransId), (Sbm.RequirementType)dbRequirement._Type, (ushort)dbRequirement._Flags); + SbmRequirement_Dbas requirement = new SbmRequirement_Dbas(Internals, new SysId(dbRequirement._Id), new SysId(dbRequirement._AffIdOwner), new SysId(dbRequirement._AssocId), new SysId(dbRequirement._TransId), (Sbm.RequirementType)dbRequirement._Type, (ushort)dbRequirement._Flags); PopulateFrom(dbRequirement, requirement); return requirement; } @@ -483,7 +483,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Requirement_Db dbRequirement = new Requirement_Db(DbInfo); dbRequirement.PopulateFrom(dbCommand, aliasRequirement, "Id=" + SysId.ToString(requirement.Id)); - SbmUpdateLogItemMonitor_Requirement updateLogMonitor = new SbmUpdateLogItemMonitor_Requirement(UserContext, CreateRequirement(dbRequirement)); + SbmUpdateLogItemMonitor_Requirement updateLogMonitor = new SbmUpdateLogItemMonitor_Requirement(Internals, CreateRequirement(dbRequirement)); // Update properties. PopulateTo(dbRequirement, requirement, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs index d389fb7..a290968 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas-Transaction.cs @@ -466,12 +466,12 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr SetErrorState("Transaction type not identified"); return null; } - return new SbmTransaction_Dbas(UserContext, new SysId(), AffiliateId_Owner, assocId, transactionType, 0); + return new SbmTransaction_Dbas(Internals, new SysId(), AffiliateId_Owner, assocId, transactionType, 0); } private SbmTransaction_Dbas CreateTransaction(Transaction_Db dbTransaction) { ClearErrorState(); - SbmTransaction_Dbas transaction = new SbmTransaction_Dbas(UserContext, new SysId(dbTransaction._Id), new SysId(dbTransaction._AffIdOwner), new SysId(dbTransaction._AssocId), (Sbm.TransactionType)dbTransaction._Type, (ushort)dbTransaction._Flags); + SbmTransaction_Dbas transaction = new SbmTransaction_Dbas(Internals, new SysId(dbTransaction._Id), new SysId(dbTransaction._AffIdOwner), new SysId(dbTransaction._AssocId), (Sbm.TransactionType)dbTransaction._Type, (ushort)dbTransaction._Flags); PopulateFrom(dbTransaction, transaction); return transaction; } @@ -538,7 +538,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr dbConnection.Open(); Transaction_Db dbTransaction = new Transaction_Db(DbInfo); dbTransaction.PopulateFrom(dbCommand, aliasTransaction, "Id=" + SysId.ToString(transaction.Id)); - SbmUpdateLogItemMonitor_Transaction updateLogMonitor = new SbmUpdateLogItemMonitor_Transaction(UserContext, CreateTransaction(dbTransaction)); + SbmUpdateLogItemMonitor_Transaction updateLogMonitor = new SbmUpdateLogItemMonitor_Transaction(Internals, CreateTransaction(dbTransaction)); // Update properties. PopulateTo(dbTransaction, transaction, dbUpdateInfo); diff --git a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs index dc3dd60..9ff10c5 100644 --- a/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs +++ b/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs @@ -36,7 +36,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr public SbmTransactionMgr_Dbas(SbmUserContext userContext) : base(userContext) { - db = (SbmGlobals.Application.GetDatabase(SessionContext) as SacsDatabase); + db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); dbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); orderQuantityDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.OrderQuantity); weightDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityWeight); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Address.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Address.cs index c0b307f..9924d97 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Address.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Address.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Address; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Address(SbmUserContext userContext, SbmAddress address) : - base(new Config(userContext, address.Id)) + public SbmUpdateLogItemMonitor_Address(SbmInternals internals, SbmAddress address) : + base(new Config(internals, address.Id)) { itemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); addressTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.AddressType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Affiliate.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Affiliate.cs index a71154d..8cb7648 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Affiliate.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Affiliate.cs @@ -14,8 +14,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Affiliate; ItemId = itemId; @@ -28,8 +28,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Affiliate(SbmUserContext userContext, SbmAffiliate affiliate) : - base(new Config(userContext, affiliate.Id)) + public SbmUpdateLogItemMonitor_Affiliate(SbmInternals internals, SbmAffiliate affiliate) : + base(new Config(internals, affiliate.Id)) { affiliateTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.AffiliateType); RecordAttrValues(affiliate, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Asset.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Asset.cs index ca6df9c..19c1b88 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Asset.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Asset.cs @@ -13,8 +13,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Asset; ItemId = itemId; @@ -26,8 +26,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Asset(SbmUserContext userContext, SbmAsset asset) : - base(new Config(userContext, asset.Id)) + public SbmUpdateLogItemMonitor_Asset(SbmInternals internals, SbmAsset asset) : + base(new Config(internals, asset.Id)) { RecordAttrValues(asset, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetCategory.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetCategory.cs index 00c3570..f39bd28 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetCategory.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetCategory.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Asset; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_AssetCategory(SbmUserContext userContext, SbmAssetCategory assetCategory) : - base(new Config(userContext, assetCategory.Id)) + public SbmUpdateLogItemMonitor_AssetCategory(SbmInternals internals, SbmAssetCategory assetCategory) : + base(new Config(internals, assetCategory.Id)) { assetTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.AssetType); incomeTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.AssetIncomeType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetProcess.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetProcess.cs index a70a085..f004e46 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetProcess.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_AssetProcess.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.AssetProcess; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_AssetProcess(SbmUserContext userContext, SbmAssetProcess assetProcess) : - base(new Config(userContext, assetProcess.Id)) + public SbmUpdateLogItemMonitor_AssetProcess(SbmInternals internals, SbmAssetProcess assetProcess) : + base(new Config(internals, assetProcess.Id)) { RecordAttrValues(assetProcess, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Association.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Association.cs index 0a03465..e8d0f1c 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Association.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Association.cs @@ -14,8 +14,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Association; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Association(SbmUserContext userContext, SbmAssociation association) : - base(new Config(userContext, association.Id)) + public SbmUpdateLogItemMonitor_Association(SbmInternals internals, SbmAssociation association) : + base(new Config(internals, association.Id)) { associationTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.AssociationType); discountTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.DiscountType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Commodity.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Commodity.cs index 2eb13cb..cf90b48 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Commodity.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Commodity.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Commodity; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Commodity(SbmUserContext userContext, SbmCommodity commodity) : - base(new Config(userContext, commodity.Id)) + public SbmUpdateLogItemMonitor_Commodity(SbmInternals internals, SbmCommodity commodity) : + base(new Config(internals, commodity.Id)) { commodityTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.CommodityType); RecordAttrValues(commodity, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommodityCustomer.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommodityCustomer.cs index 4396424..13c2b76 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommodityCustomer.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommodityCustomer.cs @@ -13,8 +13,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.CommodityCustomer; ItemId = itemId; @@ -26,8 +26,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_CommodityCustomer(SbmUserContext userContext, SbmCommodityCustomer commodityCustomer) : - base(new Config(userContext, commodityCustomer.Id)) + public SbmUpdateLogItemMonitor_CommodityCustomer(SbmInternals internals, SbmCommodityCustomer commodityCustomer) : + base(new Config(internals, commodityCustomer.Id)) { RecordAttrValues(commodityCustomer, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommoditySupplier.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommoditySupplier.cs index 3ea17fd..1489509 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommoditySupplier.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_CommoditySupplier.cs @@ -13,8 +13,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.CommoditySupplier; ItemId = itemId; @@ -26,8 +26,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_CommoditySupplier(SbmUserContext userContext, SbmCommoditySupplier commoditySupplier) : - base(new Config(userContext, commoditySupplier.Id)) + public SbmUpdateLogItemMonitor_CommoditySupplier(SbmInternals internals, SbmCommoditySupplier commoditySupplier) : + base(new Config(internals, commoditySupplier.Id)) { RecordAttrValues(commoditySupplier, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Constituent.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Constituent.cs index 9a60ed9..fa85a6a 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Constituent.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Constituent.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Constituent; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Constituent(SbmUserContext userContext, SbmConstituent constituent) : - base(new Config(userContext, constituent.Id)) + public SbmUpdateLogItemMonitor_Constituent(SbmInternals internals, SbmConstituent constituent) : + base(new Config(internals, constituent.Id)) { constituentTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ConstituentType); RecordAttrValues(constituent, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Container.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Container.cs index 458f952..adf2b4d 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Container.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Container.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Container; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Container(SbmUserContext userContext, SbmContainer container) : - base(new Config(userContext, container.Id)) + public SbmUpdateLogItemMonitor_Container(SbmInternals internals, SbmContainer container) : + base(new Config(internals, container.Id)) { containerCategories = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ContainerCategory); containerTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ContainerType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ContainerItem.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ContainerItem.cs index 472e489..a66c006 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ContainerItem.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ContainerItem.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.ContainerItem; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_ContainerItem(SbmUserContext userContext, SbmContainerItem containerItem) : - base(new Config(userContext, containerItem.Id)) + public SbmUpdateLogItemMonitor_ContainerItem(SbmInternals internals, SbmContainerItem containerItem) : + base(new Config(internals, containerItem.Id)) { itemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); itemTypeSource = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemBatch.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemBatch.cs index f7e6629..3f150fa 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemBatch.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemBatch.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.ItemBatch; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_ItemBatch(SbmUserContext userContext, SbmItemBatch itemBatch) : - base(new Config(userContext, itemBatch.Id)) + public SbmUpdateLogItemMonitor_ItemBatch(SbmInternals internals, SbmItemBatch itemBatch) : + base(new Config(internals, itemBatch.Id)) { itemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); RecordAttrValues(itemBatch, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemLink.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemLink.cs index 2039c63..ffeec3e 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemLink.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemLink.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { //ItemType = (short)Sbm.ItemType.ItemLink; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_ItemLink(SbmUserContext userContext, SbmItemLink itemLink) : - base(new Config(userContext, itemLink.Id)) + public SbmUpdateLogItemMonitor_ItemLink(SbmInternals internals, SbmItemLink itemLink) : + base(new Config(internals, itemLink.Id)) { itemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); RecordAttrValues(itemLink, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemProcess.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemProcess.cs index 05e7213..7830c50 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemProcess.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_ItemProcess.cs @@ -12,8 +12,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { //ItemType = (short)Sbm.ItemType.ItemProcess; ItemId = itemId; @@ -25,8 +25,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_ItemProcess(SbmUserContext userContext, SbmItemProcess itemProcess) : - base(new Config(userContext, itemProcess.Id)) + public SbmUpdateLogItemMonitor_ItemProcess(SbmInternals internals, SbmItemProcess itemProcess) : + base(new Config(internals, itemProcess.Id)) { RecordAttrValues(itemProcess, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Location.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Location.cs index 2eeade0..19f64d8 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Location.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Location.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Location; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Location(SbmUserContext userContext, SbmLocation location) : - base(new Config(userContext, location.Id)) + public SbmUpdateLogItemMonitor_Location(SbmInternals internals, SbmLocation location) : + base(new Config(internals, location.Id)) { locationCategories = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.LocationCategory); RecordAttrValues(location, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Movement.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Movement.cs index 29705bf..62fb907 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Movement.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Movement.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Movement; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Movement(SbmUserContext userContext, SbmMovement movement) : - base(new Config(userContext, movement.Id)) + public SbmUpdateLogItemMonitor_Movement(SbmInternals internals, SbmMovement movement) : + base(new Config(internals, movement.Id)) { itemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ItemType); movementTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.MovementType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PortfolioItem.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PortfolioItem.cs index 8cc4c3b..954dc1e 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PortfolioItem.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PortfolioItem.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.PortfolioItem; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_PortfolioItem(SbmUserContext userContext, SbmPortfolioItem portfolioItem) : - base(new Config(userContext, portfolioItem.Id)) + public SbmUpdateLogItemMonitor_PortfolioItem(SbmInternals internals, SbmPortfolioItem portfolioItem) : + base(new Config(internals, portfolioItem.Id)) { portfolioItemTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.PortfolioItemType); RecordAttrValues(portfolioItem, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Price.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Price.cs index 88662f5..7f2303c 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Price.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Price.cs @@ -13,8 +13,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Price; ItemId = itemId; @@ -26,8 +26,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Price(SbmUserContext userContext, SbmPrice price) : - base(new Config(userContext, price.Id)) + public SbmUpdateLogItemMonitor_Price(SbmInternals internals, SbmPrice price) : + base(new Config(internals, price.Id)) { RecordAttrValues(price, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PriceSet.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PriceSet.cs index 71ad119..a26787b 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PriceSet.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_PriceSet.cs @@ -13,8 +13,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.PriceSet; ItemId = itemId; @@ -26,8 +26,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_PriceSet(SbmUserContext userContext, SbmPriceSet priceSet) : - base(new Config(userContext, priceSet.Id)) + public SbmUpdateLogItemMonitor_PriceSet(SbmInternals internals, SbmPriceSet priceSet) : + base(new Config(internals, priceSet.Id)) { RecordAttrValues(priceSet, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Process.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Process.cs index 3b8d942..ce26de6 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Process.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Process.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Process; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Process(SbmUserContext userContext, SbmProcess process) : - base(new Config(userContext, process.Id)) + public SbmUpdateLogItemMonitor_Process(SbmInternals internals, SbmProcess process) : + base(new Config(internals, process.Id)) { processCategories = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ProcessCategory); processTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.ProcessType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Requirement.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Requirement.cs index 7a6876e..88dda16 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Requirement.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Requirement.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Requirement; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Requirement(SbmUserContext userContext, SbmRequirement requirement) : - base(new Config(userContext, requirement.Id)) + public SbmUpdateLogItemMonitor_Requirement(SbmInternals internals, SbmRequirement requirement) : + base(new Config(internals, requirement.Id)) { requirementTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.RequirementType); RecordAttrValues(requirement, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_SysParam.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_SysParam.cs index 17dd443..7a5643a 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_SysParam.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_SysParam.cs @@ -14,8 +14,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { //ItemType = (short)Sbm.ItemType.SysParam; ItemId = itemId; @@ -28,8 +28,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_SysParam(SbmUserContext userContext, SbmSysParam sysParam) : - base(new Config(userContext, sysParam.Id)) + public SbmUpdateLogItemMonitor_SysParam(SbmInternals internals, SbmSysParam sysParam) : + base(new Config(internals, sysParam.Id)) { sysParamCategories = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.SysParamCategory); RecordAttrValues(sysParam, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Transaction.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Transaction.cs index bb8fdca..9396a50 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Transaction.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Transaction.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Transaction; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Transaction(SbmUserContext userContext, SbmTransaction transaction) : - base(new Config(userContext, transaction.Id)) + public SbmUpdateLogItemMonitor_Transaction(SbmInternals internals, SbmTransaction transaction) : + base(new Config(internals, transaction.Id)) { transactionTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.TransactionType); RecordAttrValues(transaction, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Vehicle.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Vehicle.cs index aaef064..5e12bc0 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Vehicle.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_Vehicle.cs @@ -13,8 +13,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.Vehicle; ItemId = itemId; @@ -26,8 +26,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_Vehicle(SbmUserContext userContext, SbmVehicle vehicle) : - base(new Config(userContext, vehicle.Id)) + public SbmUpdateLogItemMonitor_Vehicle(SbmInternals internals, SbmVehicle vehicle) : + base(new Config(internals, vehicle.Id)) { RecordAttrValues(vehicle, false); } diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleClass.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleClass.cs index ee3fd88..ff19f38 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleClass.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleClass.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.VehicleClass; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_VehicleClass(SbmUserContext userContext, SbmVehicleClass vehicleClass) : - base(new Config(userContext, vehicleClass.Id)) + public SbmUpdateLogItemMonitor_VehicleClass(SbmInternals internals, SbmVehicleClass vehicleClass) : + base(new Config(internals, vehicleClass.Id)) { vehicleTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.VehicleType); fuelTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.FuelType); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleEvent.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleEvent.cs index 5b7008d..76a7342 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleEvent.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleEvent.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.VehicleEvent; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_VehicleEvent(SbmUserContext userContext, SbmVehicleEvent vehicleEvent) : - base(new Config(userContext, vehicleEvent.Id)) + public SbmUpdateLogItemMonitor_VehicleEvent(SbmInternals internals, SbmVehicleEvent vehicleEvent) : + base(new Config(internals, vehicleEvent.Id)) { vehicleEventTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.VehicleEventType); RecordAttrValues(vehicleEvent, false); diff --git a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleFeature.cs b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleFeature.cs index fcc2084..904e646 100644 --- a/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleFeature.cs +++ b/SaBusMgrStandardDbas/Dbas/UpdateLog/SbmUpdateLogItemMonitor_VehicleFeature.cs @@ -15,8 +15,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog // Configuration. public new class Config : SbmUpdateLogItemMonitor.Config { - public Config(SbmUserContext userContext, SysId itemId) : - base(userContext) + public Config(SbmInternals internals, SysId itemId) : + base(internals) { ItemType = (short)Sbm.ItemType.VehicleFeature; ItemId = itemId; @@ -29,8 +29,8 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog //------------------------------------------------------------------- // Construction. - public SbmUpdateLogItemMonitor_VehicleFeature(SbmUserContext userContext, SbmVehicleFeature vehicleFeature) : - base(new Config(userContext, vehicleFeature.Id)) + public SbmUpdateLogItemMonitor_VehicleFeature(SbmInternals internals, SbmVehicleFeature vehicleFeature) : + base(new Config(internals, vehicleFeature.Id)) { vehicleFeatureSources = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.VehicleFeatureSource); vehicleFeatureTypes = SbmSystem.GetCodesOfType(UserContext, Sbm.SystemCode.VehicleFeatureType); diff --git a/SaBusMgrStandardDbas/Dbas/Utils/SbmDbDfnGenerator.cs b/SaBusMgrStandardDbas/Dbas/Utils/SbmDbDfnGenerator.cs index f5f373b..bd27fb0 100644 --- a/SaBusMgrStandardDbas/Dbas/Utils/SbmDbDfnGenerator.cs +++ b/SaBusMgrStandardDbas/Dbas/Utils/SbmDbDfnGenerator.cs @@ -15,17 +15,22 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils //------------------------------------------------------------------- // Data members. //private static string messageBoxTitle = "BusinessMgr database definition generator"; + public enum DatabaseInstance + { + Control, + BusinessMgr, + } //------------------------------------------------------------------- /// /// Generate database definitions. /// - public static bool Generate(String connectionString) + public static bool Generate(DatabaseInstance dbInstance, String connectionString) { String fn = nameof(SbmDbDfnGenerator) + ".Generate"; // Locate output folder: - String directory = GetOutputFolder(); + String directory = GetOutputFolder(dbInstance); if (String.IsNullOrEmpty(directory) || !FileUtil.IsDirectory(directory)) return false; // Open database. @@ -37,7 +42,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils // Generate database definition. try { - return GenerateDatabaseDefinition(database, directory); + return GenerateDatabaseDefinition(dbInstance, database, directory); } catch (Exception exc) { @@ -47,7 +52,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils } //------------------------------------------------------------------- - private static bool GenerateDatabaseDefinition(SacsDatabase database, String directory) + private static bool GenerateDatabaseDefinition(DatabaseInstance dbInstance, SacsDatabase database, String directory) { DatabaseDefinitionGenerator.Config config = new DatabaseDefinitionGenerator.Config() { @@ -73,6 +78,11 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils config.TableClass.BaseClass = "SbmDbDataItem"; config.TableClass.MandatoryConstructorDbInfo = true; config.TableClass.TreatDoubleFormatAsDecimal = true; + if (dbInstance == DatabaseInstance.Control) + { + config.DefinitionClass.Classname = "SbmControlDbDfn"; + config.TableClass.Namespace = "Sarand.BusinessMgr.Net.Standard.Dbas.Internal.Control"; + } // Generate database definition. DatabaseDefinitionGenerator generator = new DatabaseDefinitionGenerator(); @@ -80,7 +90,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils } //------------------------------------------------------------------- - private static String GetOutputFolder() + private static String GetOutputFolder(DatabaseInstance dbInstance) { String fn = nameof(SbmDbDfnGenerator) + ".GetOutputFolder"; String assemblyDirectory = FileUtil.GetParentDirectory((Assembly.GetAssembly(typeof(DatabaseDefinitionGenerator)).Location)); @@ -102,7 +112,7 @@ namespace Sarand.BusinessMgr.Net.Standard.Dbas.Utils return String.Empty; } // Code files are generated to '..\Dbas\Generated\BusinessMgr\' folder. - directory += Path.DirectorySeparatorChar + "Database" + Path.DirectorySeparatorChar + "Generated" + Path.DirectorySeparatorChar + "BusinessMgr"; + directory += Path.DirectorySeparatorChar + "Database" + Path.DirectorySeparatorChar + "Generated" + Path.DirectorySeparatorChar + "BusMgr-" + dbInstance.ToString(); SaLogger.Debug(fn + " Output folder: " + directory); if (!FileUtil.ValidateDirectory(directory, true)) { diff --git a/SaBusinessMgrCoreWebOnline/Program.cs b/SaBusinessMgrCoreWebControl/Control/App/Program.cs similarity index 53% rename from SaBusinessMgrCoreWebOnline/Program.cs rename to SaBusinessMgrCoreWebControl/Control/App/Program.cs index 90a3846..bb716f6 100644 --- a/SaBusinessMgrCoreWebOnline/Program.cs +++ b/SaBusinessMgrCoreWebControl/Control/App/Program.cs @@ -7,20 +7,26 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -namespace SaBusinessMgrCoreWebOnline +namespace Sarand.BusinessMgr.Net.Core.Web.Control.App { + //======================================================================= public class Program { + //------------------------------------------------------------------- public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } + //------------------------------------------------------------------- public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { - webBuilder.UseStartup(); + webBuilder.UseStartup(); }); + + //------------------------------------------------------------------- } + //======================================================================= } diff --git a/SaBusinessMgrCoreWebControl/Control/App/SbmApplication_Admin.cs b/SaBusinessMgrCoreWebControl/Control/App/SbmApplication_Admin.cs new file mode 100644 index 0000000..8d64a52 --- /dev/null +++ b/SaBusinessMgrCoreWebControl/Control/App/SbmApplication_Admin.cs @@ -0,0 +1,165 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Core.Web.Helpers; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using Sarand.BusinessMgr.Net.Standard.Base.Consoles; +using Sarand.BusinessMgr.Net.Standard.Dbas.Utils; +using Sarand.Net.Standard.Base.App; +using Sarand.Net.Standard.Base.Core; +using Sarand.Net.Standard.Base.Dbas; +using Sarand.Net.Standard.Base.IO; +using Sarand.Net.Standard.Base.Utils; +using Sarand.Net.Standard.Dbas.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Web.Control.App +{ + //======================================================================= + public class SbmApplication_Admin : SbmApplication_Web + { + //------------------------------------------------------------------- + // Data members. + private bool generateDatabaseDefinitions = false; + private PropertySet propertySet; + private Dictionary sessionConfigs = new Dictionary(); + private Dictionary emailConfigs = new Dictionary(); + // Session contexts. + private class SessionContextData + { + public SessionContextData(SbmSessionContext_Web sessionContext) + { + SessionContext = sessionContext; + } + public SbmSessionContext_Web SessionContext { get; } + public ISacsDatabase BusMgrDatabase { get; set; } + } + private readonly Dictionary sessionContexts = new Dictionary(); + + //------------------------------------------------------------------- + // Construction. + public SbmApplication_Admin(IConfiguration configuration) + { + InitialiseTemporaryLoggingFolder(); + try + { + AppInstance = this; + SbmGlobals.Application = this; + propertySet = new PropertySet(); + SbmGlobals.System = (System_Web = new SbmSystem_Web(propertySet)); + Configuration = configuration; + } + catch (Exception exc) + { + SaLogger.Error(GetType().Name + ".CTR " + ExceptionUtil.GetErrorStateMessage(exc)); + throw exc; + } + } + + //------------------------------------------------------------------- + // Properties. + public static SbmApplication_Admin AppInstance { get; private set; } + public override ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext) + { + return sessionContexts.GetValue(sessionContext.Index, null)?.BusMgrDatabase; + } + public override String SessionCookieName { get { return Sbm.Config.Admin.Session.Cookie.Name; } } + // Configuration. + public override SbmSessionConfig SessionConfig { get { return sessionConfigs.Values.ToList().getConfigForApplication(); } } + public override SbmEmailConfig EmailConfig { get { return emailConfigs.Values.ToList().getConfigForSession(SessionConfig); } } + + //------------------------------------------------------------------- + // Initialisation. + /// Initialise environment - from Startup. + internal void InitWebHostEnvironment(IWebHostEnvironment env) + { + InitEnvironment(env); + } + /// Initialise environment - from internal (above) or unit tests. + protected void InitEnvironment(IWebHostEnvironment env) + { + String fn = GetType().Name + ".InitEnvironment"; + Development = env.IsDevelopment(); + environmentName = env.EnvironmentName; + SaLogger.LogFilenamePrefix = "Sbm-Web-Adm"; + SaLogger.IncludeHostInFileMessage = false; + SaLogger.IncludeUserInFileMessage = false; + + try + { + // Load server configuration. + var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: false) + .AddJsonFile($"appsettings.machine.{SbmSystem.ComputerName}.json", optional: false, reloadOnChange: false) + .AddEnvironmentVariables(); + SbmConfiguration = builder.Build(); + + // Application configuration. + sessionConfigs = SbmSessionConfigHelper.ExtractSessionConfigs(SbmConfiguration.GetSection("SessionConfigs")); + emailConfigs = SbmEmailConfigHelper.ExtractEmailConfigs(SbmConfiguration.GetSection("EmailConfigs")); + LoggingRootFolder = SessionConfig.Logging.RootFolder; + + // Application instance. + if (SessionConfig.Instance.EqualsCI("Dev")) instanceType = Sbm.InstanceType.Dev; + else if (SessionConfig.Instance.ContainsCI("Q")) instanceType = Sbm.InstanceType.QC; + else if (SessionConfig.Instance.ContainsCI("UAT")) instanceType = Sbm.InstanceType.UAT; + else if (SessionConfig.Instance.EqualsCI("PreProd")) instanceType = Sbm.InstanceType.UAT; + + // Initialise hard-coded logging path. + if (StringUtil.IsEmpty(LoggingRootFolder)) + { + if (SbmSystem.ComputerName.EqualsCI("WIN-BPCLM1QUOMT")) + LoggingRootFolder = @"D:\Sbmonite\Logs\" + (Development ? "Dev" : "Test"); + } + if (DirectoryUtil.DirectoryExists(LoggingRootFolder)) + SaLogger.LogFolder = LoggingRootFolder; + LogApplicationStart(fn); + + // Configure database connection. + SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig(); + config.location = SessionConfig.BusMgrDatabase.Location; + config.user = SessionConfig.BusMgrDatabase.User; + config.pword = SessionConfig.BusMgrDatabase.Password; + SacsDatabase coreDatabase = SacsDatabaseConsole.OpenOdbcDatabase(config); + if (coreDatabase.HasErrorState()) + SaLogger.Warn(fn + " Database initialisation error: " + coreDatabase.ErrorStateMessage); + + // Session context - only one context available/necessary (for now). + SessionContextData sessionContextData = new SessionContextData(new SbmSessionContext_Web(100, Sbm.Application.WebControl)); + sessionContextData.BusMgrDatabase = coreDatabase; + sessionContexts.Add(sessionContextData.SessionContext.Index, sessionContextData); + SessionContext = sessionContextData.SessionContext; + } + catch (Exception exc) + { + SaLogger.Error(fn + " " + ExceptionUtil.GetLogMessage(exc)); + } + + // Occasional startup processing. + if (generateDatabaseDefinitions) + GenerateDatabaseDefinition(SessionContext); + } + + //------------------------------------------------------------------- + private void GenerateDatabaseDefinition(SbmSessionContext sessionContext) + { + if (!generateDatabaseDefinitions || !SbmSystem.DebugMode || SessionContext == null) return; + if (!StringUtil.EmptyOnNull(EnvironmentName).EqualsCI("Development")) return; + ISacsDatabase coreDatabase = GetBusMgrDatabase(sessionContext); + if (coreDatabase == null || StringUtil.IsEmpty(coreDatabase.ConnectionString)) return; + + // Generate database definitions. + SbmDbDfnGenerator.Generate(SbmDbDfnGenerator.DatabaseInstance.BusinessMgr, coreDatabase.ConnectionString); + //SaUpdateLogDbDfnGenerator.Generate(database.ConnectionString); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusinessMgrCoreWebControl/Control/App/SbmLocaliser_Admin.cs b/SaBusinessMgrCoreWebControl/Control/App/SbmLocaliser_Admin.cs new file mode 100644 index 0000000..ba4ee04 --- /dev/null +++ b/SaBusinessMgrCoreWebControl/Control/App/SbmLocaliser_Admin.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.Localization; +using Sarand.BusinessMgr.Net.Core.Web.App; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Web +{ + // + /// Dummy classes to group shared resources - named as per '.resx' file in root namespace. + /// Required to create the IStringLocalizer instance using the type from the class. + /// Name of the class is used as the prefix for localisation filenames. + /// Resource files are in the Localization ResourcesPath in Startup.cs. + /// + public class SbmControlProperties { } + // Class must be in Root/Default Namespace to reference properties with same name. + // NB 'Assembly name' must be the same as 'Default Namespace' until 'Root Namespace' can be set (.Net Core 2.1?). + // Ref. Project Properties - Application. +} + +namespace Sarand.BusinessMgr.Net.Core.Web.Control.App +{ + //======================================================================= + public class SbmLocaliser_Admin : SbmLocaliser + { + //------------------------------------------------------------------- + // Data members. + private readonly IStringLocalizer webAppProperties; + + //------------------------------------------------------------------- + /// + /// Localisers are supplied using construction injection. + /// + public SbmLocaliser_Admin(IStringLocalizer webAppProperties) + { + this.webAppProperties = webAppProperties; + } + + //------------------------------------------------------------------- + // Properties. + public override IStringLocalizer MainProperties { get { return webAppProperties; } } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusinessMgrCoreWebControl/Control/App/SbmStartup_Admin.cs b/SaBusinessMgrCoreWebControl/Control/App/SbmStartup_Admin.cs new file mode 100644 index 0000000..39dca17 --- /dev/null +++ b/SaBusinessMgrCoreWebControl/Control/App/SbmStartup_Admin.cs @@ -0,0 +1,72 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Sarand.BusinessMgr.Net.Core.Web.App; +using Sarand.BusinessMgr.Net.Standard.Base.App; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.BusinessMgr.Net.Core.Web.Control.App +{ + //======================================================================= + public class SbmStartup_Admin : SbmStartup_Web + { + //------------------------------------------------------------------- + // Data members. + private SbmApplication_Admin application = null; + + //------------------------------------------------------------------- + // Construction. + public SbmStartup_Admin(IConfiguration configuration) : + base(configuration) + { + // Initialise application. + application = new SbmApplication_Admin(Configuration); + } + + //------------------------------------------------------------------- + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // Common configuration. + ConfigureServicesConfig configureServicesConfig = new ConfigureServicesConfig(); + configureServicesConfig.services = services; + configureServicesConfig.sessionCookieName = Sbm.Config.Admin.Session.Cookie.Name; + configureServicesConfig.sessionCookieHttpOnly = Sbm.Config.Admin.Session.Cookie.HttpOnly; + configureServicesConfig.sessionIdleTimeout = Sbm.Config.Admin.Session.Cookie.IdleTimeout; + ConfigureServices(configureServicesConfig); + + // Application localisation. + services.AddSingleton(); + + services.Configure(options => + { + // This lambda determines whether user consent for non-essential cookies is needed for a given request. + options.CheckConsentNeeded = context => true; + options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None; + }); + } + + //------------------------------------------------------------------- + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostApplicationLifetime hostApplicationLifetime, IWebHostEnvironment env) + { + application.InitWebHostEnvironment(env); + + // Common configuration. + ConfigureConfig configureConfig = new ConfigureConfig(); + configureConfig.app = app; + configureConfig.hostApplicationLifetime = hostApplicationLifetime; + configureConfig.env = env; + Configure(configureConfig); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaBusinessMgrCoreWebOnline/Controllers/HomeController.cs b/SaBusinessMgrCoreWebControl/Controllers/HomeController.cs similarity index 89% rename from SaBusinessMgrCoreWebOnline/Controllers/HomeController.cs rename to SaBusinessMgrCoreWebControl/Controllers/HomeController.cs index d3a670f..8c1ebd5 100644 --- a/SaBusinessMgrCoreWebOnline/Controllers/HomeController.cs +++ b/SaBusinessMgrCoreWebControl/Controllers/HomeController.cs @@ -1,13 +1,13 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -using SaBusinessMgrCoreWebOnline.Models; +using SaBusinessMgrCoreWebAdmin.Models; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; -namespace SaBusinessMgrCoreWebOnline.Controllers +namespace SaBusinessMgrCoreWebAdmin.Controllers { public class HomeController : Controller { diff --git a/SaBusinessMgrCoreWebControl/Localisation/SbmControlProperties.resx b/SaBusinessMgrCoreWebControl/Localisation/SbmControlProperties.resx new file mode 100644 index 0000000..067569a --- /dev/null +++ b/SaBusinessMgrCoreWebControl/Localisation/SbmControlProperties.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Code + + + Email + + + Name + + \ No newline at end of file diff --git a/SaBusinessMgrCoreWebOnline/Models/ErrorViewModel.cs b/SaBusinessMgrCoreWebControl/Models/ErrorViewModel.cs similarity index 78% rename from SaBusinessMgrCoreWebOnline/Models/ErrorViewModel.cs rename to SaBusinessMgrCoreWebControl/Models/ErrorViewModel.cs index 7222ae4..c3801db 100644 --- a/SaBusinessMgrCoreWebOnline/Models/ErrorViewModel.cs +++ b/SaBusinessMgrCoreWebControl/Models/ErrorViewModel.cs @@ -1,6 +1,6 @@ using System; -namespace SaBusinessMgrCoreWebOnline.Models +namespace SaBusinessMgrCoreWebAdmin.Models { public class ErrorViewModel { diff --git a/SaBusinessMgrCoreWebControl/Properties/launchSettings.json b/SaBusinessMgrCoreWebControl/Properties/launchSettings.json new file mode 100644 index 0000000..8028faa --- /dev/null +++ b/SaBusinessMgrCoreWebControl/Properties/launchSettings.json @@ -0,0 +1,29 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:5683", + "sslPort": 44307 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" + } + }, + "SaBusinessMgrCoreWebAdmin": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" + } + } + } +} diff --git a/SaBusinessMgrCoreWebControl/SaBusinessMgrCoreWebControl.csproj b/SaBusinessMgrCoreWebControl/SaBusinessMgrCoreWebControl.csproj new file mode 100644 index 0000000..0b92550 --- /dev/null +++ b/SaBusinessMgrCoreWebControl/SaBusinessMgrCoreWebControl.csproj @@ -0,0 +1,29 @@ + + + + netcoreapp3.1 + false + Sarand.BusinessMgr.Net.Core.Web + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SaBusinessMgrCoreWebOnline/Views/Home/Index.cshtml b/SaBusinessMgrCoreWebControl/Views/Home/Index.cshtml similarity index 100% rename from SaBusinessMgrCoreWebOnline/Views/Home/Index.cshtml rename to SaBusinessMgrCoreWebControl/Views/Home/Index.cshtml diff --git a/SaBusinessMgrCoreWebOnline/Views/Home/Privacy.cshtml b/SaBusinessMgrCoreWebControl/Views/Home/Privacy.cshtml similarity index 100% rename from SaBusinessMgrCoreWebOnline/Views/Home/Privacy.cshtml rename to SaBusinessMgrCoreWebControl/Views/Home/Privacy.cshtml diff --git a/SaBusinessMgrCoreWebOnline/Views/Shared/Error.cshtml b/SaBusinessMgrCoreWebControl/Views/Shared/Error.cshtml similarity index 100% rename from SaBusinessMgrCoreWebOnline/Views/Shared/Error.cshtml rename to SaBusinessMgrCoreWebControl/Views/Shared/Error.cshtml diff --git a/SaBusinessMgrCoreWebOnline/Views/Shared/_Layout.cshtml b/SaBusinessMgrCoreWebControl/Views/Shared/_Layout.cshtml similarity index 88% rename from SaBusinessMgrCoreWebOnline/Views/Shared/_Layout.cshtml rename to SaBusinessMgrCoreWebControl/Views/Shared/_Layout.cshtml index e6318d4..ab5a891 100644 --- a/SaBusinessMgrCoreWebOnline/Views/Shared/_Layout.cshtml +++ b/SaBusinessMgrCoreWebControl/Views/Shared/_Layout.cshtml @@ -3,7 +3,7 @@ - @ViewData["Title"] - SaBusinessMgrCoreWebOnline + @ViewData["Title"] - SaBusinessMgrCoreWebAdmin @@ -11,7 +11,7 @@