This commit is contained in:
Adam 2024-05-26 13:21:10 +02:00
parent 2036b2afab
commit 6c91d21f1a
5 changed files with 469 additions and 19 deletions

View File

@ -1,4 +1,5 @@
@page "/user/admin"
@using Microsoft.AspNetCore.Authorization
@using TIAMSharedUI.Pages.User.SysAdmins
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Models;
@ -7,7 +8,8 @@
@inject IPopulationStructureDataProvider DataProvider
@inject ISupplierService SupplierService
@inject IUserDataService UserDataService
<PageTitle>Transfer</PageTitle>
@attribute [Authorize]
<PageTitle>Administration</PageTitle>
<div class="text-center m-5">
<h1>Dashboard</h1>

View File

@ -3,6 +3,7 @@
@using TIAM.Resources
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@using TIAMWebApp.Shared.Application.Utility
@using AyCode.Core.Loggers
@ -10,6 +11,8 @@
@layout AdminLayout
@inject IAcLogWriterClientBase BrowserConsoleLogWriter
@inject IStringLocalizer<TIAMResources> localizer
@inject ISessionService SessionService
@inject IServiceProviderDataService ServiceProviderDataService
<h3>Properties</h3>
<div class="container">
@ -57,7 +60,7 @@
</DxPopup>*@
<DxGrid @ref="Grid"
Data="OrderData"
Data="ServiceProviderData"
PageSize="12"
KeyFieldName="Id"
ValidationEnabled="false"
@ -101,18 +104,18 @@
@code {
IGrid Grid { get; set; }
object? OrderData { get; set; }
TiamServiceProvider[]? ServiceProviderData { get; set; }
public ServiceProviderWizardModel myModel = new ServiceProviderWizardModel();
bool EulaAccepted { get; set; }
bool EulaVisible { get; set; }
void CancelCreateClick()
{
EulaVisible = false;
}
void EulaPopupClosed()
@ -160,9 +163,9 @@
else
BrowserConsoleLogWriter.Info("orderData updated");
//modify orderData where orderData.Name == e.EditModel.Name
//await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
//await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
await UpdateDataAsync();
}
async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e)
@ -182,13 +185,8 @@
protected override void OnInitialized()
{
base.OnInitialized();
OrderData = new TiamServiceProvider[]
{
new TiamServiceProvider(Guid.NewGuid(), "BAT", Guid.NewGuid(), Guid.NewGuid()),
new TiamServiceProvider(Guid.NewGuid(), "TIAM", Guid.NewGuid(), Guid.NewGuid()),
new TiamServiceProvider(Guid.NewGuid(), "TestHotel", Guid.NewGuid(), Guid.NewGuid())
};
var myId = SessionService.User.UserId;
ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId);
}

View File

@ -0,0 +1,445 @@
@page "/user/companies"
@using BlazorAnimation
@using TIAM.Core.Enums
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers
@using TIAM.Resources
@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;
@layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> localizer
@inject IWizardProcessor wizardProcessor
@inject IServiceProviderDataService serviceProviderDataService
@inject ISessionService sessionService
@inject DevAdminSignalClient devAdminSignalClient;
<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 CssClass="popup-demo-events"
@bind-Visible="@PopupVisible"
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">
<DxTabs>
<DxTabPage Text="DataGrid">
<div class="d-flex flex-column mb-4 pb-2">
<div class="align-self-end pl-2 pb-2">
<DxButton Text="Column Chooser"
RenderStyle="ButtonRenderStyle.Secondary"
IconCssClass="btn-column-chooser"
Click="ColumnChooserButton_Click" />
</div>
<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="false" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="false" SortIndex="0" Visible="false" />
<DxGridDataColumn FieldName="Name" />
<DxGridDataColumn FieldName="OwnerId" />
<DxGridDataColumn FieldName="AffiliateId" />
<DxGridDataColumn FieldName="CommissionPercent" />
<DxGridDataColumn FieldName="Created" />
@* <DxGridDataColumn FieldName="ContactEmail">
<CellDisplayTemplate>
@{
var keyField = context.Value;
var keyItem = (TiamServiceProvider)context.DataItem;
string buttonText = "Contact";
<DxButton Click="() => SendMail(keyItem.)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary" />
}
</CellDisplayTemplate>
</DxGridDataColumn> *@
<DxGridDataColumn FieldName="PassengerCount" />
</Columns>
<DetailRowTemplate>
<Grid_MasterDetail_NestedGrid_DetailContent Customer="(TIAM.Entities.Transfers.Transfer)context.DataItem" KeyboardNavigationEnabled="true" />
</DetailRowTemplate>
<EditFormTemplate Context="EditFormContext">
@{
var transfer2 = (Transfer)EditFormContext.EditModel;
}
<DxFormLayout CssClass="w-100">
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.LastName) ColSpanMd="6" ColSpanLg="6" ColSpanSm="12">
@EditFormContext.GetEditor("Name")
</DxFormLayoutItem>
</DxFormLayout>
</EditFormTemplate>
</DxGrid>
</div>
</DxTabPage>
<DxTabPage Text="Calendar">
<div class="d-flex flex-column mb-4 pb-2">
<DxScheduler @bind-StartDate="@StartDate"
DataStorage="@_dataStorage"
CssClass="w-100">
<DxSchedulerTimelineView Duration="@TimeSpan.FromHours(48)" CellMinWidth="80">
<Scales>
<DxSchedulerTimeScale Unit="@SchedulerTimeScaleUnit.Day" UnitCount="1"></DxSchedulerTimeScale>
<DxSchedulerTimeScale Unit="@SchedulerTimeScaleUnit.Hour" UnitCount="2"></DxSchedulerTimeScale>
</Scales>
</DxSchedulerTimelineView>
<DxSchedulerWeekView ShowWorkTimeOnly="false"></DxSchedulerWeekView>
<DxSchedulerDayView DayCount="1" ShowWorkTimeOnly="false"></DxSchedulerDayView>
</DxScheduler>
</div>
</DxTabPage>
</DxTabs>
</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<TiamServiceProvider> ServiceProviderDataList { get; set; }
bool PopupVisible { get; set; }
public List<string> IgnoreList =
[
"ReceiverEmailAddress",
"ReceiverFullName",
"ReceiverId",
"SenderEmailAddress",
"SenderFullName",
"SenderId",
"ContextId",
];
public List<TransferStatusModel> Statuses { get; set; } =
[
new(Convert.ToInt16(TransferStatusType.OrderSubmitted), "Order submitted"),
new(Convert.ToInt16(TransferStatusType.OrderConfirmed), "Order confirmed"),
new(Convert.ToInt16(TransferStatusType.AssignedToDriver), "Assigned to driver"),
new(Convert.ToInt16(TransferStatusType.DriverConfirmed), "Driver confirmed"),
new(Convert.ToInt16(TransferStatusType.DriverEnRoute), "Driver enroute"),
new(Convert.ToInt16(TransferStatusType.PassengerPickup), "Passenger in car"),
new(Convert.ToInt16(TransferStatusType.Finished), "Finished"),
new(Convert.ToInt16(TransferStatusType.UserCanceled), "User cancelled"),
new(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled")
];
private MessageWizardModel _messageWizardModel = new();
public List<AppointmentModel> AppointmentModels { get; set; }
DateTime StartDate { get; set; } = DateTime.Today;
DxSchedulerDataStorage _dataStorage = new();
void SendMail(TiamServiceProvider item)
{
_logger.Info($"Sending mail to {item.OwnerId}, {item.Id}");
_messageWizardModel.ReceiverId = Guid.Parse("");
_messageWizardModel.ContextId = item.Id;
_messageWizardModel.SenderEmailAddress = "";
_messageWizardModel.ReceiverEmailAddress = "";
_messageWizardModel.ReceiverFullName = "";
PopupVisible = true;
}
void CancelCreateClick()
{
PopupVisible = 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)
{
if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 5)
{
e.CssClass = "bg-important";
}
else if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") > 5 && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") < 35)
{
e.CssClass = "bg-attention";
}
else if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 35)
{
e.CssClass = "bg-finished";
}
else if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") > 35)
{
e.CssClass = "bg-cancel";
}
if (e.ElementType == GridElementType.HeaderCell)
{
e.Style = "background-color: rgba(0, 0, 0, 0.08)";
e.CssClass = "header-bold";
}
}
void Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e)
{
if (!e.IsNew) return;
var transferEditModel = (Transfer)e.EditModel; //TODO not valid cast
transferEditModel.Id = Guid.NewGuid();
transferEditModel.ToAddress = "Where to?";
transferEditModel.FromAddress = "From where?";
transferEditModel.Appointment = DateTime.UtcNow.AddDays(3);
transferEditModel.PassengerCount = 1;
transferEditModel.FirstName = "John";
transferEditModel.LastName = "Doe";
transferEditModel.ContactPhone = "+00000000000";
transferEditModel.ContactEmail = "your@email.address";
}
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
{
bool success = false;
if (e.IsNew)
{
//add new orderData to orderData array
_logger.Info("New orderData added");
//await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel);
}
else
{
_logger.Info("orderData updated at id " + ((TiamServiceProvider)e.EditModel).Id);
success = await serviceProviderDataService.UpdateServiceProviderAsync((TiamServiceProvider)e.EditModel);
}
//get transfer from TransferData by Id
// foreach (var transferToModify in (List<Transfer>)TransferData)
// {
// myModel = (Transfer)e.EditModel;
// if (transferToModify.Id == myModel.Id)
// {
// //transferToModify.Driver = myModel.Driver;
// }
// }
if (success)
{
//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)
{
//await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem);
//remove orderData from orderData array
_logger.Info("orderData deleted");
//await UpdateDataAsync();
}
async Task UpdateDataAsync()
{
ServiceProviderDataList = await serviceProviderDataService.GetServiceProvidersByOwnerIdAsync();
_logger.Info("orderData grid refreshed");
}
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<ManageServiceProviders>(LogWriters.ToArray());
devAdminSignalClient.OnMessageReceived += (messageTag, message) =>
{
if (messageTag == SignalRTags.PostTransfersAsync)
{
var json = message?.MessagePackTo<string>(ContractlessStandardResolver.Options);
InitializeDataSources(json?.JsonTo<List<Transfer>>() ?? []);
StateHasChanged();
}
};
await devAdminSignalClient.Send("", SignalRTags.GetTransfersAsync, null);
//InitializeDataSources(await transferDataService.GetTransfersAsync());
base.OnInitialized();
}
private void InitializeDataSources(List<Transfer> transferDataList)
{
TransferDataList = transferDataList;
AppointmentModels = new List<AppointmentModel>(TransferDataList.Count);
foreach (var transfer in TransferDataList)
{
// var bnm = DataStorage.CreateAppointmentItem();
// bnm.Start = transfer.Appointment;
// bnm.Description = $"{transfer.FullName}, {transfer.ToAddress}";
// bnm.Location = transfer.FromAddress;
// bnm.Subject = "Simple transfer";
AppointmentModels.Add(new AppointmentModel { StartDate = transfer.Appointment, EndDate=transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" });
}
_dataStorage = new DxSchedulerDataStorage
{
AppointmentMappings = new DxSchedulerAppointmentMappings()
{
Type = "AppointmentType",
Start = "StartDate",
End = "EndDate",
Subject = "Caption",
AllDay = "AllDay",
Location = "Location",
Description = "Description",
LabelId = "Label",
StatusId = "Status",
RecurrenceInfo = "Recurrence"
},
AppointmentsSource = AppointmentModels
};
}
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();
}
}
}

View File

@ -98,7 +98,7 @@ namespace TIAMWebApp.Server.Controllers
}
//17.
[AllowAnonymous]
[Authorize]
[HttpPost]
[Route(APIUrls.GetServiceProvidersByOwnerIdRouteName)]
[Tags("Finished", "ServiceProvider")]

View File

@ -70,12 +70,17 @@ namespace TIAMWebApp.Shared.Application.Services
//17.
public async Task<Dictionary<Guid, string>?> GetPropertiesByOwnerIdAsync(Guid id)
{
var url = APIUrls.GetServiceProvidersByOwnerId;
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetServiceProvidersByOwnerId}";
var response = await http.PostAsJsonAsync(url, id);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadFromJsonAsync<Dictionary<Guid, string>>();
_logger.Debug(result.FirstOrDefault().Value);
string resultString = "";
foreach (var item in result)
{
resultString += item.Value + ", ";
}
_logger.Debug(resultString);
return result;
}
else