improvements, fixes, etc...

This commit is contained in:
jozsef.b@aycode.com 2024-06-02 10:48:53 +02:00
parent a46a82b466
commit f5937ad09d
15 changed files with 192 additions and 82 deletions

View File

@ -8,12 +8,13 @@ using TIAM.Entities.Users;
namespace TIAM.Entities.Drivers
{
[Table(nameof(Car))]
public class Car : IEntityGuid, ITimeStampInfo, IUserProductMappingForeignKey//, ITimeStampDisableAutoSet
public class Car : IEntityGuid, ITimeStampInfo, IUserProductMappingsRelation//, ITimeStampDisableAutoSet
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; } = Guid.NewGuid();
public Guid UserProductMappingId { get; set; }
public virtual UserProductMapping UserProductMapping { get; set; }
public int CountryCode { get; set; } = 36;

View File

@ -0,0 +1,11 @@
namespace TIAM.Entities.Drivers;
public interface ICarForeignKey
{
Guid CarId { get; set; }
}
public interface ICarRelation : ICarForeignKey
{
Car Car { get; set; }
}

View File

@ -0,0 +1,19 @@
using AyCode.Interfaces.Entities;
using TIAM.Core.Enums;
using TIAM.Entities.Profiles;
namespace TIAM.Entities.Products;
interface IProductBase : IEntityGuid, IProfileRelation<Profile>
{
ProductType ProductType { get; set; }
//public Guid? UserMediaId { get; set; }
Guid ProfileId { get; set; }
Profile Profile { get; set; }
string Name { get; set; }
string Description { get; set; }
float Price { get; set; }
string? JsonDetails { get; set; }
}

View File

@ -1,6 +1,5 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.TimeStampInfo;
using TIAM.Core.Enums;
@ -8,8 +7,7 @@ using TIAM.Entities.Profiles;
namespace TIAM.Entities.Products;
public abstract class ProductBase : IEntityGuid, ITimeStampInfo, IProfileRelation<Profile>
public abstract class ProductBase : IProductBase, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }

View File

@ -0,0 +1,13 @@
using TIAM.Entities.Drivers;
namespace TIAM.Entities.Transfers;
public interface ITransferForeignKey
{
Guid TransferId { get; set; }
}
public interface ITransferRelation : ICarForeignKey
{
Transfer Transfer { get; set; }
}

View File

@ -0,0 +1,18 @@
using AyCode.Interfaces.Entities;
namespace TIAM.Entities.Transfers;
public interface ITransferToDriverForeignKey : IEntityGuid
{
Guid TransferToDriverId { get; set; }
}
public interface ITransferToDriverRelation : ITransferToDriverForeignKey
{
TransferToDriver TransferToDrivers { get; set; }
}
public interface ITransferToDriversRelation : IEntityGuid
{
List<TransferToDriver> TransferToDrivers { get; set; }
}

View File

@ -11,8 +11,9 @@ using TIAM.Entities.Users;
namespace TIAM.Entities.Transfers;
[Table(nameof(Transfer))]
public class Transfer: IEntityGuid, IAcFullName, ITimeStampInfo, IProductForeignKey<Guid?>, IUserForeignKey
public class Transfer: IEntityGuid, IAcFullName, ITimeStampInfo, IProductForeignKey<Guid?>, IUserForeignKey, ITransferToDriversRelation
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }

View File

@ -3,12 +3,13 @@ using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.TimeStampInfo;
using TIAM.Entities.Drivers;
using TIAM.Entities.Products;
using TIAM.Entities.Users;
namespace TIAM.Entities.Transfers;
[Table(nameof(TransferToDriver))]
public class TransferToDriver : IEntityGuid, ITimeStampInfo, IUserProductMappingForeignKey
public class TransferToDriver : IEntityGuid, ITimeStampInfo, IUserProductMappingsRelation, ICarRelation, ITransferRelation
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
@ -19,6 +20,7 @@ public class TransferToDriver : IEntityGuid, ITimeStampInfo, IUserProductMapping
public virtual Car Car { get; set; }
public virtual Transfer Transfer { get; set; }
public virtual UserProductMapping UserProductMapping { get; set; }
public string LicencePlate { get; set; }
public double Price { get; set; }

View File

@ -1,4 +1,6 @@
using System.Runtime;
using AyCode.Interfaces.Users;
using System.Runtime;
using TIAM.Entities.Products;
namespace TIAM.Entities.Users;

View File

