From 1ba1576943e7a3f5db27e05dd252663189b105fa Mon Sep 17 00:00:00 2001 From: "HOME-LAPTOP\\kshkulev" Date: Sun, 23 Nov 2025 18:08:51 +0900 Subject: [PATCH] Add supply contracts page --- .../ExportSupplyContractsManager_15_7_0_1.cs | 27 +++++++++ .../CampaignManagers/ManagerFactory.cs | 3 +- Hcs.WebApp/Components/Layout/MainLayout.razor | 1 + .../Components/Pages/Objects/Houses.razor | 2 - .../Pages/Objects/SupplyContracts.razor | 56 +++++++++++++++++++ Hcs.WebApp/Data/Hcs/Campaign.cs | 5 +- Hcs.WebApp/Program.cs | 1 + Hcs.WebApp/Services/SupplyContractService.cs | 31 ++++++++++ 8 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 Hcs.WebApp/BackgroundServices/CampaignManagers/ExportSupplyContractsManager_15_7_0_1.cs create mode 100644 Hcs.WebApp/Components/Pages/Objects/SupplyContracts.razor create mode 100644 Hcs.WebApp/Services/SupplyContractService.cs diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportSupplyContractsManager_15_7_0_1.cs b/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportSupplyContractsManager_15_7_0_1.cs new file mode 100644 index 0000000..35c5c14 --- /dev/null +++ b/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportSupplyContractsManager_15_7_0_1.cs @@ -0,0 +1,27 @@ +using Hcs.WebApp.Data.Hcs; + +namespace Hcs.WebApp.BackgroundServices.CampaignManagers +{ + public class ExportSupplyContractsManager_15_7_0_1( + IServiceScopeFactory scopeFactory, + OperationExecutionState operationExecutionState, + ResultGetState resultGetState, + DataParsingState dataParsingState, + Campaign campaign) : ManagerBase(scopeFactory, operationExecutionState, resultGetState, dataParsingState, campaign) + { + private enum Step + { + Start = 0, + ExecutionWait = 1, + ResultWait = 2, + End = 3 + } + + protected override int StepCount => Enum.GetValues(typeof(Step)).Length; + + public override async Task ProcessAsync() + { + throw new NotImplementedException(); + } + } +} diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerFactory.cs b/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerFactory.cs index abca7c7..1c38c3c 100644 --- a/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerFactory.cs +++ b/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerFactory.cs @@ -15,7 +15,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers { Campaign.CampaignType.ExportPrivateRegistryElements_15_7_0_1 => typeof(ExportPrivateRegistryElementsManager_15_7_0_1), Campaign.CampaignType.ExportCommonRegistryElements_15_7_0_1 => typeof(ExportCommonRegistryElementsManager_15_7_0_1), - Campaign.CampaignType.ParseHousesData_15_7_0_1 => typeof(ParseHousesDataManager_15_7_0_1) + Campaign.CampaignType.ParseHousesData_15_7_0_1 => typeof(ParseHousesDataManager_15_7_0_1), + Campaign.CampaignType.ExportSupplyContracts_15_7_0_1 => typeof(ExportSupplyContractsManager_15_7_0_1), }; var args = new object[] { serviceScopeFactory, operationExecutionState, resultGetState, dataParsingState, campaign }; var instance = Activator.CreateInstance(type, args); diff --git a/Hcs.WebApp/Components/Layout/MainLayout.razor b/Hcs.WebApp/Components/Layout/MainLayout.razor index b71a215..ab2185c 100644 --- a/Hcs.WebApp/Components/Layout/MainLayout.razor +++ b/Hcs.WebApp/Components/Layout/MainLayout.razor @@ -32,6 +32,7 @@ + diff --git a/Hcs.WebApp/Components/Pages/Objects/Houses.razor b/Hcs.WebApp/Components/Pages/Objects/Houses.razor index 3b84fe0..fc6e83a 100644 --- a/Hcs.WebApp/Components/Pages/Objects/Houses.razor +++ b/Hcs.WebApp/Components/Pages/Objects/Houses.razor @@ -1,6 +1,5 @@ @page "/objects/houses" -@using Hcs.WebApp.Components.Dialogs @using Hcs.WebApp.Services @using Microsoft.AspNetCore.Authorization @using System.Security.Claims @@ -10,7 +9,6 @@ @attribute [Authorize] @inject HouseService HouseService -@inject DialogService DialogService Жилищный фонд diff --git a/Hcs.WebApp/Components/Pages/Objects/SupplyContracts.razor b/Hcs.WebApp/Components/Pages/Objects/SupplyContracts.razor new file mode 100644 index 0000000..5a20b16 --- /dev/null +++ b/Hcs.WebApp/Components/Pages/Objects/SupplyContracts.razor @@ -0,0 +1,56 @@ +@page "/objects/supply-contracts" + +@using Hcs.WebApp.Services +@using Microsoft.AspNetCore.Authorization +@using System.Security.Claims + +@inherits SyncedPageBase + +@attribute [Authorize] + +@inject SupplyContractService SupplyContractService + +Договора ресурсоснабжения + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@code { + protected override Campaign.CampaignType CampaignType => Campaign.CampaignType.ExportSupplyContracts_15_7_0_1; + + protected override bool HasPermission(ClaimsPrincipal user) + { + return user.IsOperatorOrHigher(); + } + + protected override Task> GetDataAsync() + { + return SupplyContractService.GetAllSupplyContractsAsync(); + } +} diff --git a/Hcs.WebApp/Data/Hcs/Campaign.cs b/Hcs.WebApp/Data/Hcs/Campaign.cs index cf3bd47..c767e35 100644 --- a/Hcs.WebApp/Data/Hcs/Campaign.cs +++ b/Hcs.WebApp/Data/Hcs/Campaign.cs @@ -16,7 +16,10 @@ namespace Hcs.WebApp.Data.Hcs ExportPrivateRegistryElements_15_7_0_1, [Display(Description = "Парсинг данных домов")] - ParseHousesData_15_7_0_1 + ParseHousesData_15_7_0_1, + + [Display(Description = "Экспорт договоров ресурсоснабжения")] + ExportSupplyContracts_15_7_0_1, } public int Id { get; set; } diff --git a/Hcs.WebApp/Program.cs b/Hcs.WebApp/Program.cs index 912a550..c72ce9b 100644 --- a/Hcs.WebApp/Program.cs +++ b/Hcs.WebApp/Program.cs @@ -72,6 +72,7 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); diff --git a/Hcs.WebApp/Services/SupplyContractService.cs b/Hcs.WebApp/Services/SupplyContractService.cs new file mode 100644 index 0000000..161aaba --- /dev/null +++ b/Hcs.WebApp/Services/SupplyContractService.cs @@ -0,0 +1,31 @@ +using EFCore.BulkExtensions; +using Hcs.WebApp.Data.Hcs; +using Microsoft.EntityFrameworkCore; + +namespace Hcs.WebApp.Services +{ + public class SupplyContractService(IDbContextFactory factory) : HcsServiceBase(factory) + { + public async Task> GetAllSupplyContractsAsync() + { + using var context = GetNewContext(); + return await context.SupplyContracts.ToListAsync(); + } + + public async Task UpsertSupplyContracts(IEnumerable supplyContracts) + { + using var context = GetNewContext(); + await context.BulkInsertOrUpdateAsync(supplyContracts, new BulkConfig() + { + PropertiesToExcludeOnUpdate = + [ + nameof(SupplyContract.ThirdPartyId) + ], + UpdateByProperties = + [ + nameof(SupplyContract.HcsId) + ] + }); + } + } +}