Add accounts page
This commit is contained in:
@ -33,6 +33,7 @@
|
|||||||
<RadzenPanelMenuItem Text="Объекты" Icon="business_center">
|
<RadzenPanelMenuItem Text="Объекты" Icon="business_center">
|
||||||
<RadzenPanelMenuItem Path="/objects/houses" Text="Жилищный фонд" />
|
<RadzenPanelMenuItem Path="/objects/houses" Text="Жилищный фонд" />
|
||||||
<RadzenPanelMenuItem Path="/objects/supply-contracts" Text="Договора ресурсоснабжения" />
|
<RadzenPanelMenuItem Path="/objects/supply-contracts" Text="Договора ресурсоснабжения" />
|
||||||
|
<RadzenPanelMenuItem Path="/objects/accounts" Text="Лицевые счета" />
|
||||||
</RadzenPanelMenuItem>
|
</RadzenPanelMenuItem>
|
||||||
<RadzenPanelMenuItem Text="Справочники" Icon="book_2">
|
<RadzenPanelMenuItem Text="Справочники" Icon="book_2">
|
||||||
<RadzenPanelMenuItem Path="/registry/common" Text="Общие" />
|
<RadzenPanelMenuItem Path="/registry/common" Text="Общие" />
|
||||||
|
|||||||
59
Hcs.WebApp/Components/Pages/Objects/Accounts.razor
Normal file
59
Hcs.WebApp/Components/Pages/Objects/Accounts.razor
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
@page "/objects/accounts"
|
||||||
|
|
||||||
|
@using Hcs.WebApp.Services
|
||||||
|
@using Microsoft.AspNetCore.Authorization
|
||||||
|
@using System.Security.Claims
|
||||||
|
|
||||||
|
@inherits DataPageBase<Account>
|
||||||
|
|
||||||
|
@attribute [Authorize]
|
||||||
|
|
||||||
|
@inject AccountService AccountService
|
||||||
|
|
||||||
|
<PageTitle>Лицевые счета</PageTitle>
|
||||||
|
|
||||||
|
<AuthorizedContent Roles="@($"{AppRole.ADMINISTRATOR_TYPE},{AppRole.OPERATOR_TYPE}")">
|
||||||
|
<Content>
|
||||||
|
<RadzenStack>
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="12" SizeMD="6">
|
||||||
|
<RadzenText Text="Лицевые счета" TextStyle="TextStyle.H5" class="rz-m-0" />
|
||||||
|
</RadzenColumn>
|
||||||
|
<RadzenColumn Size="12" SizeMD="6">
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||||
|
<RadzenButton Icon="upload_file" Text="@parseButtonText" Disabled="@(state != DataPageState.Idle)" Click="@ParseDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
||||||
|
<RadzenButton Icon="sync" Text="@syncButtonText" Disabled="@(state != DataPageState.Idle)" Click="@SyncDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
<RadzenRow>
|
||||||
|
<RadzenColumn SizeMD="12">
|
||||||
|
<RadzenDataGrid TItem="Account" Data="@data" IsLoading="@(state != DataPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn TItem="Account" Property="@nameof(SupplyContract.Id)" Title="ID" SortOrder="SortOrder.Descending" Resizable="false" Width="100px" MaxWidth="100px" />
|
||||||
|
<RadzenDataGridColumn TItem="Account" Property="@nameof(SupplyContract.HcsId)" Title="ID ГИС ЖКХ" />
|
||||||
|
<RadzenDataGridColumn TItem="Account" Property="@nameof(SupplyContract.ThirdPartyId)" Title="ID интеграции" />
|
||||||
|
<RadzenDataGridColumn TItem="Account" Property="@nameof(SupplyContract.SyncedAt)" Title="Дата синхронизации" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
</RadzenStack>
|
||||||
|
</Content>
|
||||||
|
</AuthorizedContent>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
protected override Campaign.CampaignType? SyncCampaignType => Campaign.CampaignType.ExportSupplyContracts_15_7_0_1;
|
||||||
|
|
||||||
|
protected override Campaign.CampaignType? ParseCampaignType => null;
|
||||||
|
|
||||||
|
protected override bool HasPermission(ClaimsPrincipal user)
|
||||||
|
{
|
||||||
|
return user.IsOperatorOrHigher();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Task<IEnumerable<Account>> GetDataAsync()
|
||||||
|
{
|
||||||
|
return AccountService.GetAllAccountsAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -4,7 +4,7 @@
|
|||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@using System.Security.Claims
|
@using System.Security.Claims
|
||||||
|
|
||||||
@inherits SyncedPageBase<House>
|
@inherits DataPageBase<House>
|
||||||
|
|
||||||
@attribute [Authorize]
|
@attribute [Authorize]
|
||||||
|
|
||||||
@ -21,13 +21,13 @@
|
|||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
<RadzenColumn Size="12" SizeMD="6">
|
<RadzenColumn Size="12" SizeMD="6">
|
||||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||||
<RadzenButton Icon="upload_file" Text="@parseButtonText" Disabled="@(state != SyncedPageState.Idle)" Click="@ParseDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
<RadzenButton Icon="upload_file" Text="@parseButtonText" Disabled="@(state != DataPageState.Idle)" Click="@ParseDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
<RadzenRow>
|
<RadzenRow>
|
||||||
<RadzenColumn SizeMD="12">
|
<RadzenColumn SizeMD="12">
|
||||||
<RadzenDataGrid TItem="House" Data="@data" IsLoading="@(state != SyncedPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true">
|
<RadzenDataGrid TItem="House" Data="@data" IsLoading="@(state != DataPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true">
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDataGridColumn TItem="House" Property="@nameof(House.Id)" Title="ID" SortOrder="SortOrder.Descending" Resizable="false" Width="100px" MaxWidth="100px" />
|
<RadzenDataGridColumn TItem="House" Property="@nameof(House.Id)" Title="ID" SortOrder="SortOrder.Descending" Resizable="false" Width="100px" MaxWidth="100px" />
|
||||||
<RadzenDataGridColumn TItem="House" Property="@nameof(House.FiasId)" Title="ID ФИАС" />
|
<RadzenDataGridColumn TItem="House" Property="@nameof(House.FiasId)" Title="ID ФИАС" />
|
||||||
@ -59,7 +59,9 @@
|
|||||||
</AuthorizedContent>
|
</AuthorizedContent>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
protected override Campaign.CampaignType CampaignType => Campaign.CampaignType.ParseHousesData_15_7_0_1;
|
protected override Campaign.CampaignType? SyncCampaignType => null;
|
||||||
|
|
||||||
|
protected override Campaign.CampaignType? ParseCampaignType => Campaign.CampaignType.ParseHousesData_15_7_0_1;
|
||||||
|
|
||||||
protected override bool HasPermission(ClaimsPrincipal user)
|
protected override bool HasPermission(ClaimsPrincipal user)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@using System.Security.Claims
|
@using System.Security.Claims
|
||||||
|
|
||||||
@inherits SyncedPageBase<SupplyContract>
|
@inherits DataPageBase<SupplyContract>
|
||||||
|
|
||||||
@attribute [Authorize]
|
@attribute [Authorize]
|
||||||
|
|
||||||
@ -21,13 +21,13 @@
|
|||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
<RadzenColumn Size="12" SizeMD="6">
|
<RadzenColumn Size="12" SizeMD="6">
|
||||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||||
<RadzenButton Icon="sync" Text="@syncButtonText" Disabled="@(state != SyncedPageState.Idle)" Click="@SyncDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
<RadzenButton Icon="sync" Text="@syncButtonText" Disabled="@(state != DataPageState.Idle)" Click="@SyncDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
<RadzenRow>
|
<RadzenRow>
|
||||||
<RadzenColumn SizeMD="12">
|
<RadzenColumn SizeMD="12">
|
||||||
<RadzenDataGrid TItem="SupplyContract" Data="@data" IsLoading="@(state != SyncedPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true">
|
<RadzenDataGrid TItem="SupplyContract" Data="@data" IsLoading="@(state != DataPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true">
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDataGridColumn TItem="SupplyContract" Property="@nameof(SupplyContract.Id)" Title="ID" SortOrder="SortOrder.Descending" Resizable="false" Width="100px" MaxWidth="100px" />
|
<RadzenDataGridColumn TItem="SupplyContract" Property="@nameof(SupplyContract.Id)" Title="ID" SortOrder="SortOrder.Descending" Resizable="false" Width="100px" MaxWidth="100px" />
|
||||||
<RadzenDataGridColumn TItem="SupplyContract" Property="@nameof(SupplyContract.HcsId)" Title="ID ГИС ЖКХ" />
|
<RadzenDataGridColumn TItem="SupplyContract" Property="@nameof(SupplyContract.HcsId)" Title="ID ГИС ЖКХ" />
|
||||||
@ -42,7 +42,9 @@
|
|||||||
</AuthorizedContent>
|
</AuthorizedContent>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
protected override Campaign.CampaignType CampaignType => Campaign.CampaignType.ExportSupplyContracts_15_7_0_1;
|
protected override Campaign.CampaignType? SyncCampaignType => Campaign.CampaignType.ExportSupplyContracts_15_7_0_1;
|
||||||
|
|
||||||
|
protected override Campaign.CampaignType? ParseCampaignType => null;
|
||||||
|
|
||||||
protected override bool HasPermission(ClaimsPrincipal user)
|
protected override bool HasPermission(ClaimsPrincipal user)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@using System.Security.Claims
|
@using System.Security.Claims
|
||||||
|
|
||||||
@inherits SyncedPageBase<Registry>
|
@inherits DataPageBase<Registry>
|
||||||
|
|
||||||
@attribute [Authorize]
|
@attribute [Authorize]
|
||||||
|
|
||||||
@ -22,13 +22,13 @@
|
|||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
<RadzenColumn Size="12" SizeMD="6">
|
<RadzenColumn Size="12" SizeMD="6">
|
||||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||||
<RadzenButton Icon="sync" Text="@syncButtonText" Disabled="@(state != SyncedPageState.Idle)" Click="@SyncDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
<RadzenButton Icon="sync" Text="@syncButtonText" Disabled="@(state != DataPageState.Idle)" Click="@SyncDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
<RadzenRow>
|
<RadzenRow>
|
||||||
<RadzenColumn SizeMD="12">
|
<RadzenColumn SizeMD="12">
|
||||||
<RadzenDataGrid TItem="Registry" Data="@data" RowExpand="@RowExpandAsync" IsLoading="@(state != SyncedPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true" ExpandMode="DataGridExpandMode.Single">
|
<RadzenDataGrid TItem="Registry" Data="@data" RowExpand="@RowExpandAsync" IsLoading="@(state != DataPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true" ExpandMode="DataGridExpandMode.Single">
|
||||||
<Template Context="registry">
|
<Template Context="registry">
|
||||||
<RadzenDataGrid Data="@registry.Elements" AllowFiltering="true" AllowSorting="true">
|
<RadzenDataGrid Data="@registry.Elements" AllowFiltering="true" AllowSorting="true">
|
||||||
<Columns>
|
<Columns>
|
||||||
@ -55,7 +55,9 @@
|
|||||||
</AuthorizedContent>
|
</AuthorizedContent>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
protected override Campaign.CampaignType CampaignType => Campaign.CampaignType.ExportCommonRegistryElements_15_7_0_1;
|
protected override Campaign.CampaignType? SyncCampaignType => Campaign.CampaignType.ExportCommonRegistryElements_15_7_0_1;
|
||||||
|
|
||||||
|
protected override Campaign.CampaignType? ParseCampaignType => null;
|
||||||
|
|
||||||
protected override bool HasPermission(ClaimsPrincipal user)
|
protected override bool HasPermission(ClaimsPrincipal user)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@using System.Security.Claims
|
@using System.Security.Claims
|
||||||
|
|
||||||
@inherits SyncedPageBase<Registry>
|
@inherits DataPageBase<Registry>
|
||||||
|
|
||||||
@attribute [Authorize]
|
@attribute [Authorize]
|
||||||
|
|
||||||
@ -22,13 +22,13 @@
|
|||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
<RadzenColumn Size="12" SizeMD="6">
|
<RadzenColumn Size="12" SizeMD="6">
|
||||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||||
<RadzenButton Icon="sync" Text="@syncButtonText" Disabled="@(state != SyncedPageState.Idle)" Click="@SyncDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
<RadzenButton Icon="sync" Text="@syncButtonText" Disabled="@(state != DataPageState.Idle)" Click="@SyncDataAsync" ButtonStyle="ButtonStyle.Primary" />
|
||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
<RadzenRow>
|
<RadzenRow>
|
||||||
<RadzenColumn SizeMD="12">
|
<RadzenColumn SizeMD="12">
|
||||||
<RadzenDataGrid TItem="Registry" Data="@data" RowExpand="@RowExpandAsync" IsLoading="@(state != SyncedPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true" ExpandMode="DataGridExpandMode.Single">
|
<RadzenDataGrid TItem="Registry" Data="@data" RowExpand="@RowExpandAsync" IsLoading="@(state != DataPageState.Idle)" AllowFiltering="true" AllowPaging="true" ShowPagingSummary="true" PageSizeOptions=@(new int[] { 5, 10, 20, 30 }) AllowSorting="true" ExpandMode="DataGridExpandMode.Single">
|
||||||
<Template Context="registry">
|
<Template Context="registry">
|
||||||
<RadzenDataGrid Data="@registry.Elements" AllowFiltering="true" AllowSorting="true">
|
<RadzenDataGrid Data="@registry.Elements" AllowFiltering="true" AllowSorting="true">
|
||||||
<Columns>
|
<Columns>
|
||||||
@ -55,7 +55,9 @@
|
|||||||
</AuthorizedContent>
|
</AuthorizedContent>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
protected override Campaign.CampaignType CampaignType => Campaign.CampaignType.ExportPrivateRegistryElements_15_7_0_1;
|
protected override Campaign.CampaignType? SyncCampaignType => Campaign.CampaignType.ExportPrivateRegistryElements_15_7_0_1;
|
||||||
|
|
||||||
|
protected override Campaign.CampaignType? ParseCampaignType => null;
|
||||||
|
|
||||||
protected override bool HasPermission(ClaimsPrincipal user)
|
protected override bool HasPermission(ClaimsPrincipal user)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -10,14 +10,18 @@ using System.Security.Claims;
|
|||||||
|
|
||||||
namespace Hcs.WebApp.Components.Shared
|
namespace Hcs.WebApp.Components.Shared
|
||||||
{
|
{
|
||||||
public abstract class SyncedPageBase<TData> : ComponentBase, IDisposable
|
public abstract class DataPageBase<TData> : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
protected SyncedPageState state;
|
protected DataPageState state;
|
||||||
protected IEnumerable<TData> data;
|
protected IEnumerable<TData> data;
|
||||||
protected string syncButtonText = "...";
|
protected string syncButtonText = "...";
|
||||||
protected string parseButtonText = "...";
|
protected string parseButtonText = "...";
|
||||||
|
|
||||||
protected abstract Campaign.CampaignType CampaignType { get; }
|
private readonly List<Campaign.CampaignType> campaignTypes = [];
|
||||||
|
|
||||||
|
protected abstract Campaign.CampaignType? SyncCampaignType { get; }
|
||||||
|
|
||||||
|
protected abstract Campaign.CampaignType? ParseCampaignType { get; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
private AuthenticationStateProvider AuthenticationStateProvider { get; set; }
|
private AuthenticationStateProvider AuthenticationStateProvider { get; set; }
|
||||||
@ -31,20 +35,34 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected DialogService DialogService { get; set; }
|
protected DialogService DialogService { get; set; }
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
campaignTypes.Clear();
|
||||||
|
|
||||||
|
if (SyncCampaignType.HasValue)
|
||||||
|
{
|
||||||
|
campaignTypes.Add(SyncCampaignType.Value);
|
||||||
|
}
|
||||||
|
if (ParseCampaignType.HasValue)
|
||||||
|
{
|
||||||
|
campaignTypes.Add(ParseCampaignType.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
ChangeState(SyncedPageState.Init);
|
ChangeState(DataPageState.Init);
|
||||||
|
|
||||||
var finalState = SyncedPageState.Idle;
|
var finalState = DataPageState.Idle;
|
||||||
var state = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
var state = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
if (HasPermission(state.User))
|
if (HasPermission(state.User))
|
||||||
{
|
{
|
||||||
var operationInProgress = await HeadquartersService.HasActiveCampaignAsync(CampaignType);
|
var operationInProgress = await HeadquartersService.HasActiveCampaignsAsync(campaignTypes);
|
||||||
if (operationInProgress)
|
if (operationInProgress)
|
||||||
{
|
{
|
||||||
finalState = SyncedPageState.SyncWaiting;
|
finalState = DataPageState.DataWaiting;
|
||||||
}
|
}
|
||||||
|
|
||||||
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
|
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
|
||||||
@ -69,29 +87,29 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
|
|
||||||
protected async Task SyncDataAsync()
|
protected async Task SyncDataAsync()
|
||||||
{
|
{
|
||||||
if (state == SyncedPageState.SyncWaiting) return;
|
if (state == DataPageState.DataWaiting) return;
|
||||||
|
|
||||||
ChangeState(SyncedPageState.SyncWaiting);
|
ChangeState(DataPageState.DataWaiting);
|
||||||
|
|
||||||
if (await HeadquartersService.HasActiveCampaignAsync(CampaignType))
|
if (await HeadquartersService.HasActiveCampaignsAsync(campaignTypes))
|
||||||
{
|
{
|
||||||
ChangeState(SyncedPageState.SyncWaiting);
|
ChangeState(DataPageState.DataWaiting);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: Use user id
|
// TODO: Use user id
|
||||||
var campaign = await HeadquartersService.InitiateCampaignAsync(CampaignType, "");
|
var campaign = await HeadquartersService.InitiateCampaignAsync(SyncCampaignType!.Value, "");
|
||||||
CampaignManagementState.EnqueueCampaign(campaign);
|
CampaignManagementState.EnqueueCampaign(campaign);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ParseDataAsync()
|
protected async Task ParseDataAsync()
|
||||||
{
|
{
|
||||||
if (state == SyncedPageState.SyncWaiting) return;
|
if (state == DataPageState.DataWaiting) return;
|
||||||
|
|
||||||
if (await HeadquartersService.HasActiveCampaignAsync(CampaignType))
|
if (await HeadquartersService.HasActiveCampaignsAsync(campaignTypes))
|
||||||
{
|
{
|
||||||
ChangeState(SyncedPageState.SyncWaiting);
|
ChangeState(DataPageState.DataWaiting);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -112,10 +130,10 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
|
|
||||||
if (dialogResult != null)
|
if (dialogResult != null)
|
||||||
{
|
{
|
||||||
ChangeState(SyncedPageState.SyncWaiting);
|
ChangeState(DataPageState.DataWaiting);
|
||||||
|
|
||||||
// TODO: Use user id
|
// TODO: Use user id
|
||||||
var campaign = await HeadquartersService.InitiateCampaignAsync(CampaignType, "", new CampaignParseArgs()
|
var campaign = await HeadquartersService.InitiateCampaignAsync(ParseCampaignType!.Value, "", new CampaignParseArgs()
|
||||||
{
|
{
|
||||||
fileToParseId = (int)dialogResult
|
fileToParseId = (int)dialogResult
|
||||||
});
|
});
|
||||||
@ -124,7 +142,7 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChangeState(SyncedPageState state)
|
private void ChangeState(DataPageState state)
|
||||||
{
|
{
|
||||||
if (this.state == state) return;
|
if (this.state == state) return;
|
||||||
|
|
||||||
@ -138,18 +156,18 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case SyncedPageState.Init:
|
case DataPageState.Init:
|
||||||
syncButtonText = "...";
|
syncButtonText = "...";
|
||||||
parseButtonText = "...";
|
parseButtonText = "...";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SyncedPageState.Loading:
|
case DataPageState.Loading:
|
||||||
case SyncedPageState.Idle:
|
case DataPageState.Idle:
|
||||||
syncButtonText = "Синхронизировать";
|
syncButtonText = "Синхронизировать";
|
||||||
parseButtonText = "Спарсить";
|
parseButtonText = "Спарсить";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SyncedPageState.SyncWaiting:
|
case DataPageState.DataWaiting:
|
||||||
syncButtonText = "Идет синхронизация...";
|
syncButtonText = "Идет синхронизация...";
|
||||||
parseButtonText = "Идет парсинг...";
|
parseButtonText = "Идет парсинг...";
|
||||||
break;
|
break;
|
||||||
@ -158,15 +176,15 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
|
|
||||||
private void OnCampaignCreated(Campaign campaign)
|
private void OnCampaignCreated(Campaign campaign)
|
||||||
{
|
{
|
||||||
if (campaign.Type == CampaignType)
|
if (campaignTypes.Contains(campaign.Type))
|
||||||
{
|
{
|
||||||
InvokeAsync(() => ChangeState(SyncedPageState.SyncWaiting));
|
InvokeAsync(() => ChangeState(DataPageState.DataWaiting));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCampaignEnded(int campaignId, Campaign.CampaignType type, DateTime endedAt, string failureReason)
|
private void OnCampaignEnded(int campaignId, Campaign.CampaignType type, DateTime endedAt, string failureReason)
|
||||||
{
|
{
|
||||||
if (type == CampaignType)
|
if (campaignTypes.Contains(type))
|
||||||
{
|
{
|
||||||
Task.Run(RefreshData);
|
Task.Run(RefreshData);
|
||||||
}
|
}
|
||||||
@ -174,7 +192,7 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
|
|
||||||
private async Task RefreshData()
|
private async Task RefreshData()
|
||||||
{
|
{
|
||||||
await InvokeAsync(() => ChangeState(SyncedPageState.Loading));
|
await InvokeAsync(() => ChangeState(DataPageState.Loading));
|
||||||
|
|
||||||
var refreshedData = await GetDataAsync();
|
var refreshedData = await GetDataAsync();
|
||||||
|
|
||||||
@ -182,7 +200,7 @@ namespace Hcs.WebApp.Components.Shared
|
|||||||
{
|
{
|
||||||
data = refreshedData;
|
data = refreshedData;
|
||||||
|
|
||||||
ChangeState(SyncedPageState.Idle);
|
ChangeState(DataPageState.Idle);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,10 +1,10 @@
|
|||||||
namespace Hcs.WebApp.Components.Shared
|
namespace Hcs.WebApp.Components.Shared
|
||||||
{
|
{
|
||||||
public enum SyncedPageState
|
public enum DataPageState
|
||||||
{
|
{
|
||||||
Init,
|
Init,
|
||||||
Loading,
|
Loading,
|
||||||
Idle,
|
Idle,
|
||||||
SyncWaiting
|
DataWaiting
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,6 +73,7 @@ builder.Services.AddScoped<RegistryService>();
|
|||||||
builder.Services.AddScoped<HouseService>();
|
builder.Services.AddScoped<HouseService>();
|
||||||
builder.Services.AddScoped<FileToParseService>();
|
builder.Services.AddScoped<FileToParseService>();
|
||||||
builder.Services.AddScoped<SupplyContractService>();
|
builder.Services.AddScoped<SupplyContractService>();
|
||||||
|
builder.Services.AddScoped<AccountService>();
|
||||||
|
|
||||||
builder.Services.AddSingleton<CampaignManagementState>();
|
builder.Services.AddSingleton<CampaignManagementState>();
|
||||||
builder.Services.AddSingleton<OperationExecutionState>();
|
builder.Services.AddSingleton<OperationExecutionState>();
|
||||||
|
|||||||
30
Hcs.WebApp/Services/AccountService.cs
Normal file
30
Hcs.WebApp/Services/AccountService.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using EFCore.BulkExtensions;
|
||||||
|
using Hcs.WebApp.Data.Hcs;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace Hcs.WebApp.Services
|
||||||
|
{
|
||||||
|
public class AccountService(IDbContextFactory<HcsDbContext> factory) : HcsServiceBase(factory)
|
||||||
|
{
|
||||||
|
public async Task<IEnumerable<Account>> GetAllAccountsAsync()
|
||||||
|
{
|
||||||
|
using var context = GetNewContext();
|
||||||
|
return await context.Accounts.ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task UpsertAccounts(HcsDbContext context, IEnumerable<Account> accounts)
|
||||||
|
{
|
||||||
|
await context.BulkInsertOrUpdateAsync(accounts, new BulkConfig()
|
||||||
|
{
|
||||||
|
PropertiesToExcludeOnUpdate =
|
||||||
|
[
|
||||||
|
nameof(SupplyContract.ThirdPartyId)
|
||||||
|
],
|
||||||
|
UpdateByProperties =
|
||||||
|
[
|
||||||
|
nameof(SupplyContract.HcsId)
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,10 +6,10 @@ namespace Hcs.WebApp.Services
|
|||||||
{
|
{
|
||||||
public class HeadquartersService(IDbContextFactory<HcsDbContext> factory) : HcsServiceBase(factory)
|
public class HeadquartersService(IDbContextFactory<HcsDbContext> factory) : HcsServiceBase(factory)
|
||||||
{
|
{
|
||||||
public async Task<bool> HasActiveCampaignAsync(Campaign.CampaignType type)
|
public async Task<bool> HasActiveCampaignsAsync(IEnumerable<Campaign.CampaignType> types)
|
||||||
{
|
{
|
||||||
using var context = GetNewContext();
|
using var context = GetNewContext();
|
||||||
return await context.Campaigns.AnyAsync(x => x.Type == type && !x.EndedAt.HasValue);
|
return await context.Campaigns.AnyAsync(x => types.Contains(x.Type) && !x.EndedAt.HasValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<Campaign>> GetCampaignsAsync()
|
public async Task<IEnumerable<Campaign>> GetCampaignsAsync()
|
||||||
|
|||||||
Reference in New Issue
Block a user