@ -12,6 +12,7 @@
@using TIAMSharedUI.Shared.Components.Grids
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMWebApp.Shared.Application.Services
@using AyCode.Interfaces.Addresses
@inject IServiceProviderDataService serviceProviderDataService
@inject IUserDataService userDataService
@inject ITransferDataService transferDataService
@ -23,7 +24,7 @@
DataSource="DataSource"
Logger="_logger"
SignalRClient="AdminSignalRClient"
OnDataItemSaving="DataItemSaving"
OnEditModelSaving="DataItemSaving"
OnDataItemDeleting="DataItemDeleting"
OnDataItemChanged="DataItemChanged"
PageSize="5"
@ -33,9 +34,9 @@
ValidationEnabled="false"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
ShowFilterRow="true">
ShowFilterRow="false">
<Columns>
<DxGridCommandColumn NewButtonVisible="true" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridCommandColumn NewButtonVisible="false" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" GroupIndex="0" />
<DxGridDataColumn FieldName="AddressText" />
<DxGridDataColumn FieldName="IsValid" Width="40" />
@ -57,7 +58,8 @@
@code {
[Parameter] public bool KeyboardNavigationEnabled { get; set; }
[Parameter] public IList<Address> DataSource { get; set; } = null!;
[Parameter] public IAcAddressRelation<Address> ParentData { get; set; } = null!;
[Parameter] public IList<Address>? DataSource { get; set; }
[Parameter] public EventCallback<Address> OnAddressChanged { get; set; }
private AddressDetailGrid _addressGrid = null!;
@ -66,11 +68,16 @@
protected override void OnInitialized()
{
_logger = new LoggerClient<AddressDetailGridComponent>(LogWriters.ToArray());
DataSource ??= new List<Address> { ParentData.Address };
}
private void DataItemChanged(Address address)
private void DataItemChanged(GridDataItemChangedEventArgs<Address> args)
{
OnAddressChanged.InvokeAsync(address);
_logger.Debug($"DataItemSaving; addressId: {args.DataItem.Id}");
ParentData.Address = args.DataItem;
OnAddressChanged.InvokeAsync(args.DataItem);
}
private void DataItemSaving(GridEditModelSavingEventArgs obj)

View File

@ -134,7 +134,7 @@
<CompaniesNestedUserProductMapping CurrentCompany="(TIAM.Entities.ServiceProviders.Company)context.DataItem" KeyboardNavigationEnabled="true" />
</DetailRowTemplate> *@
<DetailRowTemplate>
<AddressDetailGridComponent DataSource="new List<Address> { ((Company)context.DataItem).Profile.Address }" OnAddressChanged="AddressChanged" KeyboardNavigationEnabled="true" />
<AddressDetailGridComponent ParentData="((Company)context.DataItem).Profile" OnAddressChanged="AddressChanged" KeyboardNavigationEnabled="true" />
</DetailRowTemplate>
<EditFormTemplate Context="EditFormContext">
@{
@ -192,8 +192,10 @@
private void AddressChanged(Address address)
{
var company = _gridCompany.DataSource!.FirstOrDefault(x => x.Profile.AddressId == address.Id);
company.Profile.Address = address;
_logger.Debug($"DataItemSaving; addressId: {address?.Id}");
// var company = _gridCompany.DataSource!.FirstOrDefault(x => x.Profile.AddressId == address.Id);
// company.Profile.Address = address;
}
void SendMail(Company item)

View File

@ -11,11 +11,14 @@
@using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers
@using TIAM.Entities.Addresses
@using TIAM.Services
@using TIAMWebApp.Shared.Application.Services
@using TIAMSharedUI.Shared.Components
@using TIAMSharedUI.Shared.Components.Grids
@using TIAM.Models.Dtos.Users
@using AyCode.Core.Enums
@using AyCode.Core.Extensions
@layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> localizer
@ -91,7 +94,7 @@
OnDataItemChanging="DataSourceItemChanging"
OnDataItemChanged="DataSourceItemChanged"
OnDataItemDeleting="DataItemDeleting"
OnDataItemSaving="DataItemSaving"
OnEditModelSaving="DataItemSaving"
CustomizeElement="Grid_CustomizeElement"
CustomizeEditModel="Grid_CustomizeEditModel"
@ -147,7 +150,7 @@
<DxTabs>
<DxTabPage Text="Driver">
<TransferToDriverGridComponent Transfer="(Transfer)context.DataItem" KeyboardNavigationEnabled="true" />
<TransferToDriverGridComponent ParentData="(Transfer)context.DataItem" KeyboardNavigationEnabled="true" />
</DxTabPage>
</DxTabs>
@ -210,14 +213,7 @@
</div>
</DxTabPage>
</DxTabs>
</div>
</Animation>
</div>
@ -270,6 +266,7 @@
void SendMail(Transfer item)
{
_logger.Info($"Sending mail to {item.ContactEmail}, {item.Id}");
_messageWizardModel.ReceiverId = item.UserId;
_messageWizardModel.ContextId = item.Id;
_messageWizardModel.SenderEmailAddress = "info@touriam.com";
@ -374,14 +371,16 @@
InitializeAppointments(transfers);
}
private void DataSourceItemChanging(Transfer transfer)
private void DataSourceItemChanging(GridDataItemChangingEventArgs<Transfer> args)
{
_logger.Info("DataSourceItemChanging called");
}
private void DataSourceItemChanged(Transfer transfer)
private void DataSourceItemChanged(GridDataItemChangedEventArgs<Transfer> args)
{
_logger.Info("DataSourceItemChanged called");
AppointmentModels.UpdateCollection(CreateAppointmentModel(args.DataItem), args.DataChangeMode == DataChangeMode.Remove);
}
private void DataItemSaving(GridEditModelSavingEventArgs e)
@ -394,19 +393,6 @@
_logger.Info($"DataItemDeleting OnItemDeleting");
}
private void RefreshAppointments(Transfer transfer, bool isDelete)
{
var appointmentIndex = AppointmentModels.FindIndex(x => x.SourceId == transfer.Id);
if (isDelete && appointmentIndex > -1) AppointmentModels.RemoveAt(appointmentIndex);
else
{
var appointment = CreateAppointmentModel(transfer);
if (appointmentIndex > -1) AppointmentModels[appointmentIndex] = appointment;
else AppointmentModels.Add(appointment);
}
}
protected override Task OnInitializedAsync()
{
_logger = new LoggerClient<ManageTransfers>(LogWriters.ToArray());
@ -453,7 +439,7 @@
public AppointmentModel CreateAppointmentModel(Transfer transfer)
{
return new AppointmentModel { SourceId = transfer.Id, StartDate = transfer.Appointment, EndDate = transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" };
return new AppointmentModel { Id = transfer.Id, StartDate = transfer.Appointment, EndDate = transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" };
}
void ColumnChooserButton_Click()

View File

@ -8,6 +8,8 @@
@using AyCode.Core.Loggers
@using AyCode.Services.Loggers
@using TIAMWebApp.Shared.Application.Services
@using AyCode.Core.Enums
@using AyCode.Core.Extensions
@inject IUserDataService UserDataService
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject AdminSignalRClient AdminSignalRClient;
@ -15,10 +17,10 @@
<TransferToDriversDetailGrid @ref="_transferToDriversGrid"
DataSource="Transfer.TransferToDrivers"
DataSource="ParentData.TransferToDrivers"
Logger="_logger"
SignalRClient="AdminSignalRClient"
OnDataItemSaving="DataItemSaving"
OnEditModelSaving="DataItemSaving"
OnDataItemDeleting="DataItemDeleting"
OnDataItemChanged="DataItemChanged"
PageSize="5"
@ -27,9 +29,9 @@
KeyFieldName="Id"
ValidationEnabled="false"
CustomizeEditModel="CustomizeEditModel"
EditMode="GridEditMode.EditForm"
EditMode="GridEditMode.EditRow"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
ShowFilterRow="true">
ShowFilterRow="false">
<Columns>
<DxGridCommandColumn NewButtonVisible="true" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" GroupIndex="0" />
@ -41,7 +43,7 @@
@code {
[Parameter] public bool KeyboardNavigationEnabled { get; set; }
[Parameter] public Transfer Transfer { get; set; } = null!;
[Parameter] public ITransferToDriversRelation ParentData { get; set; } = null!;
[Parameter] public EventCallback<TransferToDriver> OnTransferToDriverChanged { get; set; }
private TransferToDriversDetailGrid _transferToDriversGrid = null!;
@ -51,12 +53,14 @@
{
_logger = new LoggerClient<TransferToDriverGridComponent>(LogWriters.ToArray());
_logger.Info($"DetailGridData: {Transfer.TransferToDrivers.Count}");
_logger.Info($"DetailGridData: {ParentData.TransferToDrivers.Count}");
}
private void DataItemChanged(TransferToDriver transferToDriver)
private void DataItemChanged(GridDataItemChangedEventArgs<TransferToDriver> args)
{
OnTransferToDriverChanged.InvokeAsync(transferToDriver);
ParentData.TransferToDrivers.UpdateCollection(args.DataItem, args.DataChangeMode == DataChangeMode.Remove);
OnTransferToDriverChanged.InvokeAsync(args.DataItem);
}
private void DataItemSaving(GridEditModelSavingEventArgs obj)
@ -79,6 +83,6 @@
newDriver.LicencePlate = "";
newDriver.Car = new Car();
newDriver.Price = 0;
newDriver.TransferId = Transfer.Id;
newDriver.TransferId = ParentData.Id;
}
}

View File

@ -1,5 +1,8 @@
using System.ComponentModel;
using AyCode.Core.Enums;
using AyCode.Core.Extensions;
using AyCode.Core.Helpers;
using AyCode.Core.Interfaces;
using AyCode.Interfaces.Entities;
using AyCode.Services.SignalRs;
using AyCode.Utils.Extensions;
@ -13,7 +16,29 @@ using TIAMWebApp.Shared.Application.Utility;
namespace TIAMSharedUI.Shared.Components.Grids
{
public class TiamGrid<TDataItem> : DxGrid where TDataItem : class, IEntityGuid
public class GridDataItemChangingEventArgs<TDataItem> : GridDataItemChangedEventArgs<TDataItem> where TDataItem : class, IId<Guid>
{
internal GridDataItemChangingEventArgs(TiamGrid<TDataItem> grid, TDataItem dataItem, DataChangeMode dataChangeMode) : base(grid, dataItem, dataChangeMode)
{ }
public bool IsCanceled { get; set; }
}
public class GridDataItemChangedEventArgs<TDataItem> where TDataItem : class, IId<Guid>
{
internal GridDataItemChangedEventArgs(TiamGrid<TDataItem> grid, TDataItem dataItem, DataChangeMode dataChangeMode)
{
Grid = grid;
DataItem = dataItem;
DataChangeMode = dataChangeMode;
}
public TiamGrid<TDataItem> Grid { get; }
public TDataItem DataItem { get; }
public DataChangeMode DataChangeMode { get; }
}
public class TiamGrid<TDataItem> : DxGrid where TDataItem : class, IId<Guid>
{
protected bool IsFirstInitializeParameters;
private IList<TDataItem>? _dataSource;
@ -36,11 +61,11 @@ namespace TIAMSharedUI.Shared.Components.Grids
[Parameter] public EventCallback<GridDataItemDeletingEventArgs> OnDataItemDeleting{ get; set; }
protected new EventCallback<GridEditModelSavingEventArgs> EditModelSaving { get; set; }
[Parameter] public EventCallback<GridEditModelSavingEventArgs> OnDataItemSaving { get; set; }
[Parameter] public EventCallback<GridEditModelSavingEventArgs> OnEditModelSaving { get; set; }
[Parameter] public EventCallback<IList<TDataItem>> OnDataSourceChanged { get; set; }
[Parameter] public EventCallback<TDataItem> OnDataItemChanging { get; set; }
[Parameter] public EventCallback<TDataItem> OnDataItemChanged { get; set; }
[Parameter] public EventCallback<GridDataItemChangingEventArgs<TDataItem>> OnDataItemChanging { get; set; }
[Parameter] public EventCallback<GridDataItemChangedEventArgs<TDataItem>> OnDataItemChanged { get; set; }
[Parameter]
[DefaultValue(null)]
@ -84,11 +109,17 @@ namespace TIAMSharedUI.Shared.Components.Grids
if (firstRender && DataSource == null) RefreshDataSourceAsync().Forget();
}
public Task AddDataItem(TDataItem dataItem) => PostDataToServerAsync(dataItem, AddMessageTag);
public Task UpdateDataItem(TDataItem dataItem) => PostDataToServerAsync(dataItem, UpdateMessageTag);
public Task RemoveDataItem(TDataItem dataItem) => PostDataToServerAsync(dataItem, RemoveMessageTag);
public Task AddDataItem(TDataItem dataItem) => AddDataItem(dataItem, AddMessageTag);
public Task AddDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, DataChangeMode.Add);
public Task RemoveDataItem(Guid id)
public Task UpdateDataItem(TDataItem dataItem) => UpdateDataItem(dataItem, UpdateMessageTag);
public Task UpdateDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, DataChangeMode.Update);
public Task RemoveDataItem(TDataItem dataItem) => RemoveDataItem(dataItem, RemoveMessageTag);
public Task RemoveDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, DataChangeMode.Remove);
public Task RemoveDataItem(Guid id) => RemoveDataItem(id, RemoveMessageTag);
public Task RemoveDataItem(Guid id, int messageTag)
{
var dataItem = _dataSource.FirstOrDefault(x => x.Id == id);
@ -102,7 +133,7 @@ namespace TIAMSharedUI.Shared.Components.Grids
var logText = e.IsNew ? "add" : "update";
Logger.Info($"{_gridLogName} OnItemSaving {logText}; Id: {dataItem.Id}");
await OnDataItemSaving.InvokeAsync(e);
await OnEditModelSaving.InvokeAsync(e);
if (e.Cancel)
{
@ -149,9 +180,16 @@ namespace TIAMSharedUI.Shared.Components.Grids
});
}
protected virtual async Task PostDataToServerAsync(TDataItem dataItem, int messageTag, bool isDelete = false)
protected virtual async Task PostDataToServerAsync(TDataItem dataItem, int messageTag, DataChangeMode dataChangeMode)
{
await OnDataItemChanging.InvokeAsync(dataItem);
var eventArgs = new GridDataItemChangingEventArgs<TDataItem>(this, dataItem, dataChangeMode);
await OnDataItemChanging.InvokeAsync(eventArgs);
if (eventArgs.IsCanceled)
{
Logger.Debug($"{_gridLogName} OnDataItemChanging canceled");
return;
}
if (messageTag == 0) return;
@ -159,42 +197,44 @@ namespace TIAMSharedUI.Shared.Components.Grids
if (dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid();
RefreshDataItem(dataItem, isDelete); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J.
_dataSource.UpdateCollection(dataItem, dataChangeMode == DataChangeMode.Remove); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J.
SignalRClient.PostDataAsync(messageTag, dataItem, async repsonse =>
{
if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null || !RefreshDataItem(repsonse.ResponseData, isDelete))
if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null)
{
RefreshDataSourceAsync().Forget();
return;
}
await OnDataItemChanged.InvokeAsync(dataItem);
_dataSource.UpdateCollection(repsonse.ResponseData, dataChangeMode == DataChangeMode.Remove);
await OnDataItemChanged.InvokeAsync(eventArgs);
InvokeAsync(StateHasChanged).Forget();
}).Forget();
//transfer = await devAdminSignalClient.PostDataAsync(SignalRTags.UpdateTransferAsync, transfer);
}
protected virtual bool RefreshDataItem(TDataItem dataItem, bool isDelete)
{
if (dataItem.Id.IsNullOrEmpty())
{
Logger.Error($"{_gridLogName} dataItem.Id.IsNullOrEmpty()");
return false;
}
//protected virtual bool RefreshDataItem(TDataItem dataItem, bool isDelete)
//{
// if (dataItem.Id.IsNullOrEmpty())
// {
// Logger.Error($"{_gridLogName} dataItem.Id.IsNullOrEmpty()");
// return false;
// }
var transferIndex = _dataSource.FindIndex(x => x.Id == dataItem.Id);
// var transferIndex = _dataSource.FindIndex(x => x.Id == dataItem.Id);
if (isDelete && transferIndex > -1) _dataSource.RemoveAt(transferIndex);
else
{
if (transferIndex > -1) _dataSource[transferIndex] = dataItem;
else _dataSource.Add(dataItem);
}
// if (isDelete && transferIndex > -1) _dataSource.RemoveAt(transferIndex);
// else
// {
// if (transferIndex > -1) _dataSource[transferIndex] = dataItem;
// else _dataSource.Add(dataItem);
// }
return true;
}
// return true;
//}
protected override Task SetParametersAsyncCore(ParameterView parameters)
{

View File

@ -3,15 +3,21 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AyCode.Core.Interfaces;
using AyCode.Interfaces.Entities;
namespace TIAMWebApp.Shared.Application.Models.PageModels
{
public class AppointmentModel
public class AppointmentModel : IId<Guid>
{
public AppointmentModel() { }
public Guid SourceId { get; set; } //pl: TransferId, stb... - J;
/// <summary>
/// SourceId //pl: TransferId, stb... - J;
/// </summary>
public Guid Id { get; set; } //pl: TransferId, stb... - J;
public int AppointmentType { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }