...
This commit is contained in:
@@ -99,10 +99,14 @@ namespace Back.Controllers
|
|||||||
var Ticket = await _servTicket.GetTicketorgbyTicketID(user.RolUsers.First().CompanyID,TicketID);
|
var Ticket = await _servTicket.GetTicketorgbyTicketID(user.RolUsers.First().CompanyID,TicketID);
|
||||||
if (Ticket == null)
|
if (Ticket == null)
|
||||||
return NotFound(new List<string>() { "تیکت یافت نشد" });
|
return NotFound(new List<string>() { "تیکت یافت نشد" });
|
||||||
if (!string.IsNullOrEmpty(Ticket.EndDate)) return BadRequest("این تیکت قبلا بسته شده");
|
// if (!string.IsNullOrEmpty(Ticket.EndDate)) return BadRequest("این تیکت قبلا بسته شده");
|
||||||
|
if (Ticket.Status == StatusTicket.Awaitingreview || Ticket.Status == StatusTicket.Read_Checking
|
||||||
Ticket.Status = StatusTicket.optout;
|
|| Ticket.Status == StatusTicket.hasbeenanswered)
|
||||||
return Ok(await _servTicket.UpdateTicket(Ticket));
|
{
|
||||||
|
Ticket.Status = StatusTicket.optout;
|
||||||
|
return Ok(await _servTicket.UpdateTicket(Ticket));
|
||||||
|
}
|
||||||
|
return Ok();
|
||||||
}
|
}
|
||||||
[HttpPost("NewTicketNoAuthentication")]
|
[HttpPost("NewTicketNoAuthentication")]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
|
@@ -65,7 +65,7 @@ namespace Back.Services
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
//-----------------------
|
//-----------------------
|
||||||
return await invok.OrderByDescending(o => o.ID).Select(s => new SubTicketDTO()
|
return await invok.OrderBy(o => o.ID).Select(s => new SubTicketDTO()
|
||||||
{
|
{
|
||||||
Date = s.Date.ShamciToFormatShamci(),
|
Date = s.Date.ShamciToFormatShamci(),
|
||||||
Text = s.Text,
|
Text = s.Text,
|
||||||
|
@@ -5,7 +5,7 @@ namespace Shared.DTOs
|
|||||||
public enum StatusTicket
|
public enum StatusTicket
|
||||||
{
|
{
|
||||||
|
|
||||||
[Display(Name = "فرد ناشناس")]
|
[Display(Name = "فرد ناشناس")]//
|
||||||
unknownPerson,
|
unknownPerson,
|
||||||
[Display(Name = "در انتظار بررسی")]
|
[Display(Name = "در انتظار بررسی")]
|
||||||
Awaitingreview,
|
Awaitingreview,
|
||||||
@@ -13,9 +13,9 @@ namespace Shared.DTOs
|
|||||||
Read_Checking,
|
Read_Checking,
|
||||||
[Display(Name = "پاسخ داده شده")]
|
[Display(Name = "پاسخ داده شده")]
|
||||||
hasbeenanswered,
|
hasbeenanswered,
|
||||||
[Display(Name = "پاِیان")]
|
[Display(Name = "پاِیان")]//
|
||||||
End,
|
End,
|
||||||
[Display(Name = "انصراف")]
|
[Display(Name = "انصراف")]//
|
||||||
optout,
|
optout,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,18 +1,25 @@
|
|||||||
@using Shared.DTOs
|
@using Front.Services
|
||||||
|
@using Shared.DTOs
|
||||||
|
@inject HttpClientController hc;
|
||||||
<Modal @ref="modal" title=@Ticket.Title IsVerticallyCentered="true">
|
<Modal @ref="modal" title=@Ticket.Title IsVerticallyCentered="true">
|
||||||
<BodyTemplate>
|
<BodyTemplate>
|
||||||
<Lchat/>
|
<Badge Color="@badgeColor" IndicatorType="BadgeIndicatorType.RoundedPill">@Ticket.MsgStatus</Badge>
|
||||||
|
<Lchat Ticket="Ticket" />
|
||||||
</BodyTemplate>
|
</BodyTemplate>
|
||||||
<FooterTemplate>
|
<FooterTemplate>
|
||||||
<Button Color="ButtonColor.Secondary" @onclick="OnHideModalClick">Close</Button>
|
<Button Color="ButtonColor.Secondary" @onclick="OnHideModalClick">Close</Button>
|
||||||
<Button Color="ButtonColor.Danger" @onclick="OnHideModalClick">بستن</Button>
|
@if (Ticket.Status == StatusTicket.Awaitingreview || Ticket.Status == StatusTicket.Read_Checking
|
||||||
|
|| Ticket.Status == StatusTicket.hasbeenanswered)
|
||||||
|
{
|
||||||
|
<Button Color="ButtonColor.Danger" @onclick="OnCloseTicket">بستن</Button>
|
||||||
|
}
|
||||||
|
|
||||||
</FooterTemplate>
|
</FooterTemplate>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<li class="list-group-item" data-toggle="modal" data-target="#issue">
|
<li class="list-group-item" data-toggle="modal" data-target="#issue">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-1">
|
<div class="col-md-2">
|
||||||
<a style="cursor:pointer" @onclick="OnShowModalClick"><br />#@Ticket.TicketID</a>
|
<a style="cursor:pointer" @onclick="OnShowModalClick"><br />#@Ticket.TicketID</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5">
|
<div class="col-md-5">
|
||||||
@@ -47,6 +54,8 @@
|
|||||||
@code {
|
@code {
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public TicketDTO Ticket { get; set; }
|
public TicketDTO Ticket { get; set; }
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<int> OnMultipleOfThree { get; set; }
|
||||||
public BadgeColor badgeColor = BadgeColor.Light;
|
public BadgeColor badgeColor = BadgeColor.Light;
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
protected override async Task OnParametersSetAsync()
|
||||||
@@ -80,7 +89,19 @@
|
|||||||
{
|
{
|
||||||
await modal.ShowAsync();
|
await modal.ShowAsync();
|
||||||
}
|
}
|
||||||
|
private async Task OnCloseTicket()
|
||||||
|
{
|
||||||
|
var rsp = await hc.Put($"Ticket/CancelTicket/{Ticket.TicketID}");
|
||||||
|
if (rsp.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
// await Search(1);
|
||||||
|
await modal.HideAsync();
|
||||||
|
await OnMultipleOfThree.InvokeAsync(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
private async Task OnHideModalClick()
|
private async Task OnHideModalClick()
|
||||||
{
|
{
|
||||||
await modal.HideAsync();
|
await modal.HideAsync();
|
||||||
|
@@ -1,32 +1,85 @@
|
|||||||
<div dir="ltr" class="chat">
|
@using Front.Services
|
||||||
|
@using Shared.DTOs
|
||||||
|
@inject HttpClientController hc;
|
||||||
|
<div class="row">
|
||||||
|
<Alert hidden="@Hidealert" Color="@alertColor" Dismissable="false">
|
||||||
|
<Icon Name="@alertIconName" class="me-2"></Icon>
|
||||||
|
@alertMessage
|
||||||
|
</Alert>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div dir="ltr" class="chat">
|
||||||
<div class="messages" id="chat">
|
<div class="messages" id="chat">
|
||||||
<div class="time">
|
|
||||||
Today at 11:41
|
@for (int i = 0; i < subTickets?.Count; i++)
|
||||||
</div>
|
{
|
||||||
<div class="message parker">
|
if (i == 0 || subTickets[i - 1].Date != @subTickets[i].Date)
|
||||||
Hey, man! What's up, Mr Stark? 👋
|
{
|
||||||
</div>
|
<div class="time"> @subTickets[i].Date </div>
|
||||||
|
}
|
||||||
|
|
||||||
|
string type = subTickets[i].Type == SideType.Customer ? "parker" : "stark";
|
||||||
|
|
||||||
<div class="message stark">
|
<div class="message @type">
|
||||||
Kid, where'd you come from?
|
@subTickets[i].Text
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
<div class="message parker">
|
|
||||||
Field trip! 🤣
|
|
||||||
</div>
|
|
||||||
<div class="message parker">
|
|
||||||
حل شد 🤣
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="message stark">
|
|
||||||
مشکل ما چی شد
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="input">
|
|
||||||
<input placeholder="Type your message here!" type="text">
|
|
||||||
</div>
|
</div>
|
||||||
|
@if (Ticket.Status == StatusTicket.Awaitingreview || Ticket.Status == StatusTicket.Read_Checking
|
||||||
|
|| Ticket.Status == StatusTicket.hasbeenanswered)
|
||||||
|
{
|
||||||
|
<div class="input">
|
||||||
|
<input placeholder="Type your message here!" type="text">
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@code{
|
||||||
|
// alert
|
||||||
|
AlertColor alertColor = AlertColor.Primary;
|
||||||
|
IconName alertIconName = IconName.CheckCircleFill;
|
||||||
|
bool Hidealert = true;
|
||||||
|
string alertMessage = "";
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public TicketDTO Ticket { get; set; }
|
||||||
|
|
||||||
|
public List<SubTicketDTO>? subTickets { get; set; } = new List<SubTicketDTO>();
|
||||||
|
|
||||||
|
protected override async Task OnParametersSetAsync()
|
||||||
|
{
|
||||||
|
var rsp = await hc.Get($"Ticket/GetSubTicket/{Ticket.TicketID}");
|
||||||
|
if (rsp.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var res = await rsp.Content.ReadFromJsonAsync<ICollection<SubTicketDTO>>();
|
||||||
|
subTickets = res?.ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowDangerAlert("خطایی در اجرای عملیات رخ داده");
|
||||||
|
}
|
||||||
|
await base.OnParametersSetAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@functions {
|
||||||
|
private void ShowSuccessAlert(string msg)
|
||||||
|
{
|
||||||
|
Hidealert = false;
|
||||||
|
alertColor = AlertColor.Success;
|
||||||
|
alertIconName = IconName.CheckCircleFill;
|
||||||
|
alertMessage = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowDangerAlert(string msg)
|
||||||
|
{
|
||||||
|
Hidealert = false;
|
||||||
|
alertColor = AlertColor.Danger;
|
||||||
|
alertIconName = IconName.ExclamationTriangleFill;
|
||||||
|
alertMessage = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -77,7 +77,8 @@
|
|||||||
<ul class="list-group fa-padding">
|
<ul class="list-group fa-padding">
|
||||||
@for (int i = 0; i < request?.list.Count; i++)
|
@for (int i = 0; i < request?.list.Count; i++)
|
||||||
{
|
{
|
||||||
<LTicket Ticket="request?.list[i]" />
|
|
||||||
|
<LTicket OnMultipleOfThree=@Search Ticket="request?.list[i]" />
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
<nav aria-label="Page navigation">
|
<nav aria-label="Page navigation">
|
||||||
@@ -111,6 +112,8 @@
|
|||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
LTicket child;
|
||||||
|
|
||||||
private Modal modal = default!;
|
private Modal modal = default!;
|
||||||
// alert
|
// alert
|
||||||
AlertColor alertColor = AlertColor.Primary;
|
AlertColor alertColor = AlertColor.Primary;
|
||||||
@@ -157,12 +160,13 @@
|
|||||||
alertIconName = IconName.ExclamationTriangleFill;
|
alertIconName = IconName.ExclamationTriangleFill;
|
||||||
alertMessage = msg;
|
alertMessage = msg;
|
||||||
}
|
}
|
||||||
private async Task Search(int pi)
|
public async Task Search(int pi)
|
||||||
{
|
{
|
||||||
|
|
||||||
var rsp = await hc.Post<ItemSerchGetTicket>("Ticket/GetAll", new ItemSerchGetTicket
|
var rsp = await hc.Post<ItemSerchGetTicket>("Ticket/GetAll", new ItemSerchGetTicket
|
||||||
{
|
{
|
||||||
PageIndex = pi,
|
PageIndex = pi,
|
||||||
PageSize = 10,
|
PageSize = 5,
|
||||||
TicketID = string.IsNullOrEmpty(TicketID) ? null : Convert.ToInt32(TicketID),
|
TicketID = string.IsNullOrEmpty(TicketID) ? null : Convert.ToInt32(TicketID),
|
||||||
Title = Title
|
Title = Title
|
||||||
|
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
|
using BlazorBootstrap;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace Front.Services
|
namespace Front.Services
|
||||||
{
|
{
|
||||||
@@ -32,6 +37,18 @@ namespace Front.Services
|
|||||||
if (request.StatusCode == System.Net.HttpStatusCode.Unauthorized)
|
if (request.StatusCode == System.Net.HttpStatusCode.Unauthorized)
|
||||||
_nav.NavigateTo("/Sign-in/unon");
|
_nav.NavigateTo("/Sign-in/unon");
|
||||||
return request;
|
return request;
|
||||||
|
}
|
||||||
|
public async Task<HttpResponseMessage> Put(string route)
|
||||||
|
{
|
||||||
|
var jsonString = "{\"appid\":1,\"platformid\":1,\"rating\":3}";
|
||||||
|
var httpContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
|
||||||
|
var response = await _hc.PutAsync(route, httpContent);
|
||||||
|
if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
|
||||||
|
_nav.NavigateTo("/Sign-in/unon");
|
||||||
|
return response;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user