Impelement EmailMessage.IsReaded; improvements, fixes, etc...

This commit is contained in:
Loretta 2024-06-22 08:01:39 +02:00
parent 49635226c5
commit 2ee5967d67
11 changed files with 181 additions and 192 deletions

View File

@ -57,6 +57,9 @@ public class SignalRTags : AcSignalRTags
public const int GetMessagesByContextId = 60;
public const int GetAllMessages = 61;
public const int CreateMessage = 63;
public const int UpdateMessage = 64;
public const int DeleteMessage = 65;
public const int GetProductById = 70;
public const int GetProductsByOwnerId = 71; //for now until we can send multiple parameters

View File

@ -27,7 +27,6 @@
<div class="container">
<div class="w-100 ch-220">
<CompanyGrid @ref="_gridCompany"
ContextId="@CompanyId"
Logger="_logger"
SignalRClient="AdminSignalRClient"
@ -63,7 +62,7 @@
<ProfileGridComponent ParentData="((Company)context.DataItem)" KeyboardNavigationEnabled="true" />
</DxTabPage>
<DxTabPage Text="Products">
<ProductDetailGridComponent ContextId="((Company)context.DataItem).Id" KeyboardNavigationEnabled="true" />
<ProductDetailGridComponent ParentData="((Company)context.DataItem)" KeyboardNavigationEnabled="true" />
</DxTabPage>
<DxTabPage Text="Address">
<AddressDetailGridComponent ParentData="((Company)context.DataItem).Profile" KeyboardNavigationEnabled="true" />
@ -100,8 +99,6 @@
</DxTabPage> *@
</DxTabs>
</div>
</div>
@code {

View File

@ -107,8 +107,8 @@
KeyFieldName="Id">
<Columns>
<DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="AcDomain.IsDeveloperVersion" Width="70" MinWidth="70" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" SortIndex="0" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="AcDomain.IsDeveloperVersion" Width="135" MinWidth="135" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" SortIndex="0" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N"/>
<DxGridDataColumn FieldName="OrderId">
<CellDisplayTemplate>
@{
@ -116,26 +116,27 @@
var editUri = $"mytransfers/{idKeyField:N}";
<NavLink href="@editUri">
<text>@context.Value</text>
</NavLink> }
</NavLink>
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="PaymentId" DisplayFormat="N" />
<DxGridDataColumn FieldName="FromAddress" />
<DxGridDataColumn FieldName="ToAddress" />
<DxGridDataColumn FieldName="Appointment" DisplayFormat="g" Width="140" />
<DxGridDataColumn FieldName="FullName" />
<DxGridDataColumn FieldName="ContactPhone" />
<DxGridDataColumn FieldName="PaymentId" DisplayFormat="N"/>
<DxGridDataColumn FieldName="FromAddress"/>
<DxGridDataColumn FieldName="ToAddress"/>
<DxGridDataColumn FieldName="Appointment" DisplayFormat="g" Width="140"/>
<DxGridDataColumn FieldName="FullName"/>
<DxGridDataColumn FieldName="ContactPhone"/>
<DxGridDataColumn FieldName="ContactEmail">
<CellDisplayTemplate>
@{
var keyField = context.Value;
var keyItem = (Transfer)context.DataItem;
string buttonText = "Contact";
<DxButton Click="() => SendMail(keyItem)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary" />
<DxButton Click="() => SendMail(keyItem)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary"/>
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="PassengerCount" />
<DxGridDataColumn FieldName="PassengerCount"/>
<DxGridDataColumn FieldName="TransferStatusType">
<CellDisplayTemplate>
@{
@ -148,17 +149,14 @@
</DxGridDataColumn>
</Columns>
<DetailRowTemplate>
<DxTabs>
<DxTabPage Text="Driver">
<TransferToDriverGridComponent ParentData="(Transfer)context.DataItem" KeyboardNavigationEnabled="true" />
</DxTabPage>
<DxTabPage Text="Messages">
<MessageDetailGridComponent ContextId="((Transfer)context.DataItem).Id" KeyboardNavigationEnabled="true" />
</DxTabPage>
<DxTabPage Text="Driver">
<TransferToDriverGridComponent ParentData="(Transfer)context.DataItem" KeyboardNavigationEnabled="true" />
</DxTabPage>
</DxTabs>
</DetailRowTemplate>
<EditFormTemplate Context="EditFormContext">
@{
@ -329,28 +327,30 @@
void Grid_CustomizeElement(GridCustomizeElementEventArgs e)
{
if (e.ElementType == GridElementType.DataRow && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 5)
{
e.CssClass = "bg-important";
}
else if (e.ElementType == GridElementType.DataRow && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") > 5 && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") < 35)
{
e.CssClass = "bg-attention";
}
else if (e.ElementType == GridElementType.DataRow && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 35)
{
e.CssClass = "bg-finished";
}
else if (e.ElementType == GridElementType.DataRow && (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";
}
if (e.ElementType != GridElementType.DataRow) return;
var transferStatusType = (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType");
switch (transferStatusType)
{
case 5:
e.CssClass = "bg-important";
break;
case > 5 and < 35:
e.CssClass = "bg-attention";
break;
case 35:
e.CssClass = "bg-finished";
break;
case > 35:
e.CssClass = "bg-cancel";
break;
}
}
void Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e)

View File

@ -1,4 +1,5 @@
@using AyCode.Core
@using AyCode.Core.Helpers
@using TIAM.Entities.Products
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers
@ -14,9 +15,7 @@
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMWebApp.Shared.Application.Services
@using AyCode.Interfaces.Addresses
@inject IServiceProviderDataService serviceProviderDataService
@inject IUserDataService userDataService
@inject ITransferDataService transferDataService
@using TIAM.Entities.Emails
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject AdminSignalRClient AdminSignalRClient;
@ -24,44 +23,60 @@
<MessageDetailGrid @ref="_messageGrid"
Logger="_logger"
SignalRClient="AdminSignalRClient"
ContextId="ContextId"
ContextIds="new[] {ContextId}"
CustomizeElement="CustomizeElement"
TextWrapEnabled="false">
<Columns>
<DxGridDataColumn FieldName="Id" Width="80px" Visible="false" />
<DxGridDataColumn FieldName="ContextId" Width="80px" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="false" />
<DxGridCommandColumn Width="135" MinWidth="135" DeleteButtonVisible="AcDomain.IsDeveloperVersion" EditButtonVisible="AcDomain.IsDeveloperVersion" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" SortIndex="0" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridDataColumn FieldName="ContextId" Width="80px" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridDataColumn FieldName="EmailAddress" Width="100px" Visible="@IsSenderEmailVisible" />
<DxGridDataColumn FieldName="Subject" Visible=@IsSubjectVisible />
<DxGridDataColumn FieldName="Text">
<CellDisplayTemplate Context="messageContext">
@{
var keyField = (string)messageContext.Value;
}
<div>@((MarkupString)keyField)</div>
<CellDisplayTemplate Context="displayTextContext">
<text>@System.Text.RegularExpressions.Regex.Replace((displayTextContext.Value as string)!, "<(.|\n)*?>", string.Empty)</text>
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="IsReaded" Caption="Readed" Width="70" CaptionAlignment="GridTextAlignment.Center" />
<DxGridDataColumn FieldName="Created" Width="100px" />
</Columns>
<DetailRowTemplate>
@{
var emailMessage = ((EmailMessage)context.DataItem);
<div>@((MarkupString)(emailMessage.Text ?? string.Empty))</div>
if (!emailMessage.IsReaded)
{
emailMessage.IsReaded = true;
_messageGrid.UpdateDataItemAsync(emailMessage).Forget();
InvokeAsync(StateHasChanged).Forget();
}
}
</DetailRowTemplate>
</MessageDetailGrid>
@code {
[Parameter] public bool KeyboardNavigationEnabled { get; set; }
[Parameter] public Guid? ContextId { get; set; }
[Parameter] public Guid ContextId { get; set; }
//[Parameter] public IEmailMessageRelation ParentData { get; set; } = null!;
[Parameter] public bool IsSubjectVisible { get; set; } = true;
[Parameter] public bool IsSenderEmailVisible { get; set; } = true;
private Guid? _contextId = null!;
private MessageGrid _messageGrid = null!;
private LoggerClient<MessageGridComponent> _logger = null!;
protected override void OnInitialized()
{
_logger = new LoggerClient<MessageGridComponent>(LogWriters.ToArray());
//DataSource = new List<Address>();
}
private void CustomizeElement(GridCustomizeElementEventArgs e)
{
if (e.ElementType != GridElementType.DataRow) return;
e.Style = (bool)e.Grid.GetRowValue(e.VisibleIndex, "IsReaded") == false ? "font-weight: bold;" : "font-weight: normal;";
}
}

View File

@ -13,6 +13,7 @@
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMWebApp.Shared.Application.Services
@using AyCode.Interfaces.Addresses
@using TIAM.Entities.Emails
@inject IServiceProviderDataService serviceProviderDataService
@inject IUserDataService userDataService
@inject ITransferDataService transferDataService
@ -21,7 +22,6 @@
<MessageGrid @ref="_messageGrid"
ContextId="_contextId"
Logger="_logger"
SignalRClient="AdminSignalRClient"
PageSize="5"
@ -43,14 +43,16 @@
<DxGridDataColumn FieldName="Created" Width="40" />
<DxGridDataColumn FieldName="Modified" Width="40" />
</Columns>
<DetailRowTemplate>
@{
<text>@(((EmailMessage)context.DataItem).Text)</text>
}
</DetailRowTemplate>
</MessageGrid>
@code {
[Parameter] public bool KeyboardNavigationEnabled { get; set; }
private Guid? _contextId = null!;
private MessageGrid _messageGrid = null!;
private LoggerClient<MessageGridComponent> _logger = null!;
@ -59,7 +61,6 @@
_logger = new LoggerClient<MessageGridComponent>(LogWriters.ToArray());
//DataSource = new List<Address>();
}
}

View File

@ -15,6 +15,7 @@
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMWebApp.Shared.Application.Services
@using AyCode.Interfaces.Addresses
@using AyCode.Core
@inject IStringLocalizer<TIAMResources> Localizer
@inject IServiceProviderDataService serviceProviderDataService
@inject IUserDataService userDataService
@ -39,8 +40,9 @@
ColumnResizeMode="GridColumnResizeMode.NextColumn"
ShowFilterRow="true">
<Columns>
<DxGridCommandColumn NewButtonVisible="true" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" GroupIndex="0" />
<DxGridCommandColumn NewButtonVisible="true" Width="135" MinWidth="135" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" SortIndex="0" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N"/>
<DxGridDataColumn Caption=@Localizer.GetString(ResourceKeys.ProductName) FieldName="Name" />
<DxGridDataColumn Caption=@Localizer.GetString(ResourceKeys.ProductType) FieldName="ProductType" Width="140" />
<DxGridDataColumn Caption=@Localizer.GetString(ResourceKeys.Price) FieldName="Price" Width="40" />

View File

@ -30,8 +30,8 @@
ColumnResizeMode="GridColumnResizeMode.NextColumn"
ShowFilterRow="false">
<Columns>
<DxGridCommandColumn NewButtonVisible="false" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" GroupIndex="0" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" />
<DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="false" Width="70" MinWidth="70" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" GroupIndex="0" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridDataColumn FieldName="Name" />
<DxGridDataColumn FieldName="FullName" />
<DxGridDataColumn FieldName="Created" Width="40%" />
@ -39,14 +39,10 @@
</Columns>
<DetailRowTemplate>
<DxTabs>
<DxTabPage Text="Address">
<AddressDetailGridComponent ParentData="((Profile)context.DataItem)" KeyboardNavigationEnabled="true" />
</DxTabPage>
</DxTabs>
</DetailRowTemplate>
</ProfileDetailGrid>

View File

@ -18,7 +18,7 @@
<CompanyDetailGrid Data="_detailGridData"
Logger="_logger"
SignalRClient="AdminSignalRClient"
ContextId="ContextId"
ContextIds="new[] {ContextId}"
PageSize="5"
AutoExpandAllGroupRows="true"
KeyboardNavigationEnabled="KeyboardNavigationEnabled"
@ -36,15 +36,11 @@
<DxGridDataColumn FieldName="CommissionPercent" />
</Columns>
<DetailRowTemplate>
<DxTabs>
<DxTabPage Text="Products">
<ProductDetailGridComponent ContextId="((Company)context.DataItem).Id" KeyboardNavigationEnabled="true" />
<ProductDetailGridComponent ParentData="((Company)context.DataItem)" KeyboardNavigationEnabled="true" />
</DxTabPage>
</DxTabs>
</DetailRowTemplate>
<EditFormTemplate Context="EditFormContext">
@{
@ -69,7 +65,7 @@
@code {
[Parameter] public bool KeyboardNavigationEnabled { get; set; }
[Parameter] public UserModelDtoDetail UserModelDtoDetail { get; set; }
[Parameter] public Guid? ContextId { get; set; }
[Parameter] public Guid ContextId { get; set; }
List<Company> _detailGridData;

View File

@ -11,8 +11,8 @@ public class MessageGrid : TiamGrid<EmailMessage>
public MessageGrid() : base()
{
GetAllMessageTag = SignalRTags.GetMessagesByContextId;
//AddMessageTag = SignalRTags.AddAddress;
//UpdateMessageTag = SignalRTags.UpdateAddress;
AddMessageTag = SignalRTags.CreateMessage;
UpdateMessageTag = SignalRTags.UpdateMessage;
//RemoveMessageTag = SignalRTags.RemoveAddress; - nem törlünk címet - J.
}

View File

@ -12,6 +12,7 @@ using AyCode.Services.SignalRs;
using TIAM.Services;
using AyCode.Core.Loggers;
using AyCode.Core.Extensions;
using TIAM.Entities.Products;
namespace TIAMWebApp.Server.Controllers
{
@ -20,13 +21,11 @@ namespace TIAMWebApp.Server.Controllers
[Route("api/v1/[controller]")]
public class MessageAPIController : ControllerBase
{
private AdminDal _adminDal;
private readonly AdminDal _adminDal;
private readonly TIAM.Core.Loggers.ILogger _logger;
private readonly IConfiguration _configuration;
private readonly IWebHostEnvironment _webHostEnvironment;
private IMessageSenderService _messageSenderService;
private readonly IMessageSenderService _messageSenderService;
public MessageAPIController(IEnumerable<IAcLogWriterBase> logWriters, IConfiguration configuration, IWebHostEnvironment webHostEnvironment, IMessageSenderService messageSenderService, AdminDal adminDal)
@ -42,38 +41,33 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.SendEmailRouteName)]
public async Task<IActionResult> SendEmail([FromBody] JsonElement SerializedMessageSenderModel)
public async Task<IActionResult> SendEmail([FromBody] JsonElement serializedMessageSenderModel)
{
Console.WriteLine("SendEmail called!");
var message = JObject.Parse(SerializedMessageSenderModel.GetRawText()).ToObject<MessageSenderModel<EmailMessage>>();
_logger.Debug($"SendEmail called!");
var message = JObject.Parse(serializedMessageSenderModel.GetRawText()).ToObject<MessageSenderModel<EmailMessage>>();
if (message != null)
{
if (message == null) return BadRequest("Invalid request");
if (message.MessageType == MessageTypesEnum.email)
{
_logger.Debug($"EmailMessage!!!");
Console.WriteLine($"EmailMessage!!!");
var messageElement = message.Message;
Console.WriteLine(message.Message);
_logger.Debug(message.Message.Subject);
var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType);
//_adminDal.AddEmailMessageAsync((TIAM.Entities.Emails.EmailMessage)SerializedMessageSenderModel.Message);
messageElement.EmailAddress = "noreply@anataworld.com";
await _adminDal.AddEmailMessageAsync(messageElement);
Console.WriteLine("SendEmail result: " + result);
return Ok(result);
await _adminDal.AddEmailMessageAsync(messageElement);
_logger.Debug($"SendEmail result: {result}");
return Ok(result);
}
else
{
return BadRequest("Invalid request");
// Access BaseClass properties
}
}
return BadRequest("Invalid request");
}
[AllowAnonymous]
@ -85,9 +79,7 @@ namespace TIAMWebApp.Server.Controllers
{
_logger.Info($@"GetMessagessByContextId called with ownerId: {contextId}");
var messages = await _adminDal.GetEmailMessagesByContextIdAsync(contextId);
//put Company id and name into a dictionary
return messages.ToJson();
}
@ -101,12 +93,19 @@ namespace TIAMWebApp.Server.Controllers
{
_logger.Info($@"GetMessages called");
var messages = await _adminDal.GetAllEmailMessagesAsync();
//put Company id and name into a dictionary
return messages.ToJson();
}
[SignalR(SignalRTags.UpdateMessage)]
public async Task<EmailMessage?> UpdateMessages([FromBody] EmailMessage message)
{
_logger.Info($@"UpdateMessages called");
if (await _adminDal.UpdateEmailMessageAsync(message)) return message;
return null;
}
}
}

View File

@ -357,27 +357,12 @@ namespace TIAMWebApp.Server.Controllers
{
_logger.Info($@"GetProductsByServiceProviderId called with serviceProviderId: {serviceProviderId}");
if (serviceProviderId != Guid.Empty)
{
if (serviceProviderId == Guid.Empty) return await Task.FromResult(string.Empty);
var products = adminDal.GetProductsJsonByServiceProviderId(serviceProviderId);
if (products != null)
{
return await Task.FromResult(products);
}
else
{
//some Iactionresult that explains that there were errors
return await Task.FromResult(string.Empty);
}
}
else
{
//some Iactionresult that explains that there were errors
return await Task.FromResult(string.Empty);
}
}
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.GetProductsByServiceProviderIdRouteName)]
@ -391,13 +376,9 @@ namespace TIAMWebApp.Server.Controllers
{
return await Task.FromResult("Invalid request");
}
else
{
var result = await GetProductsByOwnerId(serviceProviderId);
return result;
}
}
[AllowAnonymous]
@ -417,7 +398,6 @@ namespace TIAMWebApp.Server.Controllers
{
return null;
}
}
}
}