TourIAm/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor

401 lines
14 KiB
Plaintext

@page "/user/companies"
@using AyCode.Core.Helpers
@using BlazorAnimation
@using TIAM.Core.Enums
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers
@using TIAM.Resources
@using TIAM.Services
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers
@using AyCode.Services.SignalRs
@using TIAMWebApp.Shared.Application.Services
@using MessagePack
@using MessagePack.Resolvers
@using AyCode.Core.Extensions;
@using AyCode.Utils.Extensions
@layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> localizer
@inject IWizardProcessor wizardProcessor
@inject IServiceProviderDataService serviceProviderDataService
@inject IUserDataService userDataService
@inject ISessionService sessionService
@inject AdminSignalRClient AdminSignalRClient;
<PageTitle>Admin - Companies</PageTitle>
<div class="text-center m-5">
<h1>Company management</h1>
<h2 style="font-size:small">Manage transfers here!</h2>
</div>
<DxPopup
@bind-Visible="@SetOwnerPopupVisible"
ShowFooter="true"
HeaderText="Set owner by adding E-mail address"
>
<BodyContentTemplate>
<label for="emailID" class="demo-text mt-4 mb-1">
Put user email here
</label>
<DxMaskedInput @bind-Value="@Email"
CssClass="cw-320"
Mask="@EmailMask"
InputId="emailID"
MaskMode="MaskMode.RegEx" />
</BodyContentTemplate>
<FooterContentTemplate>
<DxButton CssClass="popup-button my-1 ms-2" RenderStyle="ButtonRenderStyle.Primary" Text="OK" Click="@(() => SetOwnerPopupVisible = false)" />
@* <DxButton CssClass="popup-button my-1 ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Cancel" Click="@(() => SetOwnerPopupVisible = false)" /> *@
</FooterContentTemplate>
</DxPopup>
<DxPopup CssClass="popup-demo-events"
@bind-Visible="@SendMailPopupVisible"
ShowFooter="true"
CloseOnEscape="true"
CloseOnOutsideClick="false"
ShowCloseButton="false"
HeaderText="MessageBox"
Closing="EulaPopupClosing"
Closed="EulaPopupClosed">
<BodyContentTemplate>
<InputWizard Data=@_messageWizardModel
OnSubmit="SubmitForm"
IgnoreReflection=@IgnoreList
TitleResourceString="NewMessage"
SubtitleResourceString="NewMessageSubtitle"
SubmitButtonText="@localizer.GetString("ButtonSend")"></InputWizard>
</BodyContentTemplate>
<FooterContentTemplate Context="Context">
<div class="popup-demo-events-footer">
<!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox-->
<!--DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Primary" Text="OK" Click="Context.CloseCallback" /-->
<DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Cancel" Click="CancelCreateClick" />
</div>
</FooterContentTemplate>
</DxPopup>
<div class="container">
<div class="row">
<div class=" col-12">
<Animation Effect="@Effect.Pulse" Class="glass" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)">
<div class="card">
<DxGrid @ref="Grid2"
Data="ServiceProviderDataList"
AutoCollapseDetailRow="AutoCollapseDetailRow"
KeyboardNavigationEnabled="true"
CustomizeElement="Grid_CustomizeElement"
CustomizeEditModel="Grid_CustomizeEditModel"
EditModelSaving="Grid_EditModelSaving"
DataItemDeleting="Grid_DataItemDeleting"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
ShowFilterRow="true"
KeyFieldName="Id">
<Columns>
<DxGridCommandColumn NewButtonVisible="true" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="false" SortIndex="0" Visible="false" />
<DxGridDataColumn FieldName="Name" />
<DxGridDataColumn FieldName="OwnerId">
<CellDisplayTemplate>
@{
var keyField = context.Value as Guid?;
var keyItem = (Company)context.DataItem;
if (keyField.IsNullOrEmpty())
{
string buttonText = "Set owner";
<DxButton Click="() => SetOwnerPopup(keyItem)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary"/>
}
else
{
<span>@keyField</span>
}
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="AffiliateId" />
<DxGridDataColumn FieldName="CommissionPercent" />
<DxGridDataColumn FieldName="Created" />
@* <DxGridDataColumn FieldName="ContactEmail">
</DxGridDataColumn> *@
</Columns>
@* <DetailRowTemplate>
<CompaniesNestedUserProductMapping CurrentCompany="(TIAM.Entities.ServiceProviders.Company)context.DataItem" KeyboardNavigationEnabled="true" />
</DetailRowTemplate> *@
<DetailRowTemplate>
<AddressGridComponent AddressContext="(TIAM.Entities.ServiceProviders.Company)context.DataItem" ContextIdType="companyprofile" KeyboardNavigationEnabled="true" />
</DetailRowTemplate>
<EditFormTemplate Context="EditFormContext">
@{
var transfer2 = (Company)EditFormContext.EditModel;
}
<DxFormLayout CssClass="w-100">
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.LastName) ColSpanMd="6" ColSpanLg="6" ColSpanSm="12">
@EditFormContext.GetEditor("Name")
</DxFormLayoutItem>
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.LastName) ColSpanMd="6" ColSpanLg="6" ColSpanSm="12">
@EditFormContext.GetEditor("CommissionPercent")
</DxFormLayoutItem>
</DxFormLayout>
</EditFormTemplate>
</DxGrid>
</div>
</Animation>
</div>
<div class=" col-12 col-xl-6">
</div>
</div>
</div>
@code {
private LoggerClient<ManageServiceProviders> _logger;
//public Transfer myModel = new Transfer();
public List<Company> ServiceProviderDataList { get; set; }
bool SendMailPopupVisible { get; set; }
bool SetOwnerPopupVisible { get; set; }
public List<string> IgnoreList =
[
"ReceiverEmailAddress",
"ReceiverFullName",
"ReceiverId",
"SenderEmailAddress",
"SenderFullName",
"SenderId",
"ContextId",
];
private MessageWizardModel _messageWizardModel = new();
private string Email { get; set; } = "email@email.com";
string EmailMask { get; set; } = @"(\w|[.-])+@(\w|-)+\.(\w|-){2,4}";
DateTime StartDate { get; set; } = DateTime.Today;
DxSchedulerDataStorage _dataStorage = new();
void SendMail(Company item)
{
_logger.Info($"Sending mail to {item.OwnerId}, {item.Id}");
_messageWizardModel.ReceiverId = Guid.Parse("");
_messageWizardModel.ContextId = item.Id;
_messageWizardModel.SenderEmailAddress = "";
_messageWizardModel.ReceiverEmailAddress = "";
_messageWizardModel.ReceiverFullName = "";
SendMailPopupVisible = true;
}
void SetOwnerPopup(Company item)
{
_logger.Info($"Setting owner of {item.OwnerId}, {item.Id}");
SetOwnerPopupVisible = true;
}
async Task<Company> SetOwner(Guid CompanyId)
{
//get user id from DB
var userModelDto = await userDataService.GetUserByEmailAsync(Email);
//overwrite ServiceProvider ownerid
var target = await serviceProviderDataService.GetServiceProviderByIdAsync(CompanyId);
if (target == null)
{
return null;
}
else
{
target.OwnerId = userModelDto.Id;
var result = await serviceProviderDataService.UpdateServiceProviderAsync(target);
return result;
}
}
void CancelCreateClick()
{
SendMailPopupVisible = false;
}
void EulaPopupClosed()
{
//cancel clicked
}
void EulaPopupClosing(PopupClosingEventArgs args)
{
//myModel = new TransferWizardModel();
_messageWizardModel = new MessageWizardModel();
}
//-----------------------------------------------------------------------------------
public async Task SubmitForm(object result)
{
var messageModel = result as MessageWizardModel;
messageModel.ContextId = _messageWizardModel.ContextId;
//messageModel.SenderId = sessionService.User.UserId;
string FormatEmailContent()
{
return $@"
<html>
<body>
<p>Dear {messageModel.SenderFullName},</p>
<p>{messageModel.Content}:</p>
<p>Best regards,<br/>Tour I Am team</p>
</body>
</html>";
}
messageModel.Content = FormatEmailContent();
_logger.Info(messageModel.Content);
var email = await wizardProcessor.ProcessWizardAsync<MessageWizardModel>(result.GetType(), messageModel);
_logger.Info($"Submitted nested form: {result.GetType().FullName}");
}
void Grid_CustomizeElement(GridCustomizeElementEventArgs e)
{
//TODO mark non active partners
}
void Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e)
{
if (!e.IsNew)
{
}
else
{
var companyEditModel = (Company)e.EditModel; //TODO not valid cast
companyEditModel.Id = Guid.NewGuid();
companyEditModel.AffiliateId = Guid.NewGuid();
companyEditModel.Name = "Company name";
companyEditModel.OwnerId = Guid.Empty;
companyEditModel.ProfileId = Guid.NewGuid();
}
}
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
{
Company resultCompany = null;
if (e.IsNew)
{
_logger.Info("New company adding");
resultCompany = await serviceProviderDataService.CreateServiceProviderAsync((Company)e.EditModel);
}
else
{
_logger.Info("company updating at id " + ((Company)e.EditModel).Id);
resultCompany = await serviceProviderDataService.UpdateServiceProviderAsync((Company)e.EditModel);
}
if (resultCompany!=null)
{
//TODO: ne a teljes grid-et refresh-eljük, elég lenne csak az adott sort! - J.
await UpdateDataAsync();
}
}
async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e)
{
var company = (Company)e.DataItem;
//await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem);
//remove orderData from orderData array
_logger.Info($"companyData deleting; companyId: {company.Id}");
var response = await AdminSignalRClient.PostDataAsync(SignalRTags.RemoveCompanyAsync, company);
//resultCompany = await serviceProviderDataService.DeleteServiceProviderAsync(company.Id);
//await UpdateDataAsync();
}
async Task UpdateDataAsync()
{
ServiceProviderDataList = await serviceProviderDataService.GetServiceProvidersAsync();
//StateHasChanged();
_logger.Info("orderData grid refreshed");
}
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<ManageServiceProviders>(LogWriters.ToArray());
await UpdateDataAsync();
//var transfers = await devAdminSignalClient.GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersAsync);
//InitializeDataSources(transfers ?? []);
//InitializeDataSources(await transferDataService.GetTransfersAsync());
base.OnInitializedAsync();
}
void ColumnChooserButton_Click()
{
Grid2.ShowColumnChooser();
}
IGrid Grid2 { get; set; }
object MasterGridData { get; set; }
bool AutoCollapseDetailRow { get; set; }
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
Grid2.ExpandDetailRow(0);
}
}
void AutoCollapseDetailRow_Changed(bool newValue)
{
AutoCollapseDetailRow = newValue;
if (!newValue) return;
Grid2.BeginUpdate();
Grid2.CollapseAllDetailRows();
Grid2.ExpandDetailRow(0);
Grid2.EndUpdate();
}
}
}