TaskAndTicket - Fine, reward.... - SubAccountRoll Create And edit - HeaderAndFooter

This commit is contained in:
SamSys
2025-01-11 22:58:29 +03:30
parent 2b0405b129
commit 2bb3cd2758
90 changed files with 7604 additions and 3852 deletions

View File

@@ -1490,7 +1490,7 @@ public static class Tools
//این متد آخر همان روز را به صورت دیت تایم برمیگرداند
public static DateTime ToGeorgianDateTime2(this string persianDate)
public static DateTime ToEndDayOfGeorgianDateTime(this string persianDate)
{
persianDate = persianDate.ToEnglishNumber();
try

View File

@@ -19,4 +19,5 @@ public class EditTask:CreateTask
public EditTicket TicketViewModel { get; set; }
public long? TicketId { get; set; }
public List<AccountViewModel> AssignsLists { get; set; }
public bool HasTicket { get; set; }
}

View File

@@ -16,8 +16,7 @@ public interface ITaskApplication
OperationResult CreateTask(CreateTask command);
OperationResult CreateTaskByPosition(CreateTask command);
EditTask GetDetails(long taskId);
//گرفتن تمامی وظایف
List<TaskViewModel> GetTasks(TaskSearchModel searchModel);
List<TaskViewModel> GetSelfTasks(TaskSearchModel searchModel);
List<TaskViewModel> GetAllTasks(TaskSearchModel searchModel);
//List<TaskViewModel> GetAllNotSelfIncludedTasks(TaskSearchModel searchModel);
@@ -27,6 +26,8 @@ public interface ITaskApplication
// گرفتن مهلت برای یک وظیفه
OperationResult CreateRequestTime(CreateTaskTimeRequest command);
List<TaskViewModel> GetRequestTaskHasTicket(TaskSearchModel searchModel);
//تایید مهلت وظیفه
OperationResult AcceptRequestDatetime(long taskId, long assignedId,string message);
OperationResult RejectTimeRequest(long taskId, long assignedId, string message);
@@ -47,6 +48,9 @@ public interface ITaskApplication
List<TaskViewModel> AllRequestedTasks(TaskSearchModel searchModel);
int GetRequestedTasksCount();
int TasksHaveTicketCounts(long userId);
int TasksHaveTicketRequestsCount(long userId);
List<TaskMessageViewModel> GetTaskMessages(long assignId);
OperationResult ChangeRequestTimeAndAccept(string time,long taskId,long assignedId, string message);
@@ -61,6 +65,7 @@ public interface ITaskApplication
int OverdueTasksCount(long userId);
//متد انتقال داده از تسک به ارجاعی ها
//OperationResult MoveDataFRomTaskToAssign();
}

View File

@@ -17,4 +17,5 @@ public class EditTicket:CreateTicket
public string CreationDateStr { get; set; }
public string Status { get; set; }
public bool HasTask { get; set; }
public bool IsDeleted { get; set; }
}

View File

@@ -15,6 +15,7 @@ public interface ITicketApplication
EditTicket GetDetails(long id);
EditTicket GetDetailsForClient(long id);
List<TicketViewModel> GetAll(TicketSearchModel searchModel);
List<TicketViewModel> GetDeletedTicket();
bool IsExist(long id);
OperationResult UploadMedia(IFormFile mediaFile, long senderId);
OperationResult RemoveMedia(long mediaId);
@@ -27,6 +28,8 @@ public interface ITicketApplication
OperationResult DeletePendingAdminResponse(int adminResId);
OperationResult EditPendingAdminResponse(long adminResId, string newMessage);
OperationResult CloseTicket(long ticketId);
OperationResult DeleteTicket(long ticketId);
OperationResult RestoreDeletedTicket(long ticketId);
TypesCountOfTicketViewModel GetTypesCountOfTicketForAdmin();
TypesCountOfTicketViewModel GetTypesCountOfTicketForClient(long workshopId);
#region Vafa

View File

@@ -16,9 +16,9 @@ using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Rendering;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using TaskManager.Domain.PositionAgg;
using Company.Domain.WorkshopAgg;
using System.Security.Claims;
using AccountManagement.Domain.PositionAgg;
using AccountManagement.Domain.SubAccountAgg;
using AccountManagement.Domain.SubAccountPermissionSubtitle1Agg;
using AccountManagement.Domain.SubAccountRoleAgg;

View File

@@ -4,7 +4,7 @@ using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Domain.AccountAgg;
using AccountManagement.Domain.AssignAgg;
using TaskManager.Domain.PositionAgg;
using AccountManagement.Domain.PositionAgg;
namespace TaskManager.Application;

View File

@@ -1,25 +1,21 @@
using _0_Framework.Application;
using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using AccountManagement.Application.Contracts.Assign;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.TaskMessage;
using AccountManagement.Domain.AccountAgg;
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.AssignAgg;
using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.PositionAgg;
using AccountManagement.Domain.TaskAgg;
using IPE.SmsIrClient.Models.Results;
using TaskManager.Domain.PositionAgg;
using System.Reflection;
using Microsoft.AspNetCore.Http;
using System.Globalization;
using AccountManagement.Application.Contracts.TaskMessage;
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.TaskMessageAgg;
using AccountManagement.Domain.TicketAgg;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
namespace AccountManagement.Application;
@@ -33,7 +29,6 @@ public class TaskApplication : ITaskApplication
private readonly IHttpContextAccessor _contextAccessor;
private readonly ITaskMessageRepository _taskMessageRepository;
private readonly ITicketRepository _ticketRepository;
private readonly IAuthHelper _authHelper;
@@ -358,7 +353,7 @@ public class TaskApplication : ITaskApplication
{
}
var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) || command.EndTaskTime == "00:00" ? command.EndTaskDate.ToGeorgianDateTime2() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime);
var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) || command.EndTaskTime == "00:00" ? command.EndTaskDate.ToEndDayOfGeorgianDateTime() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime);
var errorDateTime = new DateTime(3000, 12, 20, new PersianCalendar());
if (endTask == errorDateTime)
@@ -372,7 +367,7 @@ public class TaskApplication : ITaskApplication
}
var task = new Tasks(command.Title, command.Description, command.SenderId, command.ContractingPartyName);
_taskRepository.Create(task);
if (command.TaskScheduleId>0)
if (command.TaskScheduleId > 0)
{
task.SetTaskSchedule(command.TaskScheduleId);
}
@@ -380,7 +375,7 @@ public class TaskApplication : ITaskApplication
foreach (var receiver in receivers)
{
var assign = new Assign(task.id, task.SenderId, receiver.id, sender.Position.PositionValue, receiver.Fullname,
receiver.Position.PositionValue, endTask,true);
receiver.Position.PositionValue, endTask, true);
_assignRepository.Create(assign);
}
@@ -432,7 +427,7 @@ public class TaskApplication : ITaskApplication
DateTime endTask;
if (string.IsNullOrWhiteSpace(command.EndTaskTime))
{
endTask = command.EndTaskDate.ToGeorgianDateTime2();
endTask = command.EndTaskDate.ToEndDayOfGeorgianDateTime();
}
else
{
@@ -481,13 +476,7 @@ public class TaskApplication : ITaskApplication
return _taskRepository.GetDetails(taskId);
}
//لیست کامل تسک ها
public List<TaskViewModel> GetTasks(TaskSearchModel searchModel)
{
var test = _taskRepository.GetTasks(searchModel);
return test;
}
public List<TaskViewModel> GetSelfTasks(TaskSearchModel searchModel)
{
@@ -574,6 +563,12 @@ public class TaskApplication : ITaskApplication
_taskRepository.SaveChanges();
return operation.Succcedded(task.id);
}
public List<TaskViewModel> GetRequestTaskHasTicket(TaskSearchModel searchModel)
{
return _taskRepository.GetRequestTaskHasTicket(searchModel);
}
//تایید درخواست مهلت
public OperationResult AcceptRequestDatetime(long taskId, long assignedId, string message)
{
@@ -741,9 +736,9 @@ public class TaskApplication : ITaskApplication
}
var task = _taskRepository.GetIncludeAssign(command.TaskId);
if (task.SenderId ==accountId)
if (task.SenderId == accountId)
{
command.Description=string.IsNullOrWhiteSpace(command.Description) ? "وظیفه محول‌شده توسط ارسال کننده به پایان رسیده است." :command.Description;
command.Description = string.IsNullOrWhiteSpace(command.Description) ? "وظیفه محول‌شده توسط ارسال کننده به پایان رسیده است." : command.Description;
}
else
{
@@ -870,6 +865,17 @@ public class TaskApplication : ITaskApplication
return _taskRepository.AllRequestedTasks(searchModel);
}
public int TasksHaveTicketCounts(long userId)
{
return _taskRepository.TasksHaveTicketCounts(userId);
}
public int TasksHaveTicketRequestsCount(long userId)
{
return _taskRepository.TasksHaveTicketRequestsCount(userId);
}
public List<TaskMessageViewModel> GetTaskMessages(long assignId)
{
return _taskMessageRepository.GetTaskMessages(assignId);
@@ -900,16 +906,13 @@ public class TaskApplication : ITaskApplication
return operation.Failed("تاریخی برای درخواست وظیفه ثبت نشده است");
}
DateTime timeGr = time.ToGeorgianDateTime2();
DateTime timeGr = time.ToEndDayOfGeorgianDateTime();
if (timeGr.IsInvalidDateTime())
{
return operation.Failed("لطفا تاریخ خود را به درستی وارد کنید");
}
message = string.IsNullOrWhiteSpace(message) ? "درخواست شما مورد تایید قرار گرفت" : message;
assign.ChangeTimeTask(timeGr);
var messageEntity = new TaskMessage(message, "تایید و تغییر درخواست کنسل", assign.id);
_taskMessageRepository.Create(messageEntity);
_taskMessageRepository.SaveChanges();
@@ -1009,6 +1012,7 @@ public class TaskApplication : ITaskApplication
return _taskRepository.OverdueTasksCount(userId);
}
//public OperationResult MoveDataFRomTaskToAssign()
//{
// return _taskRepository.MoveDataFRomTaskToAssign();

View File

@@ -94,8 +94,8 @@ public class TaskScheduleApplication : ITaskScheduleApplication
}
try
{
DateTime previousDateRaw = command.EndTaskDate.ToGeorgianDateTime2();
DateTime previousDateEdited = command.EndTaskDate.ToGeorgianDateTime2();
DateTime previousDateRaw = command.EndTaskDate.ToEndDayOfGeorgianDateTime();
DateTime previousDateEdited = command.EndTaskDate.ToEndDayOfGeorgianDateTime();
int count = Convert.ToInt32(command.ScheduleCount);
bool isInt = int.TryParse(command.ScheduleUnitNumber, out int unitNumber);

View File

@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Reflection;
using _0_Framework.Application;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Application.Contracts.TicketAccessAccount;
@@ -14,12 +8,12 @@ using AccountManagement.Domain.AssignAgg;
using AccountManagement.Domain.ClientResponseAgg;
using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.TaskAgg;
using AccountManagement.Domain.TicketAccessAccountAgg;
using AccountManagement.Domain.TicketAgg;
using CompanyManagment.App.Contracts.Workshop;
using IPE.SmsIrClient.Models.Results;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace AccountManagement.Application;
@@ -68,7 +62,7 @@ public class TicketApplication : ITicketApplication
var ticketNumber = (_ticketRepository.GetLastTicketNumber() + 1).ToString("D5");
var ticket = new Ticket(command.Title, command.Description, command.SenderId, command.ContractingPartyName,
command.TicketType, command.WorkshopId, ticketNumber, command.SubAccountId);
command.TicketType, command.WorkshopId, ticketNumber,command.SubAccountId);
_ticketRepository.Create(ticket);
_ticketRepository.SaveChanges();
@@ -203,7 +197,7 @@ public class TicketApplication : ITicketApplication
var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) ? command.EndTaskDate.ToGeorgianDateTime2() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime);
var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) ? command.EndTaskDate.ToEndDayOfGeorgianDateTime() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime);
var task = new Tasks(command.Title, command.Description, command.SenderId, command.ContractingPartyName, ticketId);
_taskRepository.Create(task);
@@ -214,7 +208,7 @@ public class TicketApplication : ITicketApplication
foreach (var receiver in receivers)
{
var assign = new Assign(task.id, task.SenderId, receiver.id, sender.Position.PositionValue, receiver.Fullname,
receiver.Position.PositionValue, endTask,true);
receiver.Position.PositionValue, endTask, true);
_assignRepository.Create(assign);
}
_assignRepository.SaveChanges();
@@ -440,6 +434,11 @@ public class TicketApplication : ITicketApplication
return _ticketRepository.GetAll(searchModel);
}
public List<TicketViewModel> GetDeletedTicket()
{
return _ticketRepository.GetDeletedTicket();
}
public bool IsExist(long id)
{
return _ticketRepository.Exists(x => x.id == id);
@@ -563,11 +562,11 @@ public class TicketApplication : ITicketApplication
try
{
var adminRes = _ticketRepository.GetAdminResponse(adminResId);
if (adminRes.AdminAccountId!=userId)
if (adminRes.AdminAccountId != userId)
{
return operation.Failed("شما نمیتوانید این پیام را پاک کنید");
}
if (adminRes.IsActiveString=="true")
if (adminRes.IsActiveString == "true")
{
return operation.Failed("شما نمیتوانید این پیام را پاک کنید");
}
@@ -581,11 +580,11 @@ public class TicketApplication : ITicketApplication
}
}
public OperationResult EditPendingAdminResponse(long adminResId,string newMessage)
public OperationResult EditPendingAdminResponse(long adminResId, string newMessage)
{
var operation = new OperationResult();
var entity=_ticketRepository.GetAdminResponse(adminResId);
if (entity==null)
var entity = _ticketRepository.GetAdminResponse(adminResId);
if (entity == null)
{
return operation.Failed("مشکل سیستمی!!");
}
@@ -596,7 +595,7 @@ public class TicketApplication : ITicketApplication
public OperationResult CloseTicket(long ticketId)
{
var operation= new OperationResult();
var operation = new OperationResult();
var ticket = _ticketRepository.Get(ticketId);
if (ticket == null)
{
@@ -607,6 +606,28 @@ public class TicketApplication : ITicketApplication
return operation.Succcedded();
}
public OperationResult DeleteTicket(long ticketId)
{
var op = new OperationResult();
var ticket = _ticketRepository.Get(ticketId);
if (ticket == null)
return op.Failed("چنین آیتمی وجود ندارد");
ticket.Delete();
_ticketRepository.SaveChanges();
return op.Succcedded();
}
public OperationResult RestoreDeletedTicket(long ticketId)
{
var op = new OperationResult();
var ticket = _ticketRepository.Get(ticketId);
if (ticket == null)
return op.Failed("چنین آیتمی وجود ندارد");
ticket.RestoreDelete ();
_ticketRepository.SaveChanges();
return op.Succcedded();
}
public TypesCountOfTicketViewModel GetTypesCountOfTicketForAdmin()
{
return _ticketRepository.GetTypesCountOfTicketForAdmin();
@@ -616,6 +637,7 @@ public class TicketApplication : ITicketApplication
{
return _ticketRepository.GetTypesCountOfTicketForClient(workshopId);
}
#region Vafa
public int GetAdminTicketsCount()

View File

@@ -14,6 +14,7 @@ using AccountManagement.Domain.AccountLeftWorkAgg;
using AccountManagement.Domain.AssignAgg;
using AccountManagement.Domain.CameraAccountAgg;
using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.PositionAgg;
using AccountManagement.Domain.RoleAgg;
using AccountManagement.Domain.SubAccountAgg;
using AccountManagement.Domain.SubAccountPermissionSubtitle1Agg;
@@ -32,7 +33,6 @@ using Company.Domain.WorkshopAccountAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using TaskManager.Application;
using TaskManager.Domain.PositionAgg;
using TaskManager.Infrastructure.EFCore.Repository;
namespace AccountManagement.Configuration

View File

@@ -2,9 +2,8 @@
using _0_Framework.Domain;
using AccountManagement.Domain.AccountLeftWorkAgg;
using AccountManagement.Domain.CameraAccountAgg;
using AccountManagement.Domain.PositionAgg;
using AccountManagement.Domain.RoleAgg;
using TaskManager.Domain.PositionAgg;
namespace AccountManagement.Domain.AccountAgg

View File

@@ -4,7 +4,7 @@ using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Domain.AccountAgg;
namespace TaskManager.Domain.PositionAgg;
namespace AccountManagement.Domain.PositionAgg;
public interface IPositionRepository : IRepository<long, Position>
{

View File

@@ -2,7 +2,7 @@
using _0_Framework.Domain;
using AccountManagement.Domain.AccountAgg;
namespace TaskManager.Domain.PositionAgg;
namespace AccountManagement.Domain.PositionAgg;
public class Position:EntityBase
{

View File

@@ -4,33 +4,140 @@ using _0_Framework.Application;
using _0_Framework.Domain;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.TaskMessage;
using Microsoft.VisualBasic.CompilerServices;
namespace AccountManagement.Domain.TaskAgg;
public interface ITaskRepository:IRepository<long,Tasks>
{
/// <summary>
/// گرقتن اطلاعات تسک
/// </summary>
/// <param name="TaskId"></param>
/// <returns></returns>
EditTask GetDetails(long TaskId);
/// <summary>
/// گرفتن تسک با ارجاع ها
/// </summary>
/// <param name="taskId"></param>
/// <returns></returns>
Tasks GetIncludeAssign(long taskId);
/// <summary>
/// حذف تسک
/// </summary>
/// <param name="id"></param>
void Remove(long id);
//گرفتن تمامی وظایف
List<TaskViewModel> GetTasks(TaskSearchModel searchModel);
/// <summary>
/// گرفتن تمامی وظایف
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> GetAllTasks(TaskSearchModel searchModel);
/// <summary>
/// گرفتن لیست تسک های درخواست داده شده. بدون تیکت
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> GetRequestedTasks(TaskSearchModel searchModel);
/// <summary>
/// لیست درخواست های تسک دارای تیکت
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> GetRequestTaskHasTicket(TaskSearchModel searchModel);
/// <summary>
/// گرفتن وظایف شخصی
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> GetSelfTasks(TaskSearchModel searchModel);
//List<TaskViewModel> GetAllNotSelfIncludedTasks(TaskSearchModel searchModel);
/// <summary>
/// لیست وظایف ارسالی
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> GetReceivedTasks(TaskSearchModel searchModel);
/// <summary>
/// لیست وظایف ارسالی
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> GetSentTasks(TaskSearchModel searchModel);
/// <summary>
/// همه لیست درخواست ها
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> AllRequestedTasks(TaskSearchModel searchModel);
/// <summary>
/// لیست تسک های دارا تیکت
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
List<TaskViewModel> GetTasksHaveTicket(TaskSearchModel searchModel);
string SetTasksColors(DateTime time,bool isCancel);
/// <summary>
/// تعداد تسک های درخواستی. بدون تیکت
/// </summary>
/// <returns></returns>
int GetRequestedTasksCount();
/// <summary>
/// گرفتن جزئیات درخواست وظیفه
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
EditTask GetRequestDetails(long id);
/// <summary>
/// گرفتن مسیر environment
/// </summary>
/// <returns></returns>
string GetWebEnvironmentPath();
/// <summary>
/// آیا تسک عقب افتاده ای دارد یا خیر
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
bool HasOverdueTasks(long userId);
/// <summary>
/// تعداد تسک های عقب افتاده
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
int OverdueTasksCount(long userId);
/// <summary>
/// تعداد تسک های دارای تیکت
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
int TasksHaveTicketCounts(long userId);
/// گرفتن پیام های مربوط به هر تسک
/// <summary>
/// تعداد درخواست های تسک های دارا تیکت
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
int TasksHaveTicketRequestsCount(long userId);
// گرفتن پیام های مربوط به هر تسک

View File

@@ -10,6 +10,7 @@ namespace AccountManagement.Domain.TicketAgg;
public interface ITicketRepository:IRepository<long,Ticket>
{
List<TicketViewModel> GetAll(TicketSearchModel searchModel);
List<TicketViewModel> GetDeletedTicket();
List<TicketViewModel> GetTicketsForClients(TicketSearchModel searchModel);
void CreateAdminResponse(AdminResponse command);
void CreateClientResponse(ClientResponse command);

View File

@@ -33,6 +33,7 @@ public class Ticket:EntityBase
public List<ClientResponse> ClientResponses { get; set; }
public List<AdminResponse> AdminResponses{ get; set; }
public List<TicketMedia> TicketMedias { get; set; }
public bool IsDeleted { get; set; }
public void Completed()
{
@@ -53,4 +54,14 @@ public class Ticket:EntityBase
{
Status = "باز";
}
public void Delete()
{
IsDeleted = true;
}
public void RestoreDelete()
{
IsDeleted = false;
}
}

View File

@@ -10,11 +10,11 @@ using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.TaskAgg;
using AccountManagement.Domain.TaskMediaAgg;
using AccountManagement.Domain.TaskSubjectAgg;
using TaskManager.Domain.PositionAgg;
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.AdminResponseMediaAgg;
using AccountManagement.Domain.ClientResponseAgg;
using AccountManagement.Domain.ClientResponseMediaAgg;
using AccountManagement.Domain.PositionAgg;
using AccountManagement.Domain.TicketAgg;
using AccountManagement.Domain.TicketMediasAgg;
using AccountManagement.Domain.TaskMessageAgg;

View File

@@ -1,6 +1,6 @@
using Microsoft.EntityFrameworkCore;
using AccountManagement.Domain.PositionAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using TaskManager.Domain.PositionAgg;
namespace TaskManager.Infrastructure.EFCore.Mapping;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
/// <inheritdoc />
public partial class AddIsDeleteToicket : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsDeleted",
table: "Tickets",
type: "bit",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsDeleted",
table: "Tickets");
}
}
}

View File

@@ -364,6 +364,30 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
b.ToTable("Medias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("PositionName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("PositionValue")
.HasMaxLength(2)
.HasColumnType("int");
b.HasKey("id");
b.ToTable("Positions", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Property<long>("id")
@@ -800,6 +824,9 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<bool>("IsDeleted")
.HasColumnType("bit");
b.Property<long>("SenderId")
.HasColumnType("bigint");
@@ -845,33 +872,9 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
b.ToTable("TicketMedias", (string)null);
});
modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("PositionName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("PositionValue")
.HasMaxLength(2)
.HasColumnType("int");
b.HasKey("id");
b.ToTable("Positions", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.HasOne("TaskManager.Domain.PositionAgg.Position", "Position")
b.HasOne("AccountManagement.Domain.PositionAgg.Position", "Position")
.WithMany("Accounts")
.HasForeignKey("PositionId");
@@ -1187,6 +1190,11 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
b.Navigation("TicketMedias");
});
modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Navigation("Accounts");
@@ -1237,11 +1245,6 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
b.Navigation("TicketMedias");
});
modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}

View File

@@ -10,9 +10,9 @@ using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading.Tasks;
using AccountManagement.Domain.PositionAgg;
using AccountManagement.Domain.RoleAgg;
using Microsoft.AspNetCore.Http;
using TaskManager.Domain.PositionAgg;
namespace AccountMangement.Infrastructure.EFCore.Repository;

View File

@@ -4,10 +4,10 @@ using _0_Framework.InfraStructure;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Domain.AccountAgg;
using AccountManagement.Domain.PositionAgg;
using AccountMangement.Infrastructure.EFCore;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using TaskManager.Domain.PositionAgg;
namespace TaskManager.Infrastructure.EFCore.Repository;

View File

@@ -13,12 +13,11 @@ using AccountManagement.Application.Contracts.TaskMessage;
using AccountManagement.Domain.AccountAgg;
using AccountManagement.Domain.TaskAgg;
using AccountManagement.Domain.TicketAgg;
using TaskManager.Domain.PositionAgg;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
using Microsoft.Identity.Client;
using Newtonsoft.Json.Linq;
using Microsoft.AspNetCore.Hosting;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Domain.PositionAgg;
using Microsoft.Identity.Client;
namespace AccountMangement.Infrastructure.EFCore.Repository;
@@ -165,7 +164,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
query = _accountContext.Assigns.Include(x => x.Task).Where(x =>
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && accountId == x.Task.SenderId).Select(x =>
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && accountId == x.Task.SenderId && x.Task.TicketId == null).Select(x =>
new TaskViewModel()
{
AssignedId = x.AssignedId,
@@ -372,7 +371,269 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
var final = finalAssign.Select(x => new TaskViewModel()
{
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList,
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? AddAssign(x.AssignList, x.Sender) : x.AssignList,
Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel()
{
PositionValue = 0,
Fullname = "-"
} : x.Sender,
Assigned = x.Assigned,
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
Color = x.Color,
MediaCount = x.MediaCount,
HasAttachment = x.HasAttachment,
SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName,
EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59"
? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}"
: "",
Description = x.Description,
IsDoneRequest = x.IsDoneRequest,
CanCheckRequests = x.Sender.PositionValue >= positionValue,
Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname,
AssignedReceiverViewModel = x.AssignViewModels.Any()
? x.AssignViewModels.MinBy(a => a.AssignedPositionValue)
: new()
{
AssignedName = "-",
AssignedPositionValue = 0
},
}).ToList();
return final;
}
public List<TaskViewModel> GetRequestTaskHasTicket(TaskSearchModel searchModel)
{
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
var emptyAcc = new AccountViewModel()
{
Fullname = "-",
PositionValue = 0
};
var query = _accountContext.Assigns.Include(x => x.Task).Where(x =>
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && accountId == x.Task.SenderId && (x.Task.TicketId != null && x.Task.TicketId > 0)).Select(x =>
new TaskViewModel()
{
AssignedId = x.AssignedId,
AssignerId = x.AssignerId,
CreateDate = x.Task.CreationDate.ToFarsi(),
EndTaskDateFA = x.EndTaskDate.ToFarsi(),
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDate,
Name = x.Task.Title,
RequestCancel = x.IsCanceledRequest,
RequestTime = x.TimeRequest,
Id = x.Task.id,
CreateTaskDateGE = x.Task.CreationDate,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCanceledRequest,
ContractingPartyName = x.Task.ContractingPartyName,
MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id),
Description = x.Task.Description,
IsDoneRequest = x.IsDoneRequest
});
//res = res.GroupBy(x => x.Id).Select(x => x.First());
//res = res.OrderBy(x => x.IsDone ? 1 : 0)
// .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1);
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
{
query = query.Where(x =>
(x.Description != null && x.Description.Contains(searchModel.GeneralSearch))
|| x.ContractingPartyName.Contains(searchModel.GeneralSearch)
|| x.Name.Contains(searchModel.GeneralSearch));
}
var res = query.Select(x => new TaskViewModel()
{
Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel()
{
PositionValue = a.Position.PositionValue,
Id = a.id,
Fullname = a.Fullname,
}).FirstOrDefault(a => a.Id == x.AssignerId),
SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname,
Assigned = _accountContext.Assigns.Where(a => a.TaskId == x.Id)
.Where(a => a.AssignedPositionValue >= positionValue).Select(a => a.AssignedId).ToList(),
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
Description = x.Description,
IsDoneRequest = x.IsDoneRequest
});
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
{
var start = searchModel.StartDate.ToGeorgianDateTime();
var end = searchModel.EndDate.ToGeorgianDateTime();
res = res.Where(x =>
((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end < x.EndTaskDateGE && x.EndTaskDateGE > start))
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|| ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end < x.EndTaskDateGE && x.EndTaskDateGE > end)));
}
if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest))
{
bool isDoneReq = bool.Parse(searchModel.IsDoneRequest);
res = res.Where(x => x.IsDoneRequest == isDoneReq);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
{
bool isDone = bool.Parse(searchModel.IsDone);
res = res.Where(x => x.IsDone == isDone);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled))
{
bool isCancel = bool.Parse(searchModel.IsCanceled);
res = res.Where(x => x.IsCancel == isCancel);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest))
{
bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest);
res = res.Where(x => x.RequestTime == isTimeRequest);
}
if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted))
{
res = res.Where(x => x.AcceptedTimeRequest > 0);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest))
{
bool isCancelReq = bool.Parse(searchModel.IsCancelRequest);
res = res.Where(x => x.IsCancelRequest == isCancelReq);
}
var resEnum = res.AsEnumerable();
var result = resEnum.GroupBy(x => x.Id).Select(x => x.First());
if (searchModel.AccountId > 0)
{
result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
}
var orderResult = result.OrderByDescending(x => x.IsCancelRequest)
.ThenByDescending(x => x.RequestTime).ThenByDescending(x => x.IsDoneRequest);
var finalList = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
var addAssign = finalList.Select(x => new TaskViewModel()
{
AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id) && accountId != a.id)
.Select(a => new AssignViewModel()
{
AssignedName = a.Fullname,
AssignedPositionValue = a.Position.PositionValue
}).ToList(),
Sender = x.Sender,
SelfAssigner = x.Sender.Id == accountId ? true : false,
Assigned = x.Assigned,
SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false,
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
SelfName = x.SelfName,
Description = x.Description,
IsDoneRequest = x.IsDoneRequest,
}).ToList();
var finalAssign = addAssign.Select(x => new TaskViewModel()
{
AssignList = x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList()
{
AssignViewModels = a.ToList(),
PosValue = a.Key
}).ToList(),
Sender = x.Sender,
Assigned = x.Assigned,
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
Color = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest ? SetRequestTasksColors(x.RequestTime, x.IsCancelRequest, x.IsDoneRequest) : "",
MediaCount = x.MediaCount,
HasAttachment = x.MediaCount > 0,
SelfName = x.SelfName,
SelfAssigned = x.SelfAssigned,
SelfAssigner = x.SelfAssigner,
Description = x.Description,
IsDoneRequest = x.IsDoneRequest,
AssignViewModels = x.AssignViewModels
}).ToList();
var final = finalAssign.Select(x => new TaskViewModel()
{
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? AddAssign(x.AssignList, x.Sender) : x.AssignList,
Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel()
{
PositionValue = 0,
@@ -690,9 +951,6 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
}
public List<TaskViewModel> GetSentTasks(TaskSearchModel searchModel)
{
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
@@ -709,7 +967,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
.ThenInclude(x => x.Media)
.Where(x =>
x.Task.IsActiveString == "true" && (x.AssignerId == accountId && x.AssignedId != accountId) && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) &&
x.Task.IsActiveString == "true" && (x.AssignerId == accountId && x.AssignedId != accountId) && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TicketId == null &&
x.Task.SenderId == accountId)
.Select(x =>
new TaskViewModel()
@@ -974,7 +1232,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
{
AssignList = !(x.SelfAssigned || x.SelfAssigner)
? ExtraTools.AddAssign(x.AssignList, x.Sender)
? AddAssign(x.AssignList, x.Sender)
: x.AssignList,
Sender = !(x.SelfAssigned || x.SelfAssigner)
? new AccountViewModel()
@@ -1185,7 +1443,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
.ThenByDescending(x => x.RequestTime).ThenByDescending(x => x.IsDoneRequest);
var finalList = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
var AddAssign = finalList.Select(x => new TaskViewModel()
var addAssign = finalList.Select(x => new TaskViewModel()
{
AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id) && accountId != a.id)
.Select(a => new AssignViewModel()
@@ -1222,7 +1480,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
}).ToList();
var finalAssign = AddAssign.Select(x => new TaskViewModel()
var finalAssign = addAssign.Select(x => new TaskViewModel()
{
AssignList = x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList()
@@ -1259,7 +1517,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
var final = finalAssign.Select(x => new TaskViewModel()
{
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList,
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? AddAssign(x.AssignList, x.Sender) : x.AssignList,
Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel()
{
PositionValue = 0,
@@ -1533,7 +1791,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
{
AssignList = !(x.SelfAssigned || x.SelfAssigner)
? ExtraTools.AddAssign(x.AssignList, x.Sender)
? AddAssign(x.AssignList, x.Sender)
: x.AssignList,
Sender = !(x.SelfAssigned || x.SelfAssigner)
? new AccountViewModel()
@@ -1582,6 +1840,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
}
public string SetTasksColors(DateTime date, bool isCancel)
{
if (isCancel)
@@ -1637,14 +1896,14 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
{
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId)).GroupBy(x => x.TaskId)
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId == null ).GroupBy(x => x.TaskId)
.Select(x => x.First()).Count();
}
else
{
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId)).GroupBy(x => x.TaskId)
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId == null).GroupBy(x => x.TaskId)
.Select(x => x.First()).Count();
}
}
@@ -1696,9 +1955,17 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
}).FirstOrDefault();
query.TicketViewModel = query.TicketId != null && query.TicketId > 0
? _ticketRepository.GetDetails(query.TicketId.Value)
: null;
if (query.TicketId != null && query.TicketId > 0)
{
query.TicketViewModel = _ticketRepository.GetDetails(query.TicketId.Value);
query.HasTicket = true;
}
else
{
query.TicketViewModel = null;
}
return query;
}
@@ -1715,14 +1982,14 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
{
var nowDate = DateTime.Now.Date;
var hasOverDueTask = _accountContext.Assigns.Any(x => x.AssignedId == userId && x.EndTaskDate.Date < nowDate && !x.IsCancel &&
var hasOverDueTask = _accountContext.Assigns.Where(x => x.AssignedId == userId && x.EndTaskDate.Date < nowDate && !x.IsCancel &&
!x.IsCanceledRequest && !x.IsDone
&& !x.IsDoneRequest && !x.TimeRequest);
&& !x.IsDoneRequest && !x.TimeRequest).GroupBy(x => x.TaskId).Select(x => x.First()).Any();
var hasOverDueRequest = _accountContext.Assigns.Include(x => x.TaskMessageList)
.Any(x => (x.IsCanceledRequest
.Where(x => (x.IsCanceledRequest
|| x.IsDoneRequest || x.TimeRequest) && !x.IsCancel && !x.IsDone &&
x.TaskMessageList.OrderByDescending(m => m.id).First().CreationDate.Date < nowDate);
x.TaskMessageList.OrderByDescending(m => m.id).First().CreationDate.Date < nowDate).GroupBy(x => x.TaskId).Select(x => x.First()).Any();
if (hasOverDueRequest || hasOverDueTask)
{
return true;
@@ -1739,6 +2006,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
var account = _accountRepository.GetIncludePositions(userId);
if (account.Position == null)
return 0;
var positionValue = account.Position.PositionValue;
DateTime now = DateTime.Now;
int overdueTasksCount;
@@ -1785,6 +2053,35 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
return overdueTasksCount + overdueRequestsCount;
}
public int TasksHaveTicketCounts(long userId)
{
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
!x.IsCanceledRequest && !x.IsDoneRequest &&
!x.TimeRequest && (x.AssignerId == userId || x.AssignedId != userId) &&
(x.Task.TicketId != null && x.Task.TicketId > 0)).GroupBy(x => x.TaskId).Count();
}
public int TasksHaveTicketRequestsCount(long userId)
{
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
if (positionValue == 1)
{
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId != null && x.Task.TicketId > 0).GroupBy(x => x.TaskId)
.Select(x => x.First()).Count();
}
else
{
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
!x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel &&
(x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId != null && x.Task.TicketId > 0).GroupBy(x => x.TaskId)
.Select(x => x.First()).Count();
}
}
// public OperationResult MoveDataFRomTaskToAssign()
// {
@@ -1828,7 +2125,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
.ThenInclude(x => x.Media)
.Where(x =>
x.Task.IsActiveString == "true" && (x.AssignerId == accountId && x.AssignedId == accountId) &&
(!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.Assigns.Count == 1)
(!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.Assigns.Count == 1 && x.Task.TicketId == null )
.Select(x =>
new TaskViewModel()
{
@@ -1943,7 +2240,6 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
{
bool isCancelReq = bool.Parse(searchModel.IsCancelRequest);
res = res.Where(x => x.IsCancelRequest == isCancelReq);
}
@@ -2034,7 +2330,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
final = final.Select(x => new TaskViewModel()
{
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList,
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? AddAssign(x.AssignList, x.Sender) : x.AssignList,
Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel()
{
PositionValue = 0,
@@ -2094,7 +2390,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
var raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
.ThenInclude(x => x.Media)
.Where(x =>
x.Task.IsActiveString == "true" && x.AssignedId == accountId && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest));
x.Task.IsActiveString == "true" && x.AssignedId == accountId && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TicketId == null);
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
{
raw = raw.Where(x =>
@@ -2312,7 +2608,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
{
AssignList = !(x.SelfAssigned || x.SelfAssigner)
? ExtraTools.AddAssign(x.AssignList, x.Sender)
? AddAssign(x.AssignList, x.Sender)
: x.AssignList,
Sender = !(x.SelfAssigned || x.SelfAssigner)
? new AccountViewModel()
@@ -2361,315 +2657,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
}
public List<TaskViewModel> GetTasks(TaskSearchModel searchModel)
{
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
var emptyAcc = new AccountViewModel()
{
Fullname = "-",
PositionValue = 0
};
IQueryable<TaskViewModel> query;
if (positionValue == 1)
{
query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
.ThenInclude(x => x.Media)
.Where(x =>
x.Task.IsActiveString == "true" && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest))
.Select(x =>
new TaskViewModel()
{
AssignedId = x.AssignedId,
AssignerId = x.AssignerId,
CreateDate = x.Task.CreationDate.ToFarsi(),
EndTaskDateFA = x.EndTaskDate.ToFarsi(),
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDate,
Name = x.Task.Title,
RequestCancel = x.IsCanceledRequest,
RequestTime = x.TimeRequest,
Id = x.Task.id,
CreateTaskDateGE = x.Task.CreationDate,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCanceledRequest,
ContractingPartyName = x.Task.ContractingPartyName,
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id),
Description = x.Task.Description,
IsDoneRequest = x.IsDoneRequest,
});
}
else
{
query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias)
.ThenInclude(x => x.Media)
.Where(x =>
x.Task.IsActiveString == "true" && (x.AssignedId == accountId || x.AssignerId == accountId))
.Select(x =>
new TaskViewModel()
{
AssignedId = x.AssignedId,
AssignerId = x.AssignerId,
CreateDate = x.Task.CreationDate.ToFarsi(),
EndTaskDateFA = x.EndTaskDate.ToFarsi(),
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDate,
Name = x.Task.Title,
RequestCancel = x.IsCanceledRequest,
RequestTime = x.TimeRequest,
Id = x.Task.id,
CreateTaskDateGE = x.Task.CreationDate,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCanceledRequest,
ContractingPartyName = x.Task.ContractingPartyName,
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id),
Description = x.Task.Description,
IsDoneRequest = x.IsDoneRequest,
});
}
if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch))
{
query = query.Where(x =>
(x.Description != null && x.Description.Contains(searchModel.GeneralSearch))
|| x.ContractingPartyName.Contains(searchModel.GeneralSearch)
|| x.Name.Contains(searchModel.GeneralSearch));
}
//res = res.GroupBy(x => x.Id).Select(x => x.First());
//res = res.OrderBy(x => x.IsDone ? 1 : 0)
// .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1);
var res = query.Select(x => new TaskViewModel()
{
Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel()
{
PositionValue = a.Position.PositionValue,
Id = a.id,
Fullname = a.Fullname,
}).FirstOrDefault(a => a.Id == x.AssignerId),
SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname,
Assigned = _accountContext.Assigns.Where(a => a.TaskId == x.Id)
.Where(a => a.AssignedPositionValue >= positionValue).Select(a => a.AssignedId)
.ToList(),
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
Description = x.Description,
IsDoneRequest = x.IsDoneRequest
});
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
{
var start = searchModel.StartDate.ToGeorgianDateTime();
var end = searchModel.EndDate.ToGeorgianDateTime();
res = res.Where(x =>
((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end < x.EndTaskDateGE && x.EndTaskDateGE > start))
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|| ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
(end < x.EndTaskDateGE && x.EndTaskDateGE > end)));
}
if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest))
{
bool isDoneReq = bool.Parse(searchModel.IsDoneRequest);
res = res.Where(x => x.IsDoneRequest == isDoneReq);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
{
bool isDone = bool.Parse(searchModel.IsDone);
res = res.Where(x => x.IsDone == isDone);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled))
{
bool isCancel = bool.Parse(searchModel.IsCanceled);
res = res.Where(x => x.IsCancel == isCancel);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest))
{
bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest);
res = res.Where(x => x.RequestTime == isTimeRequest);
}
if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted))
{
res = res.Where(x => x.AcceptedTimeRequest > 0);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest))
{
bool isCancelReq = bool.Parse(searchModel.IsCancelRequest);
res = res.Where(x => x.IsCancelRequest == isCancelReq);
}
var resEnum = res.AsEnumerable();
var result = resEnum.GroupBy(x => x.Id).Select(x => x.First());
if (searchModel.AccountId > 0)
{
result = result.Where(x =>
x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
}
var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0)
.ThenBy(x => x.EndTaskDateGE);
var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
final = final.Select(x => new TaskViewModel()
{
AssignViewModels = _accountContext.Accounts.Include(x => x.Position)
.Where(a => x.Assigned.Contains(a.id) && accountId != a.id)
.Select(a => new AssignViewModel()
{
AssignedName = a.Fullname,
AssignedPositionValue = a.Position.PositionValue
}).ToList(),
Sender = x.Sender,
SelfAssigner = x.Sender.Id == accountId ? true : false,
Assigned = x.Assigned,
SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false,
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
SelfName = x.SelfName,
Description = x.Description,
IsDoneRequest = x.IsDoneRequest
}).ToList();
final = final.Select(x => new TaskViewModel()
{
Sender = x.Sender,
Assigned = x.Assigned,
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel),
MediaCount = x.MediaCount,
HasAttachment = x.MediaCount > 0,
SelfName = x.SelfName,
SelfAssigned = x.SelfAssigned,
SelfAssigner = x.SelfAssigner,
Description = x.Description,
IsDoneRequest = x.IsDoneRequest,
AssignViewModels = x.AssignViewModels
}).ToList();
final = final.Select(x => new TaskViewModel()
{
Sender = !(x.SelfAssigned || x.SelfAssigner)
? new AccountViewModel()
{
PositionValue = 0,
Fullname = "-"
}
: x.Sender,
Assigned = x.Assigned,
CreateDate = x.CreateDate,
EndTaskDateFA = x.EndTaskDateFA,
IsDone = x.IsDone,
EndTaskDateGE = x.EndTaskDateGE,
Name = x.Name,
RequestCancel = x.RequestCancel,
RequestTime = x.RequestTime,
Id = x.Id,
CreateTaskDateGE = x.CreateTaskDateGE,
IsCancel = x.IsCancel,
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
Color = x.Color,
MediaCount = x.MediaCount,
HasAttachment = x.HasAttachment,
SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName,
EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59"
? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}"
: "",
Description = x.Description,
IsDoneRequest = x.IsDoneRequest,
CanAssign = _positionRepository.GetLastPositionValue() != positionValue,
CanDelete = x.Sender.Id == accountId,
CanEdit = x.Sender.Id == accountId && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest
|| a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))),
Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname,
AssignedReceiverViewModel = x.AssignViewModels.Any()
? x.AssignViewModels.MinBy(a => a.AssignedPositionValue)
: new()
{
AssignedName = "-",
AssignedPositionValue = 0
},
}).ToList();
return final;
}
}
public static class ExtraTools
{
public static List<AssignList> AddAssign(List<AssignList> list, AccountViewModel acc)
private static List<AssignList> AddAssign(List<AssignList> list, AccountViewModel acc)
{
list.Add(new AssignList()
{
@@ -2688,10 +2676,9 @@ public static class ExtraTools
}
public static List<long> AddAccountIdToList(List<long> list, long accountId)
private static List<long> AddAccountIdToList(List<long> list, long accountId)
{
list.Add(accountId);
return list;
}
}

View File

@@ -32,8 +32,15 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
public List<TicketViewModel> GetAll(TicketSearchModel searchModel)
{
var query = _accountContext.Tickets.OrderBy(x => x.Status == "بسته شده").ThenBy(x => x.Status == "پاسخ داده شده")
.ThenBy(x => x.Status == "درحال بررسی").ThenBy(x => "باز").Select(x => new TicketViewModel()
var query = _accountContext.Tickets.Where(x => !x.IsDeleted).OrderBy(x => x.Status == "بسته شده")
.ThenBy(x => x.Status == "پاسخ داده شده")
.ThenBy(x => x.Status == "درحال بررسی")
.ThenBy(x => "باز")
.ThenByDescending(x => new[]
{
x.ClientResponses.Max(r => r.CreationDate), x.AdminResponses.Max(r => r.CreationDate)
}.Max()).Select(x => new TicketViewModel()
{
Description = x.Description,
SenderId = x.SenderId,
@@ -46,11 +53,11 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
CreationDateTime = x.CreationDate.ToFarsiFull(),
TicketNumber = $"TKC_{x.TicketNumber}",
WorkshopName = _workshopRepository.Get(x.WorkshopId).WorkshopFullName,
HasTask = _accountContext.Tasks.Include(t => t.Assigns).Any(t => t.TicketId == x.id && t.Assigns.Any(a => !a.IsDone)),
HasTask = _accountContext.Tasks.Include(t => t.Assigns)
.Any(t => t.TicketId == x.id && t.Assigns.Any(a => !a.IsDone)),
WorkshopId = x.WorkshopId,
RawTicketNumber = x.TicketNumber
});
#region Search
@@ -112,6 +119,29 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
return query.Skip(searchModel.PageIndex).Take(30).ToList();
}
public List<TicketViewModel> GetDeletedTicket()
{
var query = _accountContext.Tickets.Where(x => x.IsDeleted).OrderByDescending(x => x.CreationDate).Select(x => new TicketViewModel()
{
Description = x.Description,
SenderId = x.SenderId,
ContractingPartyName = x.ContractingPartyName,
Id = x.id,
Title = x.Title,
TicketType = x.TicketType,
Status = x.Status,
CreationDateTimeGr = x.CreationDate,
CreationDateTime = x.CreationDate.ToFarsiFull(),
TicketNumber = $"TKC_{x.TicketNumber}",
WorkshopName = _workshopRepository.Get(x.WorkshopId).WorkshopFullName,
HasTask = _accountContext.Tasks.Include(t => t.Assigns).Any(t => t.TicketId == x.id && t.Assigns.Any(a => !a.IsDone)),
WorkshopId = x.WorkshopId,
RawTicketNumber = x.TicketNumber
});
return query.ToList();
}
public List<TicketViewModel> GetTicketsForClients(TicketSearchModel searchModel)
{
@@ -129,7 +159,7 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
query = _accountContext.Tickets.Where(x => x.SenderId == accountInfo.Id);
}
if (accountInfo.SubAccountId > 0)
if (accountInfo.SubAccountId>0)
{
query = query.Where(x => x.SubAccountSenderId == accountInfo.SubAccountId);
}
@@ -191,6 +221,7 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
return res.Skip(searchModel.PageIndex).Take(30).ToList();
}
public void CreateAdminResponse(AdminResponse command)
{
_accountContext.Add(command);
@@ -273,7 +304,8 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
WorkshopId = entity.WorkshopId,
TicketNumber = $"TKC_{entity.TicketNumber}",
Status = entity.Status,
HasTask = _accountContext.Tasks.Any(x => x.TicketId == entity.id)
HasTask = _accountContext.Tasks.Any(x => x.TicketId == entity.id),
IsDeleted = entity.IsDeleted
};
editTicketViewModel.ResponseViewModels = MergeResponses(editTicketViewModel.ClientResponseViewModels, editTicketViewModel.AdminResponseViewModels);
@@ -359,7 +391,6 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
return editTicketViewModel;
}
public int GetLastTicketNumber()
{
var res = _accountContext.Tickets.Any(x => x.TicketNumber != null) ? _accountContext.Tickets.Max(x => Convert.ToInt32(x.TicketNumber)) : 0;
@@ -390,7 +421,7 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
public TypesCountOfTicketViewModel GetTypesCountOfTicketForAdmin()
{
var tickets = _accountContext.Tickets.AsQueryable();
var tickets = _accountContext.Tickets.AsQueryable().Where(x=>!x.IsDeleted);
return new TypesCountOfTicketViewModel()
{
All = tickets.Count(),
@@ -398,7 +429,6 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
Closed = tickets.Count(x => x.Status == "بسته شده"),
Open = tickets.Count(x => x.Status == "باز"),
Pending = tickets.Count(x => x.Status == "درحال بررسی")
};
}
@@ -416,13 +446,6 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
};
}
#region Vafa
public int GetAdminTicketsCount()
{
return _accountContext.Tickets.Count(x => x.Status == "باز");
}
#endregion
public List<Response> MergeResponses(List<ClientResponseViewModel> clientResponseList, List<AdminResponseViewModel> adminResponseList)
{
@@ -458,4 +481,11 @@ public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
list.AddRange(clientList);
return list.OrderBy(x => x.CreationDate).ToList();
}
#region Vafa
public int GetAdminTicketsCount()
{
return _accountContext.Tickets.Count(x => x.Status == "باز");
}
#endregion
}

View File

@@ -385,7 +385,12 @@ public class RollCallApplication : IRollCallApplication
var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(command.WorkshopId);
var employeeSettings =
_customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(
command.WorkshopId, command.EmployeeId).WorkshopShiftStatus;
command.WorkshopId, command.EmployeeId)?.WorkshopShiftStatus;
if (employeeSettings == null && workshopSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular)
{
return operation.Failed("لطفا ابتدا برای این پرسنل گروهبندی انجام دهید ");
}
List<(TimeOnly start, TimeOnly end, long rollCallId)> preprocessedRollCalls = new();
try
@@ -416,6 +421,11 @@ public class RollCallApplication : IRollCallApplication
_rollCallDomainService.GetEmployeeOffSetForRegularSettings(command.EmployeeId, command.WorkshopId);
var startWorkingPeriod = day.Date + offset.ToTimeSpan();
if (offset > new TimeOnly(12, 0, 0))
startWorkingPeriod = startWorkingPeriod.AddDays(-1);
foreach (var preprocessedRollCall in preprocessedRollCalls)
{
DateTime startDateTime = startWorkingPeriod.Date.Add(preprocessedRollCall.start.ToTimeSpan());

View File

@@ -98,7 +98,7 @@
</svg>
</div>
</div>
<div id="TaskTitle" class="selectTitleDiv" style="display: none;">
<div id="TaskTitle" class="selectTitleDiv w-100">
<ul id="searchTitleResult" class="searchTitleResult">
</ul>
</div>

View File

@@ -11,7 +11,7 @@
<link href="~/assetsadminnew/tasks/css/task-manager-create.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/create.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/assetsadminnew/libs/sweetalert2/sweetalert2.min.css" rel="stylesheet" />
<div class="modal-content">
@@ -69,18 +69,19 @@
</div>
<div class="col-12 my-1">
<div class="from-group position-relative">
<input type="text" asp-for="Command.Title" class="form-control m-0 TaskTitleSearch" placeholder="عنوان وظیفه" onkeyup="searchSubjectTask()">
<div permission="90313" class="position-absolute" style="top: 3px; left: 3px; cursor: pointer;" id="CRUDTaskSubjectBtn">
<div class="from-group input-group position-relative" style="height: 35px;">
<span class="input-group-text" id="append_title" style="display: none;font-size: 12px; border-radius: 0px 8px 8px 0px;width: 170px;"></span>
<input type="text" asp-for="Command.Title" class="form-control m-0 TaskTitleSearch" placeholder="عنوان وظیفه" onkeyup="searchSubjectTask()" style="border-radius: 8px 0 0 8px">
<div permission="90313" class="position-absolute" style="top: 5px; left: 3px; cursor: pointer; z-index: 6" id="CRUDTaskSubjectBtn">
@* onclick="taskSubjectModal() *@
<div class="btn-add2">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 6L12 18" stroke="#ffffff" stroke-width="2" stroke-linecap="round" />
<path d="M18 12L6 12" stroke="#ffffff" stroke-width="2" stroke-linecap="round" />
<path d="M12 6L12 18" stroke="#ffffff" stroke-width="2" stroke-linecap="round"/>
<path d="M18 12L6 12" stroke="#ffffff" stroke-width="2" stroke-linecap="round"/>
</svg>
</div>
</div>
<div id="TaskTitle" class="selectTitleDiv" style="display: none;">
<div id="TaskTitle" class="selectTitleDiv w-100" style="display: none;">
<ul id="searchTitleResult" class="searchTitleResult">
</ul>
</div>
@@ -316,7 +317,6 @@
<script src="~/assetsclient/js/site.js?ver=@adminVersion"></script>
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsadminnew/libs/sweetalert2/sweetalert2.all.min.js"></script>
<script src="~/AssetsAdminNew/libs/wavesurfer/wavesurfer.min.js"></script>
<script>

View File

@@ -0,0 +1,778 @@
@model AccountManagement.Application.Contracts.Task.OperationModalViewModel
@using System.Security.Claims
@using AccountManagement.Application.Contracts.Media
@{
//OPeration Rquest Modal
string adminVersion = _0_Framework.Application.Version.AdminVersion;
//Ticket needs
MediaViewModel voice = null;
var userId = Convert.ToInt64(User.FindFirstValue("AccountId"));
string svgName = "unknow";
string[] fileExtensions = new string[]
{
".ai", ".avi", ".bmp", ".crd", ".csv", ".dll", ".doc", ".docx", ".dwg",
".eps", ".exe", ".flv", ".giff", ".html", ".iso", ".java", ".jpg", ".mdb",
".mid", ".mov", ".mp3", ".mp4", ".mpeg", ".pdf", ".png", ".ppt", ".ps",
".psd", ".pub", ".rar", ".raw", ".rss", ".svg", ".tiff", ".txt", ".wav",
".wma", ".xml", ".xsl", ".zip"
};
int i = 1;
// Tasks
<script src="~/AssetsClient/js/jquery-ui.js"></script>
<link href="~/assetsadminnew/tasks/css/task-manager-create.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/detailmodal.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/assetsadminnew/libs/sweetalert2/sweetalert2.min.css" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/task-manager-create.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/operationrequestmodal.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsAdminNew/Ticket/css/ticket-list.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsAdminNew/Ticket/css/ticket-create.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsAdminNew/Ticket/css/ticket-message.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsAdminNew/Ticket/css/Index.css?ver=@adminVersion" rel="stylesheet" />
if (Model.TaskDetails.AssignViewModels?.Count > 1)
{
<style>
.modal-xl-taskTime {
max-width: 720px;
}
</style>
}
else
{
<style>
.modal-xl-taskTime {
max-width: 500px;
}
</style>
}
<style>
.modal-xl-taskTime {
max-width: 970px;
}
/*.modal-content {
width: 970px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
height: auto;
overflow: hidden;
}*/
.taskSection {
position: relative;
width: 60%;
transition: width 0.3s ease;
}
.ticketSection {
width: 40%;
color: white;
transition: width 0.3s ease;
overflow-y: auto;
}
.overlayTicket {
background: #000000b8;
height: 100%;
width: 100%;
position: fixed;
z-index: 10;
display: none;
}
.ticketSection.hide {
width: 0;
padding: 0;
overflow: hidden;
}
.ticketSection.showTicket {
display: block !important;
}
.taskSection.expand {
width: 100%;
}
.overlayTicket.showTicket {
display: block !important;
}
.toggleButton {
position: absolute;
right: -12px;
background: #41D1D1;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
top: 60px;
z-index: 20;
}
.toggleButtonMobile {
position: fixed;
bottom: 0;
left: 50%;
transform: translate(-50%, 0);
padding: 20px;
font-size: 16px;
font-weight: 700;
background-color: #41D1D1;
color: #fff;
}
/*.infoTicketHead {
margin: 15px 0 0 0;
}*/
.header-custom-color {
border-radius: 20px 0 0 0;
}
.rotate {
transform: rotate(180deg);
transition: transform 0.3s ease;
}
#messageContent {
height: 600px;
}
.taskDescText.expanded {
height: 150px;
}
@@media (max-width: 1366px) {
.modal-xl-taskTime {
max-width: 750px;
}
#messageContent {
height: 345px;
}
.modal-content {
height: 550px;
}
#responsive-in-mobile {
height: 390px;
}
}
@@media (max-width: 992px) {
.modal-content {
width: 700px;
height: auto;
}
.actionBtnsection {
width: 100% !important;
}
}
@@media (max-width: 768px) {
.modal-content {
width: auto;
position: relative;
overflow: visible;
transform: none;
left: auto;
top: auto;
}
.actionBtnsection.actionBtn {
font-size: 12px;
}
#overlayTicket {
z-index: 42;
}
#taskSection {
width: 100%;
}
#ticketsection {
width: 0%;
}
.d-flex.w-100 {
flex-direction: column-reverse;
}
#ticketSection {
width: 100%;
border-left: none;
border-bottom: 1px solid #BFBFBF;
border-radius: 20px 20px 0 0 !important;
position: fixed;
bottom: 0;
left: 0;
z-index: 200;
display: none;
}
#taskSection.expand {
width: 100%;
}
}
</style>
}
<div class="modal-content">
<div class="d-flex w-100 h-100">
<div class="overlayTicket" id="overlayTicket"></div>
<div id="ticketSection" class="ticketSection px-0">
<div class="" style="position: relative; background-color: #EBEEF3; border-left: 1px solid #BFBFBF; border-radius: 0 20px 20px 0;height: 100%;">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start d-none d-md-block" data-bs-dismiss="modal" aria-label="Close"></button>
<button type="button" class="btn-close position-absolute text-start d-block d-md-none" id="closeToggleButtonMobile"></button>
<h6 class="modal-title" style="font-size: 14px;">شماره پشتیبانی: @Model.TaskDetails.TicketViewModel.TicketNumber</h6>
</div>
<div class="modal-body p-2">
<div class="container-fluid">
<div class="row p-0">
<div class="col-12 p-0">
<div class="infoTicketHead d-flex align-items-center justify-content-between">
<div class="d-flex align-items-center">
<div class="img-bor1">
<img src="~/assetsclient/images/user_alt_fill.png" alt="Avatar" />
</div>
<div class="">
<div class="textTitle1">@Model.TaskDetails.TicketViewModel.ContractingPartyName</div>
<div class="textTitle2">@Model.TaskDetails.TicketViewModel.WorkshopName</div>
</div>
</div>
<div class="img-bor2">
<svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.19671 0.621211L2.28367 0.534255C2.67419 0.143731 3.30736 0.14373 3.69788 0.534254L5.86261 2.69899C6.25314 3.08951 6.25314 3.72268 5.86261 4.1132L4.33331 5.64251C4.06589 5.90993 3.99959 6.31847 4.16872 6.65673C5.14645 8.61219 6.73205 10.1978 8.6875 11.1755C9.02577 11.3446 9.43431 11.2783 9.70173 11.0109L11.231 9.48162C11.6216 9.0911 12.2547 9.0911 12.6452 9.48162L14.81 11.6464C15.2005 12.0369 15.2005 12.67 14.81 13.0606L14.723 13.1475C12.6117 15.2589 9.26911 15.4964 6.88039 13.7049L6.51408 13.4302C4.77055 12.1225 3.22173 10.5737 1.91408 8.83016L1.63935 8.46385C-0.152188 6.07513 0.0853593 2.73256 2.19671 0.621211Z" fill="#5B5B5B" />
</svg>
@* @Model.Sender.Mobile *@
</div>
</div>
</div>
<div class="col-12 p-0 col-lg-12">
<div class="ticket-message-container" id="messageContent">
</div>
@if (!Model.TaskDetails.IsDone && !Model.TaskDetails.IsCancel && !(Model.TaskDetails.TicketViewModel.ResponseViewModels.Any(x => x.IsActive == "false" && x.AdminAccountId == userId)))
{
<div id="actionTicketMessage" class="footer-message-container my-2" style="position: relative;">
<div class="container px-1">
<div class="row align-items-center">
<div class="col-3">
<div class="message-input-div">
<button type="button" class="btn-sendTi" id="saveAdminResponseTicket">
<svg width="21" height="21" viewBox="0 0 18 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.50665 18.8657C2.4129 18.8973 2.31352 18.8989 2.21906 18.8703C2.1246 18.8416 2.03857 18.7838 1.9701 18.703C1.90162 18.6222 1.85325 18.5214 1.83011 18.4112C1.80697 18.3011 1.80993 18.1857 1.83867 18.0773L3.59301 11.4547H9.73609C9.87958 11.4547 10.0172 11.3885 10.1187 11.2707C10.2201 11.1528 10.2771 10.993 10.2771 10.8264C10.2771 10.6597 10.2201 10.4999 10.1187 10.3821C10.0172 10.2642 9.87958 10.198 9.73609 10.198H3.59301L1.83867 3.5754C1.8101 3.46709 1.80727 3.35183 1.83049 3.24181C1.8537 3.13179 1.90209 3.0311 1.97054 2.9504C2.03899 2.86971 2.12495 2.812 2.21932 2.78339C2.31369 2.75478 2.41297 2.75634 2.50665 2.78789C7.2784 4.39951 11.7782 6.94551 15.8121 10.3162C15.8818 10.3743 15.9386 10.451 15.9777 10.5397C16.0169 10.6284 16.0373 10.7267 16.0373 10.8264C16.0373 10.9261 16.0169 11.0243 15.9777 11.113C15.9386 11.2018 15.8818 11.2784 15.8121 11.3366C11.7783 14.7075 7.27846 17.2538 2.50665 18.8657Z" fill="white" />
</svg>
<div class="spinner-loading loading" style="display: none">
<span class="spinner-border spinner-border-sm loading text-white" role="status" aria-hidden="true"></span>
</div>
</button>
<button type="button" class="btn-voice-file-Ti record_btn" id="upload-voice-ticket-messageAdmin">
<svg width="21" height="21" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="6" y="2.125" width="4" height="7.79167" rx="2" stroke="white" stroke-width="1.2" stroke-linejoin="round" />
<path d="M3.4 7.79199C3.4 9.06695 3.87634 10.2965 4.73465 11.2084C5.59412 12.1216 6.76786 12.642 8 12.642C9.23214 12.642 10.4059 12.1216 11.2653 11.2084C12.1237 10.2965 12.6 9.06695 12.6 7.79199" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M8 14.8747V13.458" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
<div class="spinner-loading loading" style="display: none">
<span class="spinner-border spinner-border-sm loading text-white" role="status" aria-hidden="true"></span>
</div>
<input type="file" class="d-none" id="Command_Voice">
</button>
</div>
</div>
<div class="col-9">
<div class="upload-voice-containerTi align-items-center justify-content-center" style="display: none">
<div id="upload-voice-recording" class="text-center">
<svg width="30" height="30" viewBox="0 0 63 62" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M29.94 42.8076V42.5805L29.7139 42.5588C25.9145 42.1942 22.709 40.6562 20.4538 38.2294C18.1993 35.8033 16.8813 32.4746 16.8813 28.5034V24.6695C16.8813 23.7829 17.5993 23.0901 18.4997 23.0901C19.4 23.0901 20.118 23.7829 20.118 24.6695V28.3672C20.118 31.7435 21.2628 34.5597 23.2701 36.532C25.2769 38.5039 28.1261 39.6129 31.4999 39.6129C34.8737 39.6129 37.7229 38.5039 39.7298 36.532C41.7371 34.5597 42.8819 31.7435 42.8819 28.3672V24.6695C42.8819 23.7863 43.6159 23.0901 44.5197 23.0901C45.4165 23.0901 46.1185 23.7796 46.1185 24.6695V28.5034C46.1185 32.4746 44.8006 35.8033 42.5461 38.2294C40.2909 40.6562 37.0853 42.1942 33.286 42.5588L33.0599 42.5805V42.8076V46.7583V47.0083H33.3099H40.4522C41.3524 47.0083 42.09 47.7205 42.09 48.6071C42.09 49.476 41.3507 50.206 40.4522 50.206H22.5476C21.6492 50.206 20.9099 49.476 20.9099 48.6071C20.9099 47.7205 21.6474 47.0083 22.5476 47.0083H29.69H29.94V46.7583V42.8076ZM38.1198 28.0558C38.1198 32.2488 35.3021 35.0844 31.4999 35.0844C27.6977 35.0844 24.88 32.2488 24.88 28.0558V14.9388C24.88 10.7457 27.6977 7.91016 31.4999 7.91016C35.3021 7.91016 38.1198 10.7457 38.1198 14.9388V28.0558Z" fill="url(#paint0_linear_1349_16648)" stroke="url(#paint1_linear_1349_16648)" stroke-width="0.5" />
<g filter="url(#filter0_bd_1349_16648)">
<circle cx="31.5" cy="31" r="13" fill="#2AB8B8" fill-opacity="0.6" shape-rendering="crispEdges" />
<circle cx="31.5" cy="31" r="12.65" stroke="url(#paint2_linear_1349_16648)" stroke-width="0.7" shape-rendering="crispEdges" />
</g>
<path d="M30.63 36.1383C30.9524 36.1383 31.1933 35.8829 31.1933 35.575V25.9867C31.1933 25.6716 30.9452 25.4234 30.63 25.4234C30.3149 25.4234 30.0667 25.6716 30.0667 25.9867V35.575C30.0667 35.8837 30.3141 36.1383 30.63 36.1383ZM34.1048 35.0139C34.4264 35.0139 34.6681 34.7649 34.6681 34.4506V27.1111C34.6681 26.796 34.42 26.5478 34.1048 26.5478C33.7833 26.5478 33.5415 26.7968 33.5415 27.1111V34.4506C33.5415 34.7649 33.7833 35.0139 34.1048 35.0139ZM28.8898 34.206C29.2098 34.206 29.4587 33.9586 29.4587 33.6426V27.9191C29.4587 27.6032 29.2098 27.3558 28.8898 27.3558C28.573 27.3558 28.3321 27.6056 28.3321 27.9191V33.6426C28.3321 33.9562 28.573 34.206 28.8898 34.206ZM32.3703 33.494C32.6878 33.494 32.9279 33.2378 32.9279 32.9307V28.631C32.9279 28.3175 32.687 28.0677 32.3703 28.0677C32.0479 28.0677 31.8069 28.3231 31.8069 28.631V32.9307C31.8069 33.2386 32.0479 33.494 32.3703 33.494ZM35.8394 32.5335C36.161 32.5335 36.4027 32.2845 36.4027 31.9702V29.5915C36.4027 29.2772 36.161 29.0282 35.8394 29.0282C35.5178 29.0282 35.2761 29.2772 35.2761 29.5915V31.9702C35.2761 32.2853 35.5243 32.5335 35.8394 32.5335ZM27.1552 32.0872C27.4768 32.0872 27.7185 31.8382 27.7185 31.5239V30.0379C27.7185 29.7243 27.4719 29.4689 27.1552 29.4689C26.832 29.4689 26.5919 29.7251 26.5919 30.0379V31.5239C26.5919 31.8382 26.8336 32.0872 27.1552 32.0872Z" fill="url(#paint3_linear_1349_16648)" fill-opacity="0.8" stroke="url(#paint4_linear_1349_16648)" stroke-width="0.2" />
<defs>
<filter id="filter0_bd_1349_16648" x="10.5" y="10" width="42" height="42" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix" />
<feGaussianBlur in="BackgroundImageFix" stdDeviation="3" />
<feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_1349_16648" />
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix type="matrix" values="0 0 0 0 0.164706 0 0 0 0 0.721569 0 0 0 0 0.721569 0 0 0 0.64 0" />
<feBlend mode="normal" in2="effect1_backgroundBlur_1349_16648" result="effect2_dropShadow_1349_16648" />
<feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow_1349_16648" result="shape" />
</filter>
<linearGradient id="paint0_linear_1349_16648" x1="16.4428" y1="5.31527" x2="57.5413" y2="18.8131" gradientUnits="userSpaceOnUse">
<stop stop-color="#329E7A" />
<stop offset="1" stop-color="#25A2A2" />
</linearGradient>
<linearGradient id="paint1_linear_1349_16648" x1="32.739" y1="7.66016" x2="31.3903" y2="50.4134" gradientUnits="userSpaceOnUse">
<stop stop-color="#CFFFFF" />
<stop offset="1" stop-color="#CFFFFF" stop-opacity="0.5" />
</linearGradient>
<linearGradient id="paint2_linear_1349_16648" x1="32.5833" y1="18" x2="32.0137" y2="43.9875" gradientUnits="userSpaceOnUse">
<stop stop-color="#CFFFFF" />
<stop offset="1" stop-color="#CFFFFF" stop-opacity="0.5" />
</linearGradient>
<linearGradient id="paint3_linear_1349_16648" x1="26.5911" y1="24.4548" x2="41.2864" y2="29.531" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFFAFA" />
<stop offset="1" stop-color="#FFFAFA" stop-opacity="0.4" />
</linearGradient>
<linearGradient id="paint4_linear_1349_16648" x1="31.4973" y1="36.0383" x2="31.7227" y2="25.5283" gradientUnits="userSpaceOnUse">
<stop stop-color="white" stop-opacity="0.8" />
<stop offset="1" stop-color="white" stop-opacity="0.2" />
</linearGradient>
</defs>
</svg>
</div>
<div id="waveArea" class="align-items-center" style="width: 100%; padding: 5px;" style="display: none;">
<input type="file" class="d-none" id="Command_Voice">
@* <audio controls id="playAudio" style="display: none;">
<source src="" type="audio/ogg" >
Your browser does not support the audio element.
</audio> *@
<div class="audio-player">
<button type="button" id="removeVoice" class="bg-transparent">
<svg width="22" height="22" viewBox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.82471 6.77522L6.81477 2.78516M2.82471 2.78516L6.81477 6.77522" stroke="#FF5555" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</button>
<div id="waveform" class="waveform"></div>
<button type="button" id="play-pause" class="player-btn play"></button>
</div>
<div class="d-flex justify-content-between align-items-center mx-1 d-none" id="upload-container-voice">
<div class="upload-box-voiceTi empty" id="msg_box_ticket_messageAdmin" style="display: none">
<div class="spinner-loading loading" style="display: none">
<span class="spinner-border spinner-border-sm loading text-white" role="status" aria-hidden="true"></span>
</div>
</div>
</div>
</div>
</div>
<div class="position-relative" id="documentFilesDiv">
<div id="upload-container-docTi">
</div>
<textarea id="Response" class="form-control" rows="2" style="resize: none;"> </textarea>
<button class="upload-file-new bg-transparent" id="upload-doc-msg" type="submit">
<svg width="26" height="26" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.875 7.70313C2.875 7.00534 2.875 6.65645 2.96112 6.37256C3.15502 5.73335 3.65523 5.23314 4.29443 5.03924C4.57833 4.95312 4.92722 4.95312 5.625 4.95312H7.9783C8.77084 4.95312 9.16711 4.95312 9.52561 5.09698C9.88412 5.24083 10.1705 5.51474 10.7432 6.06256L12.4583 7.70313V10.4531H2.875V7.70313V7.70313Z" fill="#538AF6" fill-opacity="0.25" />
<path d="M2.875 10.9031C2.875 9.78302 2.875 9.22297 3.09299 8.79514C3.28473 8.41882 3.59069 8.11286 3.96702 7.92111C4.39484 7.70312 4.95489 7.70312 6.075 7.70312H16.925C18.0451 7.70312 18.6052 7.70312 19.033 7.92111C19.4093 8.11286 19.7153 8.41882 19.907 8.79514C20.125 9.22297 20.125 9.78302 20.125 10.9031V14.5865C20.125 15.7066 20.125 16.2666 19.907 16.6944C19.7153 17.0708 19.4093 17.3767 19.033 17.5685C18.6052 17.7865 18.0451 17.7865 16.925 17.7865H6.075C4.95489 17.7865 4.39484 17.7865 3.96702 17.5685C3.59069 17.3767 3.28473 17.0708 3.09299 16.6944C2.875 16.2666 2.875 15.7066 2.875 14.5865V10.9031Z" fill="#538AF6" />
</svg>
</button>
<input type="file" class="d-none" id="Command_Document1" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" id="Command_Document2" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" id="Command_Document3" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" id="Command_Document4" accept=".pdf,.doc,.docx,.txt, image/*">
</div>
</div>
<div id="fileItems" style="display: none"></div>
<div id="voiceItem" style="display: none"></div>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
</div>
</div>
<div id="taskSection" class="taskSection ps-md-0">
<button class="toggleButton d-none d-md-block" id="toggleSidebar">
<svg width="25" height="25" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.5 3L7.5 6L4.5 9" stroke="white" stroke-linecap="round" />
</svg>
</button>
<button class="toggleButtonMobile d-block d-md-none" id="toggleSidebarMobile">
نمایش تیکت
</button>
<div>
<div class="modal-header d-block text-center header-custom-color">
<div class="row">
<div class="col-5 col-md-4 text-start">
<h6 class="modal-title">جزئیات وظیفه</h6>
</div>
</div>
</div>
<div class="modal-body p-2" style="overflow-y: auto;">
<div class="container-fluid">
<div class="row">
<div id="assignsSection" class="pe-0 @(Model.TaskDetails.AssignViewModels?.Count > 0 && Model.TaskDetails.AssignViewModels?.Count != 1 ? "col-12 col-md-3" : "d-none")">
<div class="assigns_section">
@* @if (Model.TaskDetails.AssignViewModels?.Count > 0 && Model.TaskDetails.AssignViewModels?.Count != 1)
{ *@
<button type="button" class="btnAssignList blue active" onclick="showAllRequestAction()">
<span>
کل درخواست‌ها
</span>
<span>
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.25 2.25V2.25C15.0784 2.25 15.75 2.92157 15.75 3.75V11.37C15.75 12.3781 15.75 12.8821 15.5538 13.2672C15.3812 13.6059 15.1059 13.8812 14.7672 14.0538C14.3821 14.25 13.8781 14.25 12.87 14.25H5.13C4.12191 14.25 3.61786 14.25 3.23282 14.0538C2.89413 13.8812 2.61876 13.6059 2.44619 13.2672C2.25 12.8821 2.25 12.3781 2.25 11.37V3.75C2.25 2.92157 2.92157 2.25 3.75 2.25V2.25" stroke="#33363F" stroke-width="1.5" />
<path d="M14.25 2.25H13.5885C13.3755 2.25 13.269 2.25 13.1718 2.26944C12.9366 2.31652 12.7261 2.44661 12.5787 2.63598C12.5179 2.71418 12.4703 2.80945 12.375 3V3C12.2797 3.19055 12.2321 3.28582 12.1713 3.36402C12.0239 3.55339 11.8134 3.68348 11.5782 3.73056C11.481 3.75 11.3745 3.75 11.1615 3.75H6.6875C6.54734 3.75 6.47727 3.75 6.4134 3.74174C6.10422 3.70175 5.83138 3.51986 5.67555 3.24984C5.64336 3.19406 5.61641 3.12938 5.5625 3V3C5.50859 2.87062 5.48164 2.80594 5.44945 2.75016C5.29362 2.48014 5.02078 2.29825 4.7116 2.25826C4.64774 2.25 4.57766 2.25 4.4375 2.25H3.75" stroke="#33363F" stroke-width="1.5" />
<path d="M15.75 6H13.5885C13.3755 6 13.269 6 13.1718 6.01944C12.9366 6.06652 12.7261 6.19661 12.5787 6.38598C12.5179 6.46418 12.4703 6.55945 12.375 6.75V6.75C12.2797 6.94055 12.2321 7.03582 12.1713 7.11402C12.0239 7.30339 11.8134 7.43348 11.5782 7.48056C11.481 7.5 11.3745 7.5 11.1615 7.5H6.6875C6.54734 7.5 6.47727 7.5 6.4134 7.49174C6.10422 7.45175 5.83138 7.26986 5.67555 6.99984C5.64336 6.94406 5.61641 6.87938 5.5625 6.75V6.75C5.50859 6.62062 5.48164 6.55594 5.44945 6.50016C5.29362 6.23014 5.02078 6.04825 4.7116 6.00826C4.64774 6 4.57766 6 4.4375 6H2.25" stroke="#33363F" stroke-width="1.5" />
<path d="M15.75 9.75H13.5885C13.3755 9.75 13.269 9.75 13.1718 9.76944C12.9366 9.81652 12.7261 9.94661 12.5787 10.136C12.5179 10.2142 12.4703 10.3095 12.375 10.5V10.5C12.2797 10.6905 12.2321 10.7858 12.1713 10.864C12.0239 11.0534 11.8134 11.1835 11.5782 11.2306C11.481 11.25 11.3745 11.25 11.1615 11.25H6.6875C6.54734 11.25 6.47727 11.25 6.4134 11.2417C6.10422 11.2018 5.83138 11.0199 5.67555 10.7498C5.64336 10.6941 5.61641 10.6294 5.5625 10.5V10.5C5.50859 10.3706 5.48164 10.3059 5.44945 10.2502C5.29362 9.98014 5.02078 9.79825 4.7116 9.75826C4.64774 9.75 4.57766 9.75 4.4375 9.75H2.25" stroke="#33363F" stroke-width="1.5" />
</svg>
</span>
</button>
@foreach (var assign in Model.TaskDetails.AssignViewModels!)
{
var btnColor = string.Empty;
var svgCode = string.Empty;
@if (assign.IsCanceledRequest)
{
btnColor = "red";
svgCode = @"
<svg width='19' height='19' viewBox='0 0 19 19' fill='none' xmlns='http://www.w3.org/2000/svg'>
<path d='M14.25 4.75L4.75 14.25' stroke='#EF4444' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/>
<path d='M4.75 4.75L14.25 14.25' stroke='#EF4444' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/>
</svg>";
}
else if (assign.TimeRequest)
{
btnColor = "orange";
svgCode = @"
<svg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'>
<path d='M4.05025 4.05025C2.9051 5.1954 2.19245 6.70219 2.03371 8.31388C1.87497 9.92557 2.27997 11.5424 3.17971 12.889C4.07945 14.2355 5.41825 15.2285 6.96801 15.6986C8.51776 16.1687 10.1826 16.0869 11.6788 15.4672C13.175 14.8474 14.41 13.728 15.1734 12.2998C15.9369 10.8715 16.1814 9.22274 15.8655 7.63437C15.5496 6.046 14.6926 4.61632 13.4408 3.58893C12.1889 2.56154 10.6195 2 9 2' stroke='#EAB308' stroke-width='2' stroke-linecap='round'/>
<path d='M9 9L4.5 4.5' stroke='#EAB308' stroke-width='2' stroke-linecap='round'/>
<path d='M9 2.25V3.75' stroke='#EAB308' stroke-width='2' stroke-linecap='round'/>
<path d='M15.75 9L14.25 9' stroke='#EAB308' stroke-width='2' stroke-linecap='round'/>
<path d='M9 14.25V15.75' stroke='#EAB308' stroke-width='2' stroke-linecap='round'/>
<path d='M3.75 9L2.25 9' stroke='#EAB308' stroke-width='2' stroke-linecap='round'/>
</svg>";
}
else if (assign.IsDoneRequest)
{
btnColor = "green";
svgCode = @"
<svg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'>
<path d='M3.75 10.5L5.98309 12.1748C6.41178 12.4963 7.01772 12.4228 7.35705 12.0081L13.5 4.5' stroke='#84CC16' stroke-width='2' stroke-linecap='round'/>
</svg>";
}
<button type="button" id="btnAssignList" class="btnAssignList @btnColor" data-id="@assign.Id" onclick="loadChatMessageRequest(@assign.Id)">
<span id="AssignedName_@assign.Id">
@assign.AssignedName
</span>
<span>
@Html.Raw(svgCode)
</span>
</button>
}
@* } *@
</div>
</div>
<div id="chatSection" class="@(Model.TaskDetails.AssignViewModels?.Count > 0 && Model.TaskDetails.AssignViewModels?.Count != 1 ? "col-12 col-md-9" : "col-12")">
<div class="chat-section">
<div class="chat-card-main" style="position: sticky;top: 5px;z-index: 40;">
<div class="row">
<div class="col-6">
<h6 class="taskTitle text-start row align-items-center mb-1">
<span class="col-5 col-md-4 p-0">طرف حساب:</span>
<span class="taskTitleSub col-7 col-md-8">@Model.TaskDetails.ContractingPartyName</span>
</h6>
<h6 class="taskTitle text-start row align-items-center">
<span class="col-5 col-md-4 p-0">عنوان وظیفه:</span>
<span class="taskTitleSub col-7 col-md-8">@Model.TaskDetails.Title</span>
</h6>
</div>
<div class="col-6">
<h6 class="taskTitle text-end row align-items-center mb-1">
<span class="col-6 col-md-5 ps-0">تاریخ ایجاد:</span>
<span class="taskTitleSub text-center col-6 col-md-7 justify-content-center">@Model.TaskDetails.CreateDateFa</span>
</h6>
<h6 class="taskTitle text-end row align-items-center">
<span class="col-6 col-md-5 ps-0">تاریخ سررسید:</span>
<span class="@(Model.TaskDetails.AssignViewModels?.First() != null ? "" : "taskTitleSub") text-center col-6 col-md-7 justify-content-center" id="AssignEndTaskDateFa">@Model.TaskDetails.AssignViewModels?.First().EndTaskDateFa</span>
</h6>
</div>
</div>
@if (!String.IsNullOrWhiteSpace(Model.TaskDetails.Description))
{
<div class="taskTitle">توضیحات :</div>
<div class="taskDesc">
<div class="taskDescText" id="taskDescText">
@Html.Raw(Model.TaskDetails.Description)
</div>
</div>
}
@if (Model.TaskDetails.medias.Count > 0)
{
@foreach (var item in Model.TaskDetails.medias)
{
if (item.Category == "صوت")
{
voice = item;
<div id="waveArea" class="align-items-center" style="width: 100%; padding: 5px; @(voice == null ? "display: none" : "");">
<div class="audio-player">
<div id="waveform" class="waveform"></div>
<button id="play-pause" class="player-btn play"></button>
</div>
</div>
}
}
<div class="d-flex align-items-center justify-content-end">
@foreach (var item in Model.TaskDetails.medias)
{
if (item.Category == "فایل")
{
string fileName = System.IO.Path.GetFileName(item.Path);
string extension = System.IO.Path.GetExtension(fileName);
string nameWithoutExtension = fileName.Substring(0, fileName.LastIndexOf("."));
int maxLength = 20 - extension.Length;
int sliceLength = Math.Max((maxLength - 3) / 2, 0);
string start = nameWithoutExtension.Substring(0, Math.Min(sliceLength, nameWithoutExtension.Length));
string end = nameWithoutExtension.Substring(Math.Max(nameWithoutExtension.Length - sliceLength, 0));
var inBox = "inBox" + i;
@if (item.Path.EndsWith(".jpg") || item.Path.EndsWith(".jpeg") || item.Path.EndsWith(".png") || item.Path.EndsWith(".gif") || item.Path.EndsWith(".webp"))
{
<div class="upload-box empty inBox@(i)">
<section class="gallery">
<section class="container">
<div class="row p-0">
<div class="lightbox_img_wrap">
<img class="lightbox-enabled min-img" src="@Url.Page("./Index", "ShowPicture", new { filePath = item.Path })" data-imgsrc="@Url.Page("./Index", "ShowPicture", new { filePath = item.Path })" id="@Model.TaskDetails.Id" />
</div>
</div>
</section>
</section>
<section class="lightbox-container">
<span class="material-symbols-outlined material-icons lightbox-btn left" id="left">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5" />
</svg>
</span>
<span class="material-symbols-outlined material-icons lightbox-btn right" id="right">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
</svg>
</span>
<span id="close" class="close material-icons material-symbols-outlined">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" />
</svg>
</span>
<div class="lightbox-image-wrapper">
<img alt="lightboximage" class="lightbox-image">
</div>
</section>
</div>
}
else
{
if (fileExtensions.Contains(extension))
{
svgName = extension.TrimStart('.').ToLower();
<a href="@Url.Page("./Index", "GetFile", new { filePath = item.Path, id = Model.TaskDetails.Id })"><img class="uploaded-file" src="/common/filesvg/@(svgName).svg" /></a>
}
else
{
<a href="@Url.Page("./Index", "GetFile", new { filePath = item.Path, id = Model.TaskDetails.Id })"><img class="uploaded-file" src="/common/filesvg/unknow.svg" /></a>
}
}
i++;
}
}
</div>
}
<div class="row">
<span class="col-2" style="font-size: 11px;line-height: 22px;">@Model.TaskDetails.CreateDateFa</span>
<button class="taskDescMore col-8" id="showMoreButton">
<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" />
</svg>
</button>
<span class="col-2"></span>
</div>
</div>
<div id="mainChat" class="mainChat">
<div id="LoadingCard">
<div class="px-2">
@for (int j = 0; j < 4; j++)
{
bool isOdd = j % 2 != 0;
string marginStyle = isOdd ? "margin-right: auto;" : "margin-left: auto;";
<div class="skeleton-loader" style="height: 90px; width: 330px; @marginStyle"></div>
}
</div>
</div>
<div id="ajaxChatSection">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center p-2 pt-0">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel2 d-flex align-items-center justify-content-center" data-bs-dismiss="modal">بستن</button>
</div>
@if (!Model.TaskDetails.IsDone)
{
<div class="col-6 text-start">
<button id="save" type="button" class="btn-register text-white disable">ارسال</button>
</div>
}
</div>
</div>
</div>
</div>
</div>
</div>
@* //Operation Task *@
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/assetsclient/js/site.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/AssetsAdminNew/libs/wavesurfer/wavesurfer.min.js"></script>
<script src="~/assetsadminnew/libs/sweetalert2/sweetalert2.all.min.js"></script>
<script>
var loadOperationRequestTaskDetailsAjax = '@Url.Page("./Index", "OperationRequestTaskDetailsAjax")';
var btnAllRequestActive = @(Model.TaskDetails.AssignViewModels?.Count == 1 ? "true" : "false");
var CountAssignViewModel = @(Model.TaskDetails.AssignViewModels?.Count);
var antiForgeryToken = $('@Html.AntiForgeryToken()').val();
var changeTime = '@Url.Page("./Index", "ChangeTime")';
var AcceptTimeRequest = '@Url.Page("./Index", "AcceptTimeRequest")';
var RejectTimeRequest = '@Url.Page("./Index", "RejectTimeRequest")';
var RejectCancel = '@Url.Page("./Index", "RejectCancel")';
var AcceptCancel = '@Url.Page("./Index", "AcceptCancel")';
var RejectComplete = '@Url.Page("./Index", "RejectComplete")';
var AcceptComplete = '@Url.Page("./Index", "AcceptComplete")';
// // Tasks
var createSaveTaskAjax = '@Url.Page("/Company/Task/Create", "CreateSaveTask")';
var voiceSrc = '@(voice == null ? "" : @Url.Page("./Index", "ShowVoice", new { filePath = voice?.Path }))';
var loadChatMessageAjax = '@Url.Page("./Index", "ChatMessageDetailsTask")';
var postSaveComplete = '@Url.Page("./Index", "Complete")';
var postCreateCancelRequest = '@Url.Page("./Index", "CreateCancelRequest")';
var postCreateTimeRequest = '@Url.Page("./Index", "CreateTimeRequest")';
var postCreateAssign = '@Url.Page("./Index", "CreateAssign")';
//task ticket (ajx for edit,reject,or submit)
var submmition = `@Url.Page("./Index", "SubmitionTaskTicketModal")`
// Tickets
var sendMsgTicketAjax = '@Url.Page("/Company/Task/Index", "SaveAdminResponseTicket")';
var loadMessagesAjax = '@Url.Page("/Company/Task/Index", "ShowDetailTicketMessagesByAdminAjax")';
var uploadFileTicketAjax = '@Url.Page("/Company/Task/Index", "UploadFile")';
var deleteFileTicketAjax = '@Url.Page("/Company/Task/Index", "DeleteFile")';
var deleteAllFilesTicketAjax = '@Url.Page("/Company/Task/Index", "RemoveAllTempFiles")';
var taskId = Number(@Model.TaskDetails.Id);
var TicketId = Number(@Model.TaskDetails.TicketViewModel.Id);
var UserId = @User.FindFirstValue("AccountId");
document.getElementById('toggleSidebar').addEventListener('click', function () {
const ticket = document.getElementById('ticketSection');
const task = document.getElementById('taskSection');
const arrow = this.querySelector('svg');
ticket.classList.toggle('hide');
task.classList.toggle('expand');
arrow.classList.toggle('rotate');
});
document.getElementById('toggleSidebarMobile').addEventListener('click', function () {
const overlay = document.getElementById('overlayTicket');
overlay.classList.toggle('showTicket');
const ticket = document.getElementById('ticketSection');
ticket.classList.toggle('showTicket');
});
document.getElementById('closeToggleButtonMobile').addEventListener('click', function () {
const overlay = document.getElementById('overlayTicket');
overlay.classList.toggle('showTicket');
const ticket = document.getElementById('ticketSection');
ticket.classList.toggle('showTicket');
});
var IsActiveAction = false;
var hideActionTaskForTicketMessage = true;
</script>
<script src="~/assetsadminnew/tasks/js/operationrequestmodal.js?ver=@adminVersion"></script>
@if (Convert.ToInt64(User.FindFirstValue("AccountId")) == Model.TaskDetails.SenderId)
{
<script src="~/assetsadminnew/tasks/js/detailmodalSender.js?ver=@adminVersion"></script>
}
else
{
<script src="~/assetsadminnew/tasks/js/detailmodal.js?ver=@adminVersion"></script>
}
@* tickets *@
<script src="~/assetsadminnew/ticket/js/detailTicketModal.js?ver=@adminVersion"></script>

View File

@@ -88,7 +88,7 @@
<div class="chat-section">
<div class="chat-card-main">
<div class="row">
<div class="col-6">
<div class="col-6 ">
<h6 class="taskTitle justify-content-start row align-items-center mb-1">
<span class="col-5 col-md-4 ps-0">طرف حساب:</span>
<span class="taskTitleSub col-7 col-md-8">@Model.ContractingPartyName</span>
@@ -98,7 +98,7 @@
<span class="taskTitleSub col-7 col-md-8">@Model.Title</span>
</h6>
</div>
<div class="col-6">
<div class="col-6 ">
<h6 class="taskTitle text-end row align-items-center mb-1">
<span class="col-6 col-md-5 ps-0">تاریخ ایجاد:</span>
<span class="taskTitleSub text-center col-6 col-md-7 justify-content-center">@Model.CreateDateFa</span>
@@ -113,7 +113,9 @@
{
<div class="taskTitle">توضیحات :</div>
<div class="taskDesc">
<div class="taskDescText" id="taskDescText">
@Html.Raw(Model.Description)
</div>
</div>
}
@@ -207,8 +209,17 @@
</div>
}
<div class="row">
<span class="mt-3" style="font-size: 9px">@Model.CreateDateFa</span>
<span class="mt-3 col-2" style="font-size: 9px;line-height: 22px;">@Model.CreateDateFa</span>
<button class="taskDescMore col-8" id="showMoreButton">
<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" />
</svg>
</button>
<span class="col-2"></span>
</div>
</div>
@@ -234,11 +245,11 @@
</select>
</div>
<div id="Desc-Time-Area" class="input-form row" style="display: none;">
<div class="col-8 textarea-col p-0">
<div id="Desc-Time-Area-1" class="col-8 textarea-col p-0">
<textarea class="form-control" id="Description" placeholder="توضیحات" style="height: 63px; resize: none;"></textarea>
</div>
<div class="col-4">
<div class="row select-time-section" style="display: none;">
<div id="Desc-Time-Area-2" class="col-4" style="margin: auto 0; padding-right: 6px; padding-left: 14px">
<div class="row select-time-section" style="display: none; height: 59px;">
<div class="col-4 timeSelect1 pe-0">
<input type="radio" class="tm-rad" name="btnradio" id="today" autocomplete="off">
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="today" style="font-size: 11px">امروز</label>
@@ -252,8 +263,12 @@
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="two-day-later" style="font-size: 11px">پس‌فردا</label>
</div>
<div class="from-group position-relative pe-0">
<div >
<div>
<input type="text" id="EndTaskDate" class="form-control text-center date EndTaskDateStyle textFormTM" placeholder="تاریخ" onkeyup="CheckHoliday()" style="border-radius: 0 0 6px 6px;">
<div class="text-center" id="HolidayError" style="display: none; font-size: 11px; color: red; position: absolute; top: 7px; right: 40px; font-weight: 700;">تعطیل</div>
</div>
<div class="text-center" id="HolidayError" style="display: none; font-size: 11px; color: red; position: absolute; top: 6px; right: 21px; font-weight: 700;">تعطیل</div>
</div>
</div>
</div>
</div>

View File

@@ -54,6 +54,10 @@
transition: width 0.3s ease;
}
.taskDescText.expanded {
height: 150px;
}
.ticketSection {
width: 40%;
color: white;
@@ -125,16 +129,25 @@
transform: rotate(180deg);
transition: transform 0.3s ease;
}
#messageContent {
height: 600px;
}
@@media (max-width: 1366px) {
.modal-xl-taskTime {
max-width: 750px;
}
#messageContent {
height: 345px;
}
.modal-content {
height: 550px;
}
#responsive-in-mobile {
height: 390px;
}
}
@@media (max-width: 992px) {
@@ -142,6 +155,11 @@
width: 700px;
height: auto;
}
.actionBtnsection {
width: 100% !important;
}
}
@@media (max-width: 768px) {
@@ -154,6 +172,13 @@
top: auto;
}
.actionBtnsection.actionBtn {
font-size: 12px;
}
#overlayTicket {
z-index: 42;
}
#taskSection {
width: 100%;
}
@@ -181,8 +206,8 @@
#taskSection.expand {
width: 100%;
}
}
}
</style>
}
@@ -374,7 +399,7 @@
نمایش تیکت
</button>
<div class="">
<div>
<div class="modal-header d-block text-center header-custom-color">
<div class="d-flex align-items-center justify-content-between">
<h6 class="modal-title">جزئیات وظیفه</h6>
@@ -407,7 +432,7 @@
</div>
</div>
<div class="@(Model.AssignViewModels?.Count > 1 ? "col-9" : "col-12")">
<div id="responsive-in-mobile" class="@(Model.AssignViewModels?.Count > 1 ? "col-9" : "col-12")">
<div class="chat-section">
<div class="chat-card-main">
<div class="row">
@@ -440,7 +465,9 @@
{
<div class="taskTitle">توضیحات:</div>
<div class="taskDesc">
<div class="taskDescText" id="taskDescText">
@Html.Raw(Model.Description)
</div>
</div>
}
@@ -530,8 +557,18 @@
</div>
}
<div class="row">
<span class="col-2" style="font-size: 11px;line-height: 22px;">@Model.CreateDateFa</span>
<button class="taskDescMore col-8" id="showMoreButton">
<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" />
</svg>
</button>
<span class="col-2"></span>
</div>
<span style="font-size: 11px">@Model.CreateDateFa</span>
</div>
<div class="mainChat">
@@ -578,10 +615,20 @@
</div>
</div>
</div>
@if (userId == Model.SenderId)
{
<button class="actionBtn" id="AssignBtn">ارجاع</button>
<button class="actionBtn" id="deadlineBtn">تغییر مهلت</button>
<button class="actionBtn" id="notPossibleBtn">لغو وظیفه</button>
<button class="actionBtn" id="doneBtn">تکمیل وظیفه</button>
}
else
{
<button class="actionBtn" id="AssignBtn">ارجاع</button>
<button class="actionBtn" id="deadlineBtn">مهلت برای روز خاص</button>
<button class="actionBtn" id="notPossibleBtn">قابل انجام نیست</button>
<button class="actionBtn" id="doneBtn">انجام شد</button>
}
</div>
}
</div>
@@ -616,6 +663,7 @@
<script>
// Tasks
var antiForgeryToken = $('@Html.AntiForgeryToken()').val();
var HasTicketAccessUrl = "@Url.Page("./Index", "HasTicketAccess")";
var createSaveTaskAjax = '@Url.Page("/Company/Task/Create", "CreateSaveTask")';
var voiceSrc = '@(voice == null ? "" : @Url.Page("./Index", "ShowVoice", new { filePath = voice?.Path }))';
var loadChatMessageAjax = '@Url.Page("./Index", "ChatMessageDetailsTask")';
@@ -630,6 +678,9 @@
var uploadFileTicketAjax = '@Url.Page("/Company/Task/Index", "UploadFile")';
var deleteFileTicketAjax = '@Url.Page("/Company/Task/Index", "DeleteFile")';
var deleteAllFilesTicketAjax = '@Url.Page("/Company/Task/Index", "RemoveAllTempFiles")';
var urlAjaxAcceptPendingAdminResponse = '@Url.Page("/Company/Ticket/Index", "AcceptPendingAdminResponse")';
var urlAjaxRejectPendingAdminResponse = '@Url.Page("/Company/Ticket/Index", "RejectPendingAdminResponse")';
var urlAjaxEditPendingAdminResponse = '@Url.Page("/Company/Ticket/Index", "EditPendingAdminResponse")';
var taskId = Number(@Model.Id);
var TicketId = Number(@Model.TicketViewModel.Id);

View File

@@ -21,7 +21,8 @@
<link href="~/AssetsClient/css/filter-search.css?ver=@adminVersion" rel="stylesheet" />
<!-- sweet alerts -->
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
@* <link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet"> *@
<link href="~/assetsadminnew/libs/sweetalert2/sweetalert2.min.css" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/index.css" rel="stylesheet" />
}
@@ -51,32 +52,49 @@
<!-- List Items -->
<div class="row">
<div class="col-12 mb-2">
<div class="d-flex w-100 section-btns-task">
<div class="d-flex w-100 section-btns-task justify-content-between">
@if (Model.UserPositionValue == 1)
{
<button type="button" class="btnTaskListSelfTask me-1 active" id="btnTaskListSelfTask" onclick="loadMore('selfTask');">وظایف شخصی</button>
<button type="button" class="btnTaskListSent me-1" id="btnTaskListSent" onclick="loadMore('sent');">وظایف ارسالی</button>
<div class="d-flex">
<button type="button" class="btnTaskFilter btnTaskListSelfTask me-1 active" id="btnTaskListSelfTask" onclick="loadMore('selfTask');">وظایف شخصی</button>
<button type="button" class="btnTaskFilter btnTaskListSent me-1" id="btnTaskListSent" onclick="loadMore('sent');">وظایف ارسالی</button>
@* <button type="button" class="btnTaskTicket me-1 d-flex align-items-center" id="btnTaskTicket" onclick="loadMore('ticket');">لیست پشتیبانی‌ها</button> *@
<button type="button" class="btnTaskRequest me-1 d-flex align-items-center" id="btnTaskRequest" permission="9012">
<button type="button" class="btnTaskFilter btnTaskRequest me-1 d-flex align-items-center" id="btnTaskRequest" permission="9012">
لیست درخواست‌ها
<span class="badge bg-danger rounded-pill me-1 @(Model.RequestCount==0 ? "d-none" : "")" id="badgeRequestCount1">@Model.RequestCount</span>
<span class="badge bg-danger rounded-pill me-1" id="badgeRequestCount1"></span>
</button>
<button type="button" class="btnTaskFilter btnTicketList me-1" id="btnTicketList">لیست تیکت
<span class="badge bg-danger rounded-pill me-1 " id="badgeTicketCount1"></span>
</button>
<button type="button" class="btnTaskFilter btnTicketRequestList me-1" id="btnTicketRequestList">لیست درخواست های تیکت
<span class="badge bg-danger rounded-pill me-1 " id="badgeTicketRequesttCount1"></span>
</button>
<button type="button" class="btnTaskListAllTask me-1" id="btnTaskListAllTask" onclick="loadMore('AllTask');">کل وظایف</button>
<button type="button" class="btnTaskRequestAll me-1 d-flex align-items-center" id="btnAllTaskRequest" >لیست تمامی درخواست‌ها</button>
</div>
<div class="d-flex">
<button type="button" class="btnTaskFilter btnTaskListAllTask me-1" id="btnTaskListAllTask" onclick="loadMore('AllTask');">کل وظایف</button>
<button type="button" class="btnTaskFilter btnTaskRequestAll me-1 d-flex align-items-center" id="btnAllTaskRequest" >لیست تمامی درخواست‌ها</button>
</div>
}
else
{
<button type="button" class="btnTaskListReceived me-1 active" id="btnTaskListReceived" onclick="loadMore('received');">وظایف دریافتی</button>
<button type="button" class="btnTaskListSent me-1" id="btnTaskListSent" onclick="loadMore('sent');">وظایف ارسالی</button>
<div class="d-flex justify-content-start gap-2">
<button type="button" class="btnTaskFilter btnTaskListReceived me-1 active" id="btnTaskListReceived" onclick="loadMore('received');">وظایف دریافتی</button>
<button type="button" class="btnTaskFilter btnTaskListSent me-1" id="btnTaskListSent" onclick="loadMore('sent');">وظایف ارسالی</button>
@* <button type="button" class="btnTaskTicket me-1 d-flex align-items-center" id="btnTaskTicket" onclick="loadMore('ticket');">لیست پشتیبانی‌ها</button> *@
<button type="button" class="btnTaskRequest me-1 d-flex align-items-center" id="btnTaskRequest" permission="9012">
<button type="button" class="btnTaskFilter btnTaskRequest me-1 d-flex align-items-center" id="btnTaskRequest" permission="9012">
لیست درخواست‌ها
<span class="badge bg-danger rounded-pill me-1 @(Model.RequestCount==0 ? "d-none" : "")" id="badgeRequestCount2">@Model.RequestCount</span>
<span class="badge bg-danger rounded-pill me-1 " id="badgeRequestCount2"></span>
</button>
<button type="button" class="btnTaskFilter btnTicketList me-1" id="btnTicketList">لیست تیکت
<span class="badge bg-danger rounded-pill me-1 " id="badgeTicketCount2"></span>
</button>
<button type="button" class="btnTaskFilter btnTicketRequestList me-1" id="btnTicketRequestList">لیست درخواست های تیکت
<span class="badge bg-danger rounded-pill me-1 " id="badgeTicketRequesttCount2"></span>
</button>
</div>
}
</div>
</div>
@@ -379,13 +397,16 @@
@section Script {
<script src="~/assetsclient/js/site.js?ver=@adminVersion"></script>
<script src="~/AssetsClient/js/dropdown.js?ver=@adminVersion"></script>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
@* <script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script> *@
<script src="~/assetsadminnew/libs/sweetalert2/sweetalert2.all.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
// var loadMoreRequestAjax = $('@Url.Page("./Index", "RequestTicketTask")');
var loadMoreAjax = "@Url.Page("./Index", "TaskPagination")";
var loadRequestCountAjax = "@Url.Page("./Index", "RequestCount")";
// var loadRequestCountAjax = "@Url.Page("./Index", "RequestCount")";
var removeAjax = "@Url.Page("./Index", "RemoveTask")";
var employeeListAjax = "@Url.Page("./Index", "EmployeeList")";
var AssignPermission = "@AuthHelper.GetPermissions().Any(x => x == 90110)";
@@ -398,6 +419,9 @@
var LastPositionValue = @Model.LastPositionValue;
var itemsYearList = @Html.Raw(Json.Serialize(Model.YearlyList.OrderBy(x => x)));
var HasTicketAccessUrl = "@Url.Page("./Index", "HasTicketAccess")";
var loadTicketCountAjax = "@Url.Page("./Index", "RequestCount")";
</script>
<script src="~/assetsadminnew/tasks/js/index.js?ver=@adminVersion"></script>
}

View File

@@ -7,6 +7,7 @@ using AccountManagement.Application.Contracts.Assign;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Application.Contracts.TicketAccessAccount;
using AccountManagement.Domain.AssignAgg;
using AccountManagement.Domain.MediaAgg;
using CompanyManagment.App.Contracts.Checkout;
@@ -21,6 +22,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Identity.Client;
using Newtonsoft.Json.Linq;
using NuGet.Repositories;
using static System.Runtime.InteropServices.JavaScript.JSType;
@@ -38,10 +40,11 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
private readonly IWebHostEnvironment _environment;
private readonly IYearlySalaryApplication _yearlySalaryApplication;
private readonly ITicketApplication _ticketApplication;
private readonly ITicketAccessAccountApplication _ticketAccessAccountApplication;
public IndexModel(ITaskApplication taskApplication, IAuthHelper authHelper,
IAccountApplication accountApplication, IPositionApplication positionApplication,
IWebHostEnvironment environment, IYearlySalaryApplication yearlySalaryApplication, ITicketApplication ticketApplication)
IWebHostEnvironment environment, IYearlySalaryApplication yearlySalaryApplication, ITicketApplication ticketApplication, ITicketAccessAccountApplication ticketAccessAccountApplication)
{
_taskApplication = taskApplication;
_authHelper = authHelper;
@@ -50,6 +53,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
_environment = environment;
_yearlySalaryApplication = yearlySalaryApplication;
_ticketApplication = ticketApplication;
_ticketAccessAccountApplication = ticketAccessAccountApplication;
}
public List<TaskViewModel> TaskViewModels { get; set; }
@@ -70,11 +74,6 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
base.OnPageHandlerExecuting(context);
}
public IActionResult OnGet(TaskSearchModel searchModel)
{
if (_authHelper.GetPermissions().Any(x => x == 901))
@@ -97,9 +96,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
}
public IActionResult OnGetTaskPagination(int pageIndex, string startDate, string endDate, long accountId,
string isDone,
string isCanceled, string isCancelRequest, string isTimeRequest, string timeRequestAccepted, string type, string isDoneRequest, string generalSearch)
public IActionResult OnGetTaskPagination(int pageIndex, string startDate, string endDate, long accountId, string isDone, string isCanceled, string isCancelRequest, string isTimeRequest, string timeRequestAccepted, string type, string isDoneRequest, string generalSearch)
{
var searchModel = new TaskSearchModel()
@@ -143,6 +140,14 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
{
taskList = _taskApplication.AllRequestedTasks(searchModel);
}
else if (searchModel.TypeOfTask == "TasksHaveTicket")
{
taskList = _taskApplication.GetTasksHaveTicket(searchModel);
}
else if (searchModel.TypeOfTask == "TaskHaveTicketRequests")
{
taskList = _taskApplication.GetRequestTaskHasTicket(searchModel);
}
else
{
return BadRequest();
@@ -163,6 +168,14 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
{
taskList = _taskApplication.GetSentTasks(searchModel);
}
else if (searchModel.TypeOfTask == "TasksHaveTicket")
{
taskList = _taskApplication.GetTasksHaveTicket(searchModel);
}
else if (searchModel.TypeOfTask == "TaskHaveTicketRequests")
{
taskList = _taskApplication.GetRequestTaskHasTicket(searchModel);
}
else
{
return BadRequest();
@@ -181,11 +194,16 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
public IActionResult OnGetRequestCount()
{
var accountId = _authHelper.CurrentAccountId();
var requestCount = _taskApplication.GetRequestedTasksCount();
var ticketCount = _taskApplication.TasksHaveTicketCounts(accountId);
var requestTicketCount = _taskApplication.TasksHaveTicketRequestsCount(accountId);
return new JsonResult(new
{
isSuccess = true,
result = requestCount
requestCount = requestCount,
resultTicketCount = ticketCount,
resultRequestTicketCount = requestTicketCount
});
}
@@ -390,8 +408,18 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
Accounts = accounts,
TaskDetails = taskDetails,
};
return Partial("OperationRequestModal", model);
if (model.TaskDetails.HasTicket)
{
return Partial("DetailTaskRequestTicketModal", model);
}
return Partial("OperationRequestModal", model);
}
public IActionResult OnGetOperationRequestTaskDetailsAjax(long taskId)
{
@@ -565,9 +593,6 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
// برای تغییر تاریخ درخواست تسک
public IActionResult OnPostChangeTime(string time, long taskId, long assignedId, string message)
{
var res = _taskApplication.ChangeRequestTimeAndAccept(time, taskId, assignedId, message?.Replace("\n", "<br>"));
return new JsonResult(new
{
@@ -828,6 +853,17 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
});
}
public IActionResult OnGetHasTicketAccess()
{
var accountId = _authHelper.CurrentAccountId();
var hasTicketAccess = _ticketAccessAccountApplication.HasTicketAccess(accountId);
return new JsonResult(new
{
hasTicketAccess
});
}
#endregion
}
}

View File

@@ -160,7 +160,9 @@
{
<div class="taskTitle">توضیحات :</div>
<div class="taskDesc">
<div class="taskDescText" id="taskDescText">
@Html.Raw(Model.TaskDetails.Description)
</div>
</div>
}
@@ -251,8 +253,18 @@
</div>
}
<div class="row">
<div></div>
<span style="font-size: 11px">@Model.TaskDetails.CreateDateFa</span>
<span class="col-2" style="font-size: 11px; line-height: 22px;">@Model.TaskDetails.CreateDateFa</span>
<button class="taskDescMore col-8" id="showMoreButton">
<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/>
</svg>
</button>
<span class="col-2"></span>
</div>
</div>
<div id="mainChat" class="mainChat">
@@ -301,13 +313,13 @@
<script src="~/AssetsAdminNew/libs/wavesurfer/wavesurfer.min.js"></script>
<script>
var antiForgeryToken = $('@Html.AntiForgeryToken()').val();
var loadRequestCountAjax = "@Url.Page("./Index", "RequestCount")";
var createSaveTaskAjax = '@Url.Page("/Company/Task/Create", "CreateSaveTask")';
var AntiForgeryToken = $('@Html.AntiForgeryToken()').val();
var changeTime = '@Url.Page("./Index", "ChangeTime")';
var AcceptTimeRequest = '@Url.Page("./Index", "AcceptTimeRequest")';
var RejectTimeRequest = '@Url.Page("./Index", "RejectTimeRequest")';
var RejectCancel = '@Url.Page("./Index", "RejectCancel")';
// var loadTicketAndCountCountAjax = "@Url.Page("./Index", "RequestCount")";
var AcceptCancel = '@Url.Page("./Index", "AcceptCancel")';
var RejectComplete = '@Url.Page("./Index", "RejectComplete")';
var AcceptComplete = '@Url.Page("./Index", "AcceptComplete")';

View File

@@ -1,8 +1,7 @@
@model AccountManagement.Application.Contracts.Ticket.EditTicket
@using Version = _0_Framework.Application.Version
@{
<link href="~/assetsadminnew/libs/sweetalert2/sweetalert2.min.css" rel="stylesheet" />
string adminVersion = _0_Framework.Application.Version.AdminVersion;
}
<div class="modal-content messageContainer">
@@ -28,8 +27,8 @@
</div>
</div>
<div class="d-flex align-items-center gap-1">
<button type="button" class="btn-ticket-task position-relative d-flex align-items-center justify-content-center w-100 @(Model.HasTask || Model.Status == "بسته شده" ? "disable" : "")" onclick=@(!Model.HasTask ? $"CreateTaskTicket({Model.Id})" : "") style="color: #283868;border-radius: 60px;width: 48px !important;display: flex !important;height: 48px;margin: 0;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<button type="button" class="disable-Erja btn-ticket-task position-relative d-flex align-items-center justify-content-center @(Model.HasTask || Model.Status == "بسته شده" ? "disable" : "")" onclick=@(!Model.HasTask ? $"CreateTaskTicket({Model.Id})" : "") style="color: #283868;border-radius: 60px;width: 48px !important;display: flex !important;height: 48px;margin: 0;">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
<g id="SVGRepo_iconCarrier">
@@ -39,7 +38,7 @@
<span class="mx-1 d-md-none d-flex">ارجاع</span>
</button>
<div class="img-bor2">
<svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<svg width="24" height="24" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.19671 0.621211L2.28367 0.534255C2.67419 0.143731 3.30736 0.14373 3.69788 0.534254L5.86261 2.69899C6.25314 3.08951 6.25314 3.72268 5.86261 4.1132L4.33331 5.64251C4.06589 5.90993 3.99959 6.31847 4.16872 6.65673C5.14645 8.61219 6.73205 10.1978 8.6875 11.1755C9.02577 11.3446 9.43431 11.2783 9.70173 11.0109L11.231 9.48162C11.6216 9.0911 12.2547 9.0911 12.6452 9.48162L14.81 11.6464C15.2005 12.0369 15.2005 12.67 14.81 13.0606L14.723 13.1475C12.6117 15.2589 9.26911 15.4964 6.88039 13.7049L6.51408 13.4302C4.77055 12.1225 3.22173 10.5737 1.91408 8.83016L1.63935 8.46385C-0.152188 6.07513 0.0853593 2.73256 2.19671 0.621211Z" fill="#5B5B5B"/>
</svg>
</div>
@@ -62,9 +61,9 @@
<div class="ticket-message-container" id="messageContent">
</div>
@if (Model.Status != "بسته شده")
{
<div class="footer-message-container my-2">
@* @if ()
{ *@
<div class="footer-message-container my-2 @(Model.Status != "بسته شده" && !Model.IsDeleted ? "" : "d-none")">
<div class="container">
<div class="row align-items-center">
@@ -189,8 +188,7 @@
</div>
</div>
</div>
}
@* } *@
</div>
</div>
@@ -212,7 +210,6 @@
<script src="~/AssetsAdminNew/libs/wavesurfer/wavesurfer.min.js"></script>
<script src="~/assetsadminnew/libs/sweetalert2/sweetalert2.all.min.js"></script>
<script>
@@ -224,6 +221,7 @@
var deleteAllFilesTicketAjax = '@Url.Page("/Company/Ticket/Index", "RemoveAllTempFiles")';
var TicketId = Number(@Model.Id);
var IsActiveAction = true;
var hideActionTaskForTicketMessage = false;
var urlAjaxAcceptPendingAdminResponse = '@Url.Page("/Company/Ticket/Index", "AcceptPendingAdminResponse")';
@@ -231,5 +229,7 @@
var urlAjaxEditPendingAdminResponse = '@Url.Page("/Company/Ticket/Index", "EditPendingAdminResponse")';
var urlAjaxCloseTicket = '@Url.Page("/Company/Ticket/Index", "CloseTicket")';
var HasTicketAccessUrl = "@Url.Page("./Index", "HasTicketAccess")";
</script>
<script src="~/assetsadminnew/ticket/js/detailTicketModal.js?ver=@Version.AdminVersion"></script>
<script src="~/assetsadminnew/ticket/js/detailTicketModal.js?ver=@adminVersion"></script>

View File

@@ -1,37 +1,84 @@
@page
@using Version = _0_Framework.Application.Version
@model ServiceHost.Areas.AdminNew.Pages.Company.Ticket.IndexModel
@{
string adminVersion = _0_Framework.Application.Version.AdminVersion;
var index = 1;
}
@section Styles {
<link href="~/AssetsClient/css/table-style.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/table-responsive.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/assetsclient/css/table-grid.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/assetsclient/css/operation-button.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/table-style.css?ver=@adminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/table-responsive.css?ver=@adminVersion" rel="stylesheet"/>
<link href="~/assetsclient/css/table-grid.css?ver=@adminVersion" rel="stylesheet"/>
<link href="~/assetsclient/css/operation-button.css?ver=@adminVersion" rel="stylesheet"/>
<link href="~/AssetsAdminNew/Ticket/css/ticket-list.css?ver=@Version.StyleVersion" rel="stylesheet"/>
<link href="~/AssetsAdminNew/Ticket/css/ticket-create.css?ver=@Version.StyleVersion" rel="stylesheet"/>
<link href="~/AssetsAdminNew/Ticket/css/ticket-message.css?ver=@Version.StyleVersion" rel="stylesheet"/>
<link href="~/AssetsAdminNew/Ticket/css/Index.css?ver=@Version.StyleVersion" rel="stylesheet"/>
<link href="~/AssetsAdminNew/Ticket/css/ticket-list.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsAdminNew/Ticket/css/ticket-create.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsAdminNew/Ticket/css/ticket-message.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsAdminNew/Ticket/css/Index.css?ver=@adminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/datetimepicker.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/dropdown.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/filter-search.css?ver=@Version.AdminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/select2.css?ver=@adminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/datetimepicker.css?ver=@adminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/dropdown.css?ver=@adminVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/filter-search.css?ver=@adminVersion" rel="stylesheet"/>
<!-- sweet alerts -->
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
<style>
.cardTicket {
width: 100%;
background-color: white;
padding: .5rem;
border: 1px solid #DDDDDD;
cursor: pointer;
}
.cardTicket:hover{
background-color: #F0FFFF;
border: 1px solid #2EBFBF;
transition:100ms all ease-in ;
}
.cardTicket.active {
background-color: #F0FFFF;
border: 1px solid #2EBFBF;
transition: 100ms all ease-in;
}
.goToTop {
display: none;
}
.ticketCount {
width: 36px;
height: 36px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 6px;
color: white;
}
.btn-ticket-restore {
background-color: #60A5FA;
padding: 5px 12px;
border-radius: 6px;
color: white;
}
@@media (max-width: 767px) {
.sticky {
position: sticky;
top: 3px;
z-index: 60;
}
.cardTicket{
min-width: 150px;
font-size: 12px;
padding: .3rem 1rem;
}
}
</style>
}
@@ -61,10 +108,33 @@
<!-- List Items -->
<div class="row">
<div class="col-12 mb-2">
<div class="d-flex w-100 section-btns-task">
</div>
<div class="col-12">
<div class="ticketButtons d-flex justify-content-between gap-2 overflow-auto">
<div class="cardTicket ticketActive d-flex align-items-center justify-content-between rounded ticketActive active" data-type-ticket="" onclick="ticketType('ticketAll', this)">
<span class="ticketButtonsTxt">همه</span>
<div style="background-color: #33D0D0" class="ticketCount gray" id="All">@Model.TypesCountOfTicketViewModel.All</div>
</div>
<div class="cardTicket d-flex align-items-center rounded justify-content-between" data-type-ticket="پاسخ داده شده" onclick="ticketType('ticketAnswered', this)">
<span class="ticketButtonsTxt">پاسخ داده شده</span>
<div style="background-color: #60A5FA" class="ticketCount blue" id="Answered">@Model.TypesCountOfTicketViewModel.Answered</div>
</div>
<div class="cardTicket d-flex align-items-center rounded justify-content-between" data-type-ticket="درحال بررسی" onclick="ticketType('ticketInProgress', this)">
<div class="ticketButtonsTxt">در حال بررسی</div>
<div style="background-color: #EAB308" class="ticketCount yellow" id="Pending">@Model.TypesCountOfTicketViewModel.Pending</div>
</div>
<div class="cardTicket d-flex align-items-center rounded justify-content-between" data-type-ticket="باز" onclick="ticketType('ticketOpen', this)">
<span class="ticketButtonsTxt">باز</span>
<div style="background-color: #E2E8F0" class="ticketCount bg-info" id="Open">@Model.TypesCountOfTicketViewModel.Open</div>
</div>
<div class="cardTicket d-flex align-items-center rounded justify-content-between" data-type-ticket="بسته شده" onclick="ticketType('ticketClosed', this)">
<span class="ticketButtonsTxt">بسته شد</span>
<div style="background-color: #84CC16" class="ticketCount green" id="Closed">@Model.TypesCountOfTicketViewModel.Closed</div>
</div>
<div class="cardTicket d-flex align-items-center rounded justify-content-between" data-type-ticket="زباله" onclick="ticketType('trash', this)">
<span class="ticketButtonsTxt">زباله دان</span>
<div style="background-color: lightcoral" class="ticketCount green" id="CountOfTrashTicket">@Model.CountOfTrashTicket</div>
</div>
</div>
</div>
<div class="container-fluid">
@@ -91,170 +161,10 @@
</div>
@foreach (var item in Model.TicketList)
{
string statusClass;
switch (item.Status)
{
case "باز":
statusClass = "badget-open";
break;
case "درحال بررسی":
statusClass = "badget-inprogress";
break;
case "پاسخ داده شده":
statusClass = "badget-answer";
break;
case "بسته شده":
statusClass = "badget-close";
break;
default:
statusClass = "";
break;
};
<div class="ticket-list Rtable-row align-items-center position-relative openAction @(statusClass == "badget-answer" ? "done" : "") " id="@item.Id">
<div class="Rtable-cell d-md-block d-flex width1">
<div class="Rtable-cell--content">
<span class="d-flex justify-content-center align-items-center justify-content-center">
@* <input type="checkbox" class="form-check-input " name="" id=""> *@
@(index++)
</span>
</div>
</div>
<div class="Rtable-cell d-md-block d-none width2">
<div class="Rtable-cell--content" id="ticketNumber_@item.Id">@item.TicketNumber</div>
</div>
<div class="Rtable-cell d-md-block d-none width3">
<div class="Rtable-cell--content" id="workshopName_@item.Id">@item.WorkshopName</div>
</div>
<div class="Rtable-cell width4">
<div class="Rtable-cell--content text-start" id="contractingParting_@item.Id">@item.ContractingPartyName</div>
</div>
<div class="Rtable-cell width5">
<div class="Rtable-cell--content text-start" id="title_@item.Id">@item.Title</div>
</div>
<div class="Rtable-cell d-md-block d-none width6">
<div class="Rtable-cell--content">@item.CreationDateTime</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--content">
<div class="badget @statusClass">
@item.Status
</div>
</div>
<div class="loadTicketsAjax w-100">
</div>
<div class="Rtable-cell width8 text-end">
<div class="Rtable-cell--content align-items-center d-flex justify-content-end">
<button type="button" class="btn-ticket-detail position-relative d-md-block d-none" onclick="DetailTicket(@item.Id)">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.58325 4.58333C4.58325 3.57081 5.40406 2.75 6.41659 2.75H10.7708C10.8973 2.75 10.9999 2.8526 10.9999 2.97917V7.33333C10.9999 8.34586 11.8207 9.16667 12.8333 9.16667H17.1874C17.314 9.16667 17.4166 9.26924 17.4166 9.39583V17.4167C17.4166 18.4292 16.5958 19.25 15.5833 19.25H6.41659C5.40406 19.25 4.58325 18.4292 4.58325 17.4167V4.58333Z" fill="#58E85B" />
<path d="M12.4167 7.33392V3.95768L16.2096 7.75058H12.8334C12.6033 7.75058 12.4167 7.56404 12.4167 7.33392Z" fill="#248826" stroke="#248826" />
<path d="M7.79175 12.375H13.2917H7.79175Z" fill="#248826" />
<path d="M7.79175 12.375H13.2917" stroke="#248826" stroke-linecap="round" />
<path d="M7.79175 15.125H12.3751H7.79175Z" fill="#248826" />
<path d="M7.79175 15.125H12.3751" stroke="#248826" stroke-linecap="round" />
</svg>
<span class="mx-1 d-md-none d-flex">جزئیات</span>
</button>
<button type="button" class="btn-ticket-task position-relative d-md-block d-none @(item.HasTask || item.Status == "بسته شده" ? "disable" : "")" onclick=@(!item.HasTask ? $"CreateTaskTicket({item.Id})" : "")>
@if (!item.HasTask)
{
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 8H17.8C18.9201 8 19.4802 8 19.908 8.21799C20.2843 8.40973 20.5903 8.71569 20.782 9.09202C21 9.51984 21 10.0799 21 11.2V16.8C21 17.9201 21 18.4802 20.782 18.908C20.5903 19.2843 20.2843 19.5903 19.908 19.782C19.4802 20 18.9201 20 17.8 20H6.2C5.0799 20 4.51984 20 4.09202 19.782C3.71569 19.5903 3.40973 19.2843 3.21799 18.908C3 18.4802 3 17.9201 3 16.8V8Z" fill="#7DD3FC" />
<path d="M3 8C3 7.06812 3 6.60218 3.15224 6.23463C3.35523 5.74458 3.74458 5.35523 4.23463 5.15224C4.60218 5 5.06812 5 6 5H8.34315C9.16065 5 9.5694 5 9.93694 5.15224C10.3045 5.30448 10.5935 5.59351 11.1716 6.17157L13 8H3Z" fill="#38BDF8" />
<path d="M10 14H15M15 14L12.5 11.5M15 14L12.5 16.5" stroke="#0284C7" stroke-linecap="round" />
</svg>
}
else
{
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 8H17.8C18.9201 8 19.4802 8 19.908 8.21799C20.2843 8.40973 20.5903 8.71569 20.782 9.09202C21 9.51984 21 10.0799 21 11.2V16.8C21 17.9201 21 18.4802 20.782 18.908C20.5903 19.2843 20.2843 19.5903 19.908 19.782C19.4802 20 18.9201 20 17.8 20H6.2C5.0799 20 4.51984 20 4.09202 19.782C3.71569 19.5903 3.40973 19.2843 3.21799 18.908C3 18.4802 3 17.9201 3 16.8V8Z" fill="#7DD3FC" />
<path d="M10 14H15M15 14L12.5 11.5M15 14L12.5 16.5" stroke="#0284C7" stroke-linecap="round" />
<path d="M3 8C3 7.06812 3 6.60218 3.15224 6.23463C3.35523 5.74458 3.74458 5.35523 4.23463 5.15224C4.60218 5 5.06812 5 6 5H8.34315C9.16065 5 9.5694 5 9.93694 5.15224C10.3045 5.30448 10.5935 5.59351 11.1716 6.17157L13 8H3Z" fill="#38BDF8" />
<circle cx="20.0002" cy="18.9997" r="2.66667" fill="#84CC16" fill-opacity="0.6" />
<path d="M19.1665 18.9997L19.7271 19.5603C19.7857 19.6189 19.8807 19.6189 19.9392 19.5603L21.1665 18.333" stroke="white" stroke-width="0.5" stroke-linecap="round" />
</svg>
}
</button>
<button type="button" class="btn-ticket-delete d-md-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-linecap="round" />
</svg>
<span class="mx-1 d-md-none d-flex">حذف</span>
</button>
<button type="button" class="btn-ticket-more d-md-none d-block position-relative">
<span> </span>
<span> </span>
<span> </span>
<span> </span>
<span class="mx-1 align-items-center d-flex justify-content-center">
<p class="my-0 mx-1">عملیات</p>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 16 16" fill="currentColor">
<circle cx="8.4001" cy="8.39922" r="1.2" transform="rotate(90 8.4001 8.39922)" />
<circle cx="8.4001" cy="4.39922" r="1.2" transform="rotate(90 8.4001 4.39922)" />
<circle cx="8.4001" cy="12.3992" r="1.2" transform="rotate(90 8.4001 12.3992)" />
</svg>
</span>
</button>
</div>
</div>
</div>
<div class="operation-div w-100">
<div class="operations-btns">
<div class="row p-0">
<div class="d-flex align-items-center justify-content-between">
<span class="span1">شماره پشتیبانی</span>
<span class="span1">@item.TicketNumber</span>
</div>
<div class="d-flex align-items-center justify-content-between">
<span class="span2">@item.Title</span>
<span class="span2">@item.CreationDateTime</span>
</div>
<div class="col-md-12 col-12 p-1">
<div class="badget @statusClass w-100 my-2">@item.Status</div>
</div>
<div class="col-md-6 col-6">
<button type="button" class="btn-ticket-task position-relative d-md-none d-flex align-items-center justify-content-center w-100 @(item.HasTask || item.Status == "بسته شده" ? "disable" : "")" onclick=@(!item.HasTask ? $"CreateTaskTicket({item.Id})" : "") style="color: #283868;border: 1px solid #5e6d9b;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 8H17.8C18.9201 8 19.4802 8 19.908 8.21799C20.2843 8.40973 20.5903 8.71569 20.782 9.09202C21 9.51984 21 10.0799 21 11.2V16.8C21 17.9201 21 18.4802 20.782 18.908C20.5903 19.2843 20.2843 19.5903 19.908 19.782C19.4802 20 18.9201 20 17.8 20H6.2C5.0799 20 4.51984 20 4.09202 19.782C3.71569 19.5903 3.40973 19.2843 3.21799 18.908C3 18.4802 3 17.9201 3 16.8V8Z" fill="#7DD3FC" />
<path d="M3 8C3 7.06812 3 6.60218 3.15224 6.23463C3.35523 5.74458 3.74458 5.35523 4.23463 5.15224C4.60218 5 5.06812 5 6 5H8.34315C9.16065 5 9.5694 5 9.93694 5.15224C10.3045 5.30448 10.5935 5.59351 11.1716 6.17157L13 8H3Z" fill="#38BDF8" />
<path d="M10 14H15M15 14L12.5 11.5M15 14L12.5 16.5" stroke="#0284C7" stroke-linecap="round" />
</svg>
<span class="mx-1 d-md-none d-flex">ارجاع</span>
</button>
</div>
<div class="col-md-6 col-6">
<button type="button" class="btn-ticket-detail position-relative d-md-none d-flex align-items-center justify-content-center w-100" onclick="DetailTicket(@item.Id)">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.58325 4.58333C4.58325 3.57081 5.40406 2.75 6.41659 2.75H10.7708C10.8973 2.75 10.9999 2.8526 10.9999 2.97917V7.33333C10.9999 8.34586 11.8207 9.16667 12.8333 9.16667H17.1874C17.314 9.16667 17.4166 9.26924 17.4166 9.39583V17.4167C17.4166 18.4292 16.5958 19.25 15.5833 19.25H6.41659C5.40406 19.25 4.58325 18.4292 4.58325 17.4167V4.58333Z" fill="#58E85B" />
<path d="M12.4167 7.33392V3.95768L16.2096 7.75058H12.8334C12.6033 7.75058 12.4167 7.56404 12.4167 7.33392Z" fill="#248826" stroke="#248826" />
<path d="M7.79175 12.375H13.2917H7.79175Z" fill="#248826" />
<path d="M7.79175 12.375H13.2917" stroke="#248826" stroke-linecap="round" />
<path d="M7.79175 15.125H12.3751H7.79175Z" fill="#248826" />
<path d="M7.79175 15.125H12.3751" stroke="#248826" stroke-linecap="round" />
</svg>
<span class="mx-1 d-md-none d-flex">جزئیات</span>
</button>
</div>
</div>
</div>
</div>
}
@*
<div class="ticket-list Rtable-row align-items-center position-relative openAction">
@* <div class="ticket-list Rtable-row align-items-center position-relative openAction">
<div class="Rtable-cell d-md-block d-flex width1">
<div class="Rtable-cell--content">
<span class="d-flex justify-content-center align-items-center justify-content-between">
@@ -483,66 +393,16 @@
</div>
@section Script {
<script src="~/assetsclient/js/site.js?ver=@Version.StyleVersion"></script>
<script src="~/assetsclient/js/site.js?ver=@adminVersion"></script>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script>
if ($(window).width() < 768) {
$(document).on("click", ".openAction", function () {
$(this).next().find(".operations-btns").slideToggle(500);
$(".operations-btns").not($(this).next().find(".operations-btns")).slideUp(500);
});
}
$(document).ready(function() {
$('.loadingButton').on('click',
function() {
var button = $(this);
var loadingDiv = button.find('.loading');
loadingDiv.show();
});
$(window).scroll(function() {
if ($(window).scrollTop() + $(window).height() > $(document).height() - 600) {
//ajaxDataWithoutEmployee();
}
if ($(this).scrollTop() > 100) {
$('.goToTop').show().fadeIn();
} else {
$('.goToTop').fadeOut().hide();
}
});
$('.goToTop').on('click',
function() {
$('html, body').animate({ scrollTop: 0 }, 360);
return false;
});
});
function DetailTicket(TicketID) {
var ticketID = Number(TicketID);
var goTo = `#showmodal=/AdminNew/Company/Ticket/Index?ticketID=${ticketID}&handler=ShowDetailTicketByAdmin`;
window.location.href = goTo;
}
function CreateTaskTicket(id) {
var goTo = `#showmodal=/AdminNew/Company/Task/Index?handler=CreateTaskModal`;
window.location.href = goTo;
var ticketId = Number(id);
var contractingPartyName = $(`#contractingParting_${id}`).text();
var commandTitle = 'پشتیبانی شماره ' + $(`#ticketNumber_${id}`).text() + ' - ' + $(`#title_${id}`).text();
$(document).ready(function() {
setTimeout(function() {
$('#TicketId').val(ticketId);
$('#partyNameSearch').val(contractingPartyName);
$('#Command_Title').val(commandTitle);
},
1000);
});
}
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var urlAjaxLoadData = `@Url.Page("./Index", "TicketDataAjax")`;
var deleteTicketAjax = `@Url.Page("./Index", "DeleteTicket")`;
var countTicketAjax = `@Url.Page("./Index", "CountNumberTicket")`;
var restoreDeletedTicketUrl = `@Url.Page("./Index", "RestoreDeletedTicket")`;
var HasTicketAccessUrl = "@Url.Page("./Index", "HasTicketAccess")";
</script>
<script src="~/AssetsAdminNew/Ticket/js/Index.js?@adminVersion"></script>
}

View File

@@ -1,9 +1,11 @@
using _0_Framework.Application;
using _0_Framework.Application;
using AccountManagement.Application;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Application.Contracts.TicketAccessAccount;
using AccountManagement.Domain.TicketAccessAccountAgg;
using AccountManagement.Domain.TicketAgg;
using CompanyManagment.App.Contracts.Workshop;
using CompanyManagment.Application;
using Microsoft.AspNetCore.Authorization;
@@ -22,8 +24,10 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Ticket
private readonly IAuthHelper _authHelper;
private readonly ITicketApplication _ticketApplication;
private readonly ITicketAccessAccountApplication _ticketAccessAccountApplication;
public List<TicketViewModel> TicketList;
public List<TicketViewModel> TicketList;
public TypesCountOfTicketViewModel TypesCountOfTicketViewModel { get; set; }
public int CountOfTrashTicket;
public IndexModel(ITicketApplication ticketApplication, IWorkshopApplication workshopApplication, IAuthHelper authHelper, ITicketAccessAccountApplication ticketAccessAccountApplication)
{
_ticketApplication = ticketApplication;
@@ -45,10 +49,34 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Ticket
public IActionResult OnGet(TicketSearchModel searchModel)
{
TicketList = _ticketApplication.GetAll(searchModel);
// TicketList = _ticketApplication.GetAll(searchModel);
TypesCountOfTicketViewModel = _ticketApplication.GetTypesCountOfTicketForAdmin();
CountOfTrashTicket = _ticketApplication.GetDeletedTicket().Count();
return Page();
}
public IActionResult OnGetTicketDataAjax(int pageIndex, string status, string ticketNumber, string generalSearch)
{
var searchModel = new TicketSearchModel()
{
PageIndex = pageIndex,
Status = status,
TicketNumber = generalSearch,
GeneralSearch = generalSearch,
};
List<TicketViewModel> search;
search = status != "زباله" ? _ticketApplication.GetAll(searchModel) : _ticketApplication.GetDeletedTicket();
return new JsonResult(new
{
data = search,
pageIndex = search.Count
});
}
public IActionResult OnGetShowDetailTicketByAdmin(long ticketID)
{
var res = _ticketApplication.GetDetails(ticketID);
@@ -231,5 +259,51 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Ticket
message = result.Message
});
}
public IActionResult OnPostDeleteTicket(long ticketId)
{
var result = _ticketApplication.DeleteTicket(ticketId);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnGetCountNumberTicket()
{
TypesCountOfTicketViewModel = _ticketApplication.GetTypesCountOfTicketForAdmin();
var resultDelete = _ticketApplication.GetDeletedTicket().Count();
return new JsonResult(new
{
success = true,
countOpen = TypesCountOfTicketViewModel.Open,
countClosed = TypesCountOfTicketViewModel.Closed,
countAnswered = TypesCountOfTicketViewModel.Answered,
countPending = TypesCountOfTicketViewModel.Pending,
countAll = TypesCountOfTicketViewModel.All,
countDelete = resultDelete,
});
}
public IActionResult OnPostRestoreDeletedTicket(long ticketId)
{
var result = _ticketApplication.RestoreDeletedTicket(ticketId);
return new JsonResult(new
{
message = result.Message,
success = result.IsSuccedded,
});
}
public IActionResult OnGetHasTicketAccess()
{
var accountId = _authHelper.CurrentAccountId();
var hasTicketAccess = _ticketAccessAccountApplication.HasTicketAccess(accountId);
return new JsonResult(new
{
hasTicketAccess
});
}
}
}

View File

@@ -2,6 +2,7 @@
@using _0_Framework.Application
@using Microsoft.AspNetCore.Mvc.TagHelpers
@model ServiceHost.Areas.Client.Pages.Company.Fine.IndexModel
@inject _0_Framework.Application.IAuthHelper AuthHelper
@{
string clientVersion = _0_Framework.Application.Version.StyleVersion;
@@ -268,6 +269,9 @@
var fineListLoadDataAjax = `@Url.Page("./Index", "LoadDataAjax")`;
var employeeListAjax = `@Url.Page("./Index", "EmployeeList")`;
var removeFineAjax = `@Url.Page("./Index", "Remove")`;
var editPermission = @(AuthHelper.GetPermissions().Contains(SubAccountPermissionHelper.EditFinePermissionCode) ? "true" : "false");
var deletePermission = @(AuthHelper.GetPermissions().Contains(SubAccountPermissionHelper.DeleteFinePermissionCode) ? "true" : "false");
</script>
<script src="~/assetsclient/pages/Fine/js/index.js?ver=@clientVersion"></script>
}

View File

@@ -1,10 +1,12 @@
using System.Security.Claims;
using _0_Framework.Application;
using _0_Framework.Infrastructure;
using AccountManagement.Application.Contracts.SubAccount;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.Error;
using CompanyManagment.App.Contracts.Fine;
using CompanyManagment.App.Contracts.FineSubject;
using CompanyManagment.App.Contracts.Reward;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -21,17 +23,21 @@ namespace ServiceHost.Areas.Client.Pages.Company.Fine
private readonly IFineApplication _fineApplication;
private readonly IFineSubjectApplication _fineSubjectApplication;
private readonly IEmployeeApplication _employeeApplication;
private readonly IAuthHelper _authHelper;
private readonly ISubAccountApplication _subAccountApplication;
public string WorkshopFullName;
public int PageIndex = 0;
public IndexModel(IFineApplication fineApplication, IWorkshopApplication workshopApplication, IPasswordHasher passwordHasher, IFineSubjectApplication fineSubjectApplication, IEmployeeApplication employeeApplication)
public IndexModel(IFineApplication fineApplication, IWorkshopApplication workshopApplication, IPasswordHasher passwordHasher, IFineSubjectApplication fineSubjectApplication, IEmployeeApplication employeeApplication, IAuthHelper authHelper, ISubAccountApplication subAccountApplication)
{
_fineApplication = fineApplication;
_workshopApplication = workshopApplication;
_passwordHasher = passwordHasher;
_fineSubjectApplication = fineSubjectApplication;
_employeeApplication = employeeApplication;
_authHelper = authHelper;
_subAccountApplication = subAccountApplication;
}
public IActionResult OnGet()
@@ -50,6 +56,20 @@ namespace ServiceHost.Areas.Client.Pages.Company.Fine
public IActionResult OnGetLoadDataAjax(FineSearchViewModel searchViewModel)
{
var subAccId = _authHelper.CurrentSubAccountId();
if (subAccId > 0)
{
var subAccountViewModel = _subAccountApplication.GetDetails(subAccId);
if (subAccountViewModel.SubAccountRoleId == 2)
{
return new JsonResult(new
{
success = true,
data = new List<FineViewModel>(),
pageIndex = 0,
});
}
}
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);

View File

@@ -50,9 +50,15 @@
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">مبلغ جریمه</span>
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: rtl" />
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: ltr" />
<span style="top: 30px;position: absolute;left: 20px;font-size: 14px;color: #868686;">ریال</span>
</div>
<div class="col-12 my-1" style="height: 30px;">
<div class="d-block">
<div id="amountRials" style="font-size: 12px;color: #4f4f4f;"></div>
<div id="amountTomans" style="font-size: 12px;color: #4f4f4f;"></div>
</div>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">تاریخ</span>
<input class="form-control form-control-date text-center dateTime" asp-for="@Model.FineDate" placeholder="تاریخ را وارد نمائید" style="direction: ltr" />
@@ -99,6 +105,8 @@
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script src="~/assetsclient/libs/wordifyfa/wordifyfa.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var saveNewFineAjax = `@Url.Page("./Index", "Create")`;

View File

@@ -27,13 +27,19 @@
</div>
<div class="col-12 my-1">
<span class="spanTitleText">عنوان جریمه</span>
<input class="form-control" asp-for="@Model.Title" placeholder="عنوان جریمه را وارد نمائید" style="direction: rtl" />
<input class="form-control" asp-for="@Model.Title" placeholder="عنوان جریمه را وارد نمائید" />
</div>
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">مبلغ جریمه</span>
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: rtl" />
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: ltr" />
<span style="top: 30px;position: absolute;left: 20px;font-size: 14px;color: #868686;">ریال</span>
</div>
<div class="col-12 my-1" style="height: 30px;">
<div class="d-block">
<div id="amountRials" style="font-size: 12px;color: #4f4f4f;"></div>
<div id="amountTomans" style="font-size: 12px;color: #4f4f4f;"></div>
</div>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">تاریخ</span>
<input class="form-control form-control-date text-center dateTime" asp-for="@Model.FineDate" placeholder="تاریخ را وارد نمائید" style="direction: ltr" />
@@ -68,6 +74,7 @@
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script src="~/assetsclient/libs/wordifyfa/wordifyfa.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var saveEditFineAjax = `@Url.Page("./Index", "Edit")`;

View File

@@ -2,8 +2,7 @@
@using _0_Framework.Application
@using Microsoft.AspNetCore.Mvc.TagHelpers
@model ServiceHost.Areas.Client.Pages.Company.Loan.IndexModel
@{
}
@inject _0_Framework.Application.IAuthHelper AuthHelper
@{
string clientVersion = _0_Framework.Application.Version.StyleVersion;
@@ -270,6 +269,8 @@
var loanListLoadDataAjax = `@Url.Page("./Index", "LoadDataAjax")`;
var removeLoanAjax = `@Url.Page("./Index", "Remove")`;
var employeeListAjax = `@Url.Page("./Index", "EmployeeList")`;
var deletePermission = @(AuthHelper.GetPermissions().Contains(SubAccountPermissionHelper.DeleteLoanPermissionCode) ? "true" : "false");
</script>
<script src="~/assetsclient/pages/loan/js/index.js?ver=@clientVersion"></script>
}

View File

@@ -11,6 +11,8 @@ using CompanyManagment.App.Contracts.Error;
using CompanyManagment.App.Contracts.Loan;
using Microsoft.AspNetCore.Authorization;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using AccountManagement.Application.Contracts.SubAccount;
using CompanyManagment.App.Contracts.Reward;
namespace ServiceHost.Areas.Client.Pages.Company.Loan
{
@@ -22,16 +24,20 @@ namespace ServiceHost.Areas.Client.Pages.Company.Loan
private readonly IWorkshopApplication _workshopApplication;
private readonly ILoanApplication _loanApplication;
private readonly IEmployeeApplication _employeeApplication;
private readonly IAuthHelper _authHelper;
private readonly ISubAccountApplication _subAccountApplication;
public string WorkshopFullName;
public int PageIndex = 0;
public IndexModel(IWorkshopApplication workshopApplication, IPasswordHasher passwordHasher, ILoanApplication loanApplication, IEmployeeApplication employeeApplication)
public IndexModel(IWorkshopApplication workshopApplication, IPasswordHasher passwordHasher, ILoanApplication loanApplication, IEmployeeApplication employeeApplication, IAuthHelper authHelper, ISubAccountApplication subAccountApplication)
{
_workshopApplication = workshopApplication;
_passwordHasher = passwordHasher;
_loanApplication = loanApplication;
_employeeApplication = employeeApplication;
_authHelper = authHelper;
_subAccountApplication = subAccountApplication;
}
public IActionResult OnGet()
@@ -50,7 +56,20 @@ namespace ServiceHost.Areas.Client.Pages.Company.Loan
public IActionResult OnGetLoadDataAjax(LoanSearchViewModel searchViewModel)
{
var subAccId = _authHelper.CurrentSubAccountId();
if (subAccId > 0)
{
var subAccountViewModel = _subAccountApplication.GetDetails(subAccId);
if (subAccountViewModel.SubAccountRoleId == 2)
{
return new JsonResult(new
{
success = true,
data = new List<LoanViewModel>(),
pageIndex = 0,
});
}
}
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);

View File

@@ -27,11 +27,11 @@
</div>
</div>
<div class="col-12 mt-1 position-relative">
<input type="text" class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ" style="direction: rtl" />
<input type="text" class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ" style="direction: ltr" />
<span style="top: 5px;position: absolute;left: 20px;font-size: 14px;color: #868686;">ریال</span>
</div>
<div class="col-12 my-1" style="height: 18px;">
<div class="d-flex align-items-center justify-content-between">
<div class="col-12 my-1" style="height: 30px;">
<div class="d-block">
<div id="amountRials" style="font-size: 12px;color: #4f4f4f;"></div>
<div id="amountTomans" style="font-size: 12px;color: #4f4f4f;"></div>
</div>

View File

@@ -2,6 +2,7 @@
@using _0_Framework.Application
@using Microsoft.AspNetCore.Mvc.TagHelpers
@model ServiceHost.Areas.Client.Pages.Company.Reward.IndexModel
@inject _0_Framework.Application.IAuthHelper authHelper
@{
string clientVersion = _0_Framework.Application.Version.StyleVersion;
@@ -162,7 +163,7 @@
</div>
</div>
<div class="wrapper">
<div class="wrapper" >
<div class="rewardList Rtable Rtable--collapse">
<div class="Rtable-row Rtable-row--head align-items-center sticky-div">
@@ -269,6 +270,8 @@
var rewardListLoadDataAjax = `@Url.Page("./Index", "LoadDataAjax")`;
var employeeListAjax = `@Url.Page("./Index", "EmployeeList")`;
var removeRewardAjax = `@Url.Page("./Index", "Remove")`;
var editPermission = @(authHelper.GetPermissions().Contains(SubAccountPermissionHelper.EditRewardPermissionCode) ? "true" : "false");
var deletePermission = @(authHelper.GetPermissions().Contains(SubAccountPermissionHelper.DeleteRewardPermissionCode) ? "true" : "false");
</script>
<script src="~/assetsclient/pages/Reward/js/index.js?ver=@clientVersion"></script>
}

View File

@@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Security.Claims;
using _0_Framework.Application;
using _0_Framework.Infrastructure;
using AccountManagement.Application.Contracts.SubAccount;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.Error;
using CompanyManagment.App.Contracts.Reward;
@@ -20,17 +21,19 @@ namespace ServiceHost.Areas.Client.Pages.Company.Reward
private readonly IRewardApplication _rewardApplication;
private readonly IAuthHelper _authHelper;
private readonly IEmployeeApplication _employeeApplication;
private readonly ISubAccountApplication _subAccountApplication;
public string WorkshopFullName;
public int PageIndex = 0;
public IndexModel(IWorkshopApplication workshopApplication, IPasswordHasher passwordHasher, IRewardApplication rewardApplication, IAuthHelper authHelper, IEmployeeApplication employeeApplication)
public IndexModel(IWorkshopApplication workshopApplication, IPasswordHasher passwordHasher, IRewardApplication rewardApplication, IAuthHelper authHelper, IEmployeeApplication employeeApplication, ISubAccountApplication subAccountApplication)
{
_workshopApplication = workshopApplication;
_passwordHasher = passwordHasher;
_rewardApplication = rewardApplication;
_authHelper = authHelper;
_employeeApplication = employeeApplication;
_subAccountApplication = subAccountApplication;
}
public IActionResult OnGet()
@@ -49,6 +52,21 @@ namespace ServiceHost.Areas.Client.Pages.Company.Reward
public IActionResult OnGetLoadDataAjax(RewardSearchModel searchViewModel)
{
var subAccId = _authHelper.CurrentSubAccountId();
if(subAccId>0)
{
var subAccountViewModel = _subAccountApplication.GetDetails(subAccId);
if (subAccountViewModel.SubAccountRoleId == 2)
{
return new JsonResult(new
{
success = true,
data = new List<RewardViewModel>(),
pageIndex = 0,
});
}
}
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
@@ -105,7 +123,6 @@ namespace ServiceHost.Areas.Client.Pages.Company.Reward
public IActionResult OnPostCreate(CreateRewardViewModel command)
{
throw new Exception("غلطه آقا");
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId <= 0)

View File

@@ -28,9 +28,15 @@
</div>
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">مبلغ پاداش</span>
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: rtl" />
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: ltr" />
<span style="top: 30px;position: absolute;left: 20px;font-size: 14px;color: #868686;">ریال</span>
</div>
<div class="col-12 my-1" style="height: 30px;">
<div class="d-block">
<div id="amountRials" style="font-size: 12px;color: #4f4f4f;"></div>
<div id="amountTomans" style="font-size: 12px;color: #4f4f4f;"></div>
</div>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">تاریخ</span>
<input class="form-control form-control-date text-center dateTime" asp-for="@Model.GrantDate" placeholder="تاریخ را وارد نمائید" style="direction: ltr" />
@@ -67,6 +73,7 @@
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script src="~/assetsclient/libs/wordifyfa/wordifyfa.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var saveNewRewardAjax = `@Url.Page("./Index", "Create")`;

View File

@@ -26,9 +26,15 @@
</div>
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">مبلغ پاداش</span>
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: rtl" />
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: ltr" />
<span style="top: 30px;position: absolute;left: 20px;font-size: 14px;color: #868686;">ریال</span>
</div>
<div class="col-12 my-1" style="height: 30px;">
<div class="d-block">
<div id="amountRials" style="font-size: 12px;color: #4f4f4f;"></div>
<div id="amountTomans" style="font-size: 12px;color: #4f4f4f;"></div>
</div>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">تاریخ</span>
<input class="form-control form-control-date text-center dateTime" asp-for="@Model.GrantDate" placeholder="تاریخ را وارد نمائید" style="direction: ltr" />
@@ -67,6 +73,7 @@
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script src="~/assetsclient/libs/wordifyfa/wordifyfa.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var saveEditRewardAjax = `@Url.Page("./Index", "Edit")`;

View File

@@ -2,6 +2,8 @@
@using _0_Framework.Application
@using Microsoft.AspNetCore.Mvc.TagHelpers
@model ServiceHost.Areas.Client.Pages.Company.SalaryAid.IndexModel
@inject _0_Framework.Application.IAuthHelper AuthHelper
@{
string clientVersion = _0_Framework.Application.Version.StyleVersion;
Layout = "Shared/_ClientLayout";
@@ -266,6 +268,9 @@
var salaryaidListLoadDataAjax = `@Url.Page("./Index", "LoadDataAjax")`;
var employeeListAjax = `@Url.Page("./Index", "EmployeeList")`;
var removeSalaryAidAjax = `@Url.Page("./Index", "Remove")`;
var editPermission = @(AuthHelper.GetPermissions().Contains(SubAccountPermissionHelper.EditSalaryAidPermissionCode) ? "true" : "false");
var deletePermission = @(AuthHelper.GetPermissions().Contains(SubAccountPermissionHelper.DeleteSalaryAidPermissionCode) ? "true" : "false");
</script>
<script src="~/assetsclient/pages/salaryaid/js/index.js?ver=@clientVersion"></script>
}

View File

@@ -7,8 +7,11 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Security.Claims;
using _0_Framework.Infrastructure;
using AccountManagement.Application.Contracts.SubAccount;
using CompanyManagment.App.Contracts.SalaryAid;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.Reward;
using Microsoft.Extensions.Configuration.UserSecrets;
namespace ServiceHost.Areas.Client.Pages.Company.SalaryAid
{
@@ -20,16 +23,20 @@ namespace ServiceHost.Areas.Client.Pages.Company.SalaryAid
private readonly IWorkshopApplication _workshopApplication;
private readonly ISalaryAidApplication _salaryAidApplication;
private readonly IEmployeeApplication _employeeApplication;
private readonly IAuthHelper _authHelper;
private readonly ISubAccountApplication _subAccountApplication;
public string WorkshopFullName;
public int PageIndex = 0;
public IndexModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, ISalaryAidApplication salaryAidApplication, IEmployeeApplication employeeApplication)
public IndexModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, ISalaryAidApplication salaryAidApplication, IEmployeeApplication employeeApplication, IAuthHelper authHelper, ISubAccountApplication subAccountApplication)
{
_passwordHasher = passwordHasher;
_workshopApplication = workshopApplication;
_salaryAidApplication = salaryAidApplication;
_employeeApplication = employeeApplication;
_authHelper = authHelper;
_subAccountApplication = subAccountApplication;
}
public IActionResult OnGet()
@@ -48,6 +55,20 @@ namespace ServiceHost.Areas.Client.Pages.Company.SalaryAid
public IActionResult OnGetLoadDataAjax(SalaryAidSearchViewModel searchViewModel)
{
var subAccId = _authHelper.CurrentSubAccountId();
if (subAccId > 0)
{
var subAccountViewModel = _subAccountApplication.GetDetails(subAccId);
if (subAccountViewModel.SubAccountRoleId == 2)
{
return new JsonResult(new
{
success = true,
data = new List<SalaryAidViewModel>(),
pageIndex = 0,
});
}
}
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);

View File

@@ -28,9 +28,15 @@
</div>
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">مبلغ مساعده</span>
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: rtl" />
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: ltr" />
<span style="top: 30px;position: absolute;left: 20px;font-size: 14px;color: #868686;">ریال</span>
</div>
<div class="col-12 my-1" style="height: 30px;">
<div class="d-block">
<div id="amountRials" style="font-size: 12px;color: #4f4f4f;"></div>
<div id="amountTomans" style="font-size: 12px;color: #4f4f4f;"></div>
</div>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">تاریخ</span>
<input class="form-control form-control-date text-center dateTime" asp-for="@Model.SalaryDateTime" placeholder="تاریخ را وارد نمائید" style="direction: ltr" />
@@ -63,6 +69,7 @@
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script src="~/assetsclient/libs/wordifyfa/wordifyfa.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var saveNewSalaryAidAjax = `@Url.Page("./Index", "Create")`;

View File

@@ -26,9 +26,15 @@
</div>
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">مبلغ مساعده</span>
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: rtl"/>
<input class="form-control form-control-currency text-center" asp-for="@Model.Amount" placeholder="مبلغ را وارد نمائید" style="direction: ltr"/>
<span style="top: 30px;position: absolute;left: 20px;font-size: 14px;color: #868686;">ریال</span>
</div>
<div class="col-12 my-1" style="height: 30px;">
<div class="d-block">
<div id="amountRials" style="font-size: 12px;color: #4f4f4f;"></div>
<div id="amountTomans" style="font-size: 12px;color: #4f4f4f;"></div>
</div>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">تاریخ</span>
<input class="form-control form-control-date text-center dateTime" asp-for="@Model.SalaryDateTime" placeholder="تاریخ را وارد نمائید" style="direction: ltr"/>
@@ -60,6 +66,7 @@
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script src="~/assetsclient/libs/wordifyfa/wordifyfa.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var saveEditSalaryAidAjax = `@Url.Page("./Index", "Edit")`;

View File

@@ -17,7 +17,7 @@
<link href="~/AssetsClient/css/datetimepicker.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
<link href="~/assetsclient/pages/SubAccounts/css/index.css?ver=85569" rel="stylesheet" />
<link href="~/assetsclient/pages/SubAccounts/css/index.css?ver=@clientVersion" rel="stylesheet" />
}
<div class="content-container">

View File

@@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.CodeAnalysis.Elfie.Diagnostics;
using Microsoft.Identity.Client;
using System.Security.Claims;
using _0_Framework.Infrastructure;
using AccountManagement.Application.Contracts.SubAccountPermissionSubtitle;
using CompanyManagment.App.Contracts.Employee;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
@@ -15,6 +16,7 @@ using AccountManagement.Application.Contracts.Account;
namespace ServiceHost.Areas.Client.Pages.Company.SubAccounts
{
[Authorize]
[NeedsPermission(SubAccountPermissionHelper.UserManagementOperationsPermissionCode)]
public class IndexModel : PageModel
{
private readonly IPasswordHasher _passwordHasher;

View File

@@ -191,4 +191,4 @@
var roleListAjax = `@Url.Page("./Index", "RoleList")`;
var loadNationalCodeAjax = `@Url.Page("./Index", "InfoAccount")`;
</script>
<script src="~/assetsclient/pages/SubAccounts/js/ModalCreateSubAccount.js?ver=clientVersion"></script>
<script src="~/assetsclient/pages/SubAccounts/js/ModalCreateSubAccount.js?ver=@clientVersion"></script>

View File

@@ -141,4 +141,4 @@
var subAccountId = Number(@Model.SubAccountRoleId);
</script>
<script src="~/assetsclient/pages/SubAccounts/js/ModalEditSubAccount.js?ver=622"></script>
<script src="~/assetsclient/pages/SubAccounts/js/ModalEditSubAccount.js?ver=@clientVersion"></script>

View File

@@ -6,7 +6,7 @@
@{
var currentAccount = AuthHelper.CurrentAccountInfo();
var workshopSelected = currentAccount.WorkshopList?.FirstOrDefault(x => x.Slug == User.FindFirstValue("WorkshopSlug"))?.Name;
bool hasPermissionWorkFlow = AuthHelper.GetPermissions().Any(x => x == 101);
bool hasPermissionWorkFlow = AuthHelper.GetPermissions().Any(x => x == SubAccountPermissionHelper.WorkFlowOperationsPermissionCode);
}
<div class="dropdown d-flex d-lg-none" style="padding: 0 !important;position: sticky;width: 100%;top: 0;z-index: 99;">
@@ -252,6 +252,7 @@
<span class="d-block">خانه</span>
</a>
</div>
<div class="col" Permission="@SubAccountPermissionHelper.WorkFlowOperationsPermissionCode">
<a class="bg-transparent position-relative" asp-page="/Company/WorkFlow/Index">
<svg width="42" height="42" viewBox="-4.08 -4.08 32.16 32.16" fill="none" xmlns="http://www.w3.org/2000/svg">

View File

@@ -7,13 +7,13 @@
<!--<StartupObject>ServiceHost.Program</StartupObject>-->
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<!--<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<Optimize>True</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<Optimize>True</Optimize>
</PropertyGroup>
</PropertyGroup>-->
<ItemGroup>
<Compile Remove="Areas\Admin\Pages\Company\Tax\**" />
@@ -128,7 +128,7 @@
<None Include="Areas\AdminNew\Pages\Company\Task\CreateModal.cshtml" />
<None Include="Areas\AdminNew\Pages\Company\Task\DetailsModal.cshtml" />
<None Include="Areas\AdminNew\Pages\Company\Task\DetailsModalOld.cshtml" />
<None Include="Areas\AdminNew\Pages\Company\Task\DetailsTaskTicketsModal.cshtml" />
<None Include="Areas\AdminNew\Pages\Company\Task\DetailTaskRequestTicketModal.cshtml" />
<None Include="Areas\AdminNew\Pages\Company\Task\DiagramTaskModal.cshtml" />
<None Include="Areas\AdminNew\Pages\Company\Task\Edit.cshtml" />
<None Include="Areas\AdminNew\Pages\Company\Task\Group.cshtml" />

View File

@@ -12,10 +12,10 @@
//"MesbahDb": "Data Source=DESKTOP-NUE119G\\MSNEW;Initial Catalog=Mesbah_db;Integrated Security=True"
//server
// "MesbahDb": "Data Source=171.22.24.15;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]is[3019]#@ATt;TrustServerCertificate=true;"
"MesbahDb": "Data Source=171.22.24.15;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]is[3019]#@ATt;TrustServerCertificate=true;"
//local
"MesbahDb": "Data Source=.;Initial Catalog=mesbah_db;Integrated Security=True;TrustServerCertificate=true;"
//"MesbahDb": "Data Source=.;Initial Catalog=mesbah_db;Integrated Security=True;TrustServerCertificate=true;"
},
"GoogleRecaptchaV3": {
"SiteKey": "6Lfhp_AnAAAAAB79WkrMoHd1k8ir4m8VvfjE7FTH",

View File

@@ -76,7 +76,7 @@
display: none;
}
.taskDesc {
.taskDesc .taskDescText {
color: #000000;
font-size: 12px;
font-weight: 500;
@@ -87,6 +87,8 @@
height: 60px;
overflow: auto;
margin: 0 0 4px 0;
overflow-wrap: break-word;
transition: height 0.3s ease, overflow-y 0.3s ease;
}
.taskDesc div {
@@ -95,6 +97,10 @@
font-weight: 500;
}
.taskDescText.expanded {
height: 150px;
}
.uploaded-file,
.upload-box {
position: relative;
@@ -137,6 +143,17 @@
margin: auto 2px;
}
.taskDescMore {
width: 100px;
border-radius: 0 0 8px 8px;
background-color: transparent;
margin: 0 auto;
}
.taskDescMore svg {
color: #ffffff;
}
.upload-box-detailModal .min-img-detailModal {
max-width: 100%;
height: 33px;
@@ -473,6 +490,11 @@
height: 510px;
overflow-y: scroll;
scrollbar-width: thin;
transition: height 0.3s ease, overflow-y 0.3s ease;
}
.mainChat.expanded {
height: 420px;
}
#ajaxChatSection {
@@ -640,7 +662,6 @@
gap: 10px;
margin: 10px 0 0 0;
position: relative;
width: 86%;
}
.actionBtnsection .input-form {
@@ -809,7 +830,7 @@
.actionBtnsection {
gap: 4px;
position: fixed;
width: 100% !important;
}
.actionBtnsection .actionBtn {

View File

@@ -110,11 +110,46 @@
background-color: #65a30d;
}
.btnTicketList {
padding: 10px 30px;
border-radius: 8px;
font-size: 14px;
font-weight: 600;
background-color: #c0f9f9;
border: 1px solid #c0f9f9;
color: #c1bbbb;
width: 210px;
text-align: center;
transition: all ease -in -out .3s;
}
.btnTicketList:hover {
border: 1px solid #979797;
background-color: #a8f5f5;
color: #494949;
}
.section-btns-task {
overflow-x: auto;
white-space: nowrap;
}
.btnTicketRequestList {
border-radius: 8px;
font-size: 14px;
font-weight: 600;
background-color: #c0f9f9;
border: 1px solid #c0f9f9;
color: #c1bbbb;
width: 210px;
text-align: center;
transition: all ease -in -out .3s;
}
.btnTicketRequestList:hover {
border: 1px solid #979797;
background-color: #a8f5f5;
color: #494949;
}
.btnTaskListSelfTask {
padding: 10px 30px;
border-radius: 8px;
@@ -125,7 +160,7 @@
color: #c1bbbb;
width: 210px;
text-align: center;
transition: all ease -in -out .3s
transition: all ease -in -out .3s;
}
.btnTaskListSelfTask:hover {
@@ -276,7 +311,9 @@
.btnTaskList.active,
.btnTaskRequest.active,
.btnTaskTicket.active,
.btnTaskRequestAll.active {
.btnTaskRequestAll.active,
.btnTicketList.active,
.btnTicketRequestList.active {
color: #494949;
background-color: #42e5e5;
border: 1px solid #42e5e5;
@@ -325,10 +362,22 @@
opacity: 0.3;
}
@media(max-width:992px) {
/* .actionBtnsection {
width: 89% !important;
}*/
.chat-section .chat-card-main {
margin: 5px 0 !important;
}
}
@media (max-width: 767px) {
.Rtable--collapse .Rtable-row
{
.actionBtnsection {
width: 89% !important;
}
.Rtable--collapse .Rtable-row {
outline: 0;
}
@@ -347,6 +396,28 @@
font-size: 11px;
}
.btnTicketList {
padding: 5px;
width: 130px;
font-size: 11px;
}
.btnTicketRequestList {
padding: 5px;
width: 150px;
font-size: 11px;
}
.btnTaskListAllTask {
padding: 5px;
width: 130px;
font-size: 11px;
}
.btnTaskRequestAll {
padding: 5px;
width: 130px;
font-size: 11px;
}
.btnTaskListSelfTask {
padding: 5px;
width: 130px;
@@ -401,13 +472,11 @@
width: 26px;
height: 26px;
}
}
}
@media (max-width: 344px) {
@media (max-width: 344px) {
.ellipsed {
width: 60%;
}
}
}

View File

@@ -656,7 +656,7 @@
/* Start Searching Result Box */
.selectDiv {
position: absolute;
z-index: 2;
z-index: 7;
border-radius: 10px;
min-height: 20px;
max-height: 190px;
@@ -701,12 +701,14 @@
/* Start Searching Result Box 2 */
.selectTitleDiv {
position: absolute;
z-index: 2;
z-index: 7;
border-radius: 10px;
min-height: 20px;
max-height: 190px;
overflow: hidden scroll;
width: 100%;
width: 64%;
top: 34px;
left: -0.8px;
background-color: rgb(244 244 244);
display: block;
border: 1px solid #DADADA;

View File

@@ -10,6 +10,44 @@ $(document).ready(function () {
$(this).addClass('active');
});
//for chevron down icon for extending height of chat part
var $taskDescText = $('#taskDescText');
var $showMoreButton = $('#showMoreButton');
$showMoreButton.on('click', function () {
$taskDescText.toggleClass('expanded');
$('.mainChat').toggleClass('expanded');
if ($taskDescText.hasClass('expanded')) {
$showMoreButton.html(
`<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6"><path stroke-linecap="round" stroke-linejoin="round" d="m4.5 15.75 7.5-7.5 7.5 7.5" /></svg>
`);
} else {
$showMoreButton.html(`<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" /></svg>`);
}
});
//$('#showMoreButton').click(function() {
// alert(123);
//});
//var $taskDescText = $('#taskDescText');
//var $showMoreButton = $('#showMoreButton');
//if ($taskDescText[0].scrollHeight > $taskDescText.height()) {
// $showMoreButton.show();
//}
//$showMoreButton.on('click', function() {
// if ($taskDescText.height() === 50) {
// $taskDescText.css('height', '120px');
// $showMoreButton.text('<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">\r\n <path stroke-linecap="round" stroke-linejoin="round" d="m4.5 18.75 7.5-7.5 7.5 7.5" />\r\n <path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 7.5-7.5 7.5 7.5" />\r\n</svg>\r\n');
// } else {
// $taskDescText.css('height', '50px');
// $showMoreButton.text('<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">\r\n <path stroke-linecap="round" stroke-linejoin="round" d="m4.5 5.25 7.5 7.5 7.5-7.5m-15 6 7.5 7.5 7.5-7.5" />\r\n</svg>\r\n');
// }
//});
//$('.actionBtn').click(function () {
// $('.actionBtn').removeClass('active');
// $('#save').removeClass('disable');
@@ -276,11 +314,10 @@ function saveAjax(url, data) {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
// document.location.reload();
$(`.section-btns-task button.active`).click();
$('#MainModal').modal('toggle');
}, 1500);
$(`.section-btns-task button.active`).click();
$('#MainModal').modal('toggle');
} else {
$('.alert-msg').show();
@@ -316,7 +353,6 @@ function loadChatMessage(id) {
data: { 'assignId': Number(id) },
headers: { "RequestVerificationToken": `${antiForgeryToken}` },
success: function (response) {
console.log(response.data);
$.each(response.data, function (i, item) {
var color = "";
var textType = "";
@@ -447,7 +483,6 @@ function loadChatMessage(id) {
});
}
// برای نمایش تصاویر
function loadGallery() {
if ($('.gallery').length) {

View File

@@ -5,11 +5,40 @@ $(document).ready(function () {
loadChatMessage(Number(firstDataId));
$('.input-form').hide();
$('.btnAssignList').click(function () {
$('.btnAssignList').removeClass('active');
$(this).addClass('active');
//for chevron down icon for extending height of chat part
var $taskDescText = $('#taskDescText');
var $showMoreButton = $('#showMoreButton');
// Check if content overflows
//if ($taskDescText[0].scrollHeight > $taskDescText.height()) {
// $showMoreButton.show();
//}
$showMoreButton.on('click', function() {
$taskDescText.toggleClass('expanded');
$('.mainChat').toggleClass('expanded');
if ($taskDescText.hasClass('expanded')) {
$showMoreButton.html(
`<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6"><path stroke-linecap="round" stroke-linejoin="round" d="m4.5 15.75 7.5-7.5 7.5 7.5" /></svg>
`);
} else {
$showMoreButton.html(`<svg width="20px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" /></svg>`);
}
});
//$showMoreButton.on('click', function () {
// if ($taskDescText.height() === 60) {
// $taskDescText.css('height', '60px');
// $showMoreButton.html(` <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6"><path stroke-linecap="round" stroke-linejoin="round" d="m4.5 15.75 7.5-7.5 7.5 7.5" /></svg>`);
// } else {
// $taskDescText.css('height', '150px');
// $showMoreButton.html(`<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" /></svg>`);
// }
//});
//$('.actionBtn').click(function () {
// $('.actionBtn').removeClass('active');
// $('#save').removeClass('disable');
@@ -139,14 +168,12 @@ $(document).ready(function () {
}).mask("0000/00/00");
if (window.matchMedia('(max-width: 767px)').matches) {
console.log(11111111);
setTimeout(function () {
$('.modal-body').animate({
scrollTop: $('.modal-body').get(0).scrollHeight
}, 1200);
}, 900);
} else {
console.log(222222222);
setTimeout(function () {
$('.mainChat').animate({
scrollTop: $('.mainChat').get(0).scrollHeight
@@ -316,7 +343,6 @@ function loadChatMessage(id) {
data: { 'assignId': Number(id) },
headers: { "RequestVerificationToken": `${antiForgeryToken}` },
success: function (response) {
console.log(response.data);
$.each(response.data, function (i, item) {
var color = "";
var textType = "";

View File

@@ -29,6 +29,9 @@ if (window.matchMedia('(max-width: 767px)').matches) {
$(document).ready(function () {
//loadRequestCount();
loadTicketAndRequestCount();
$(document).on('click', ".loadingButton", function () {
var button = $(this);
var loadingDiv = button.find('.loading');
@@ -36,8 +39,6 @@ $(document).ready(function () {
});
$('.goToTop').hide();
if ($('#btnTaskListSelfTask').hasClass('active')) {
$('.titleTaskList').html('وظایف شخصی');
} else if ($('#btnTaskListAllTask').hasClass('active')) {
@@ -54,8 +55,11 @@ $(document).ready(function () {
$('.titleTaskList').html('لیست درخواست‌ها');
} else if ($('#btnAllTaskRequest').hasClass('active')) {
$('.titleTaskList').html('لیست تمامی درخواست‌ها');
} else if ($('#btnTicketList').hasClass('active')) {
$('.titleTaskList').html('لیست تیکت ها');
} else if ($('#btnTicketRequestList').hasClass('active')) {
$('.titleTaskList').html('لیست درخواست تیکت ها');
}
});
@@ -115,6 +119,8 @@ $(document).on('click', '#searchBtn', function () {
loadMoreRequest('request');
} else if ($('#btnAllTaskRequest').hasClass('active')) {
loadMoreRequest('allRequested');
} else if ($('#btnTicketRequestList').hasClass('active')) {
loadMoreRequest('TaskHaveTicketRequests')
}
if (filterEmployeeId != 0 || filterStart != '' || filterEnd != '' || filterIsDone != '' || filterGeneralSearch != '') {
@@ -156,8 +162,8 @@ $(document).on('click', '#searchBtnMobile', function () {
loadMore('list');
} else if ($('#btnTaskRequest').hasClass('active')) {
loadMoreRequest('');
} else if ($('#btnAllTaskRequest').hasClass('active')) {
loadMoreRequest('');
} else if ($('#btnTicketRequestList').hasClass('active')) {
loadMoreRequest('TaskHaveTicketRequests');
}
if (filterEmployeeIdMobile != 0 || filterStartMobile != '' || filterEndMobile != '' || filterIsDoneMobile != '' || filterGeneralSearchMobile != '') {
@@ -191,10 +197,13 @@ $(document).on('click', '.btn-clear-filter', function () {
//******************** فراخوانی کردن ایجکس براساس کلیک روی تب یا بخش های مختلف ********************
$(document).on('click', "#btnTaskListSelfTask", function () {
$('.titleTaskList').html('وظایف شخصی');
$('#btnAllTaskRequest').removeClass('active');
//$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
@@ -215,7 +224,10 @@ $(document).on('click', '.btn-clear-filter', function () {
$(document).on('click', "#btnTaskListAllTask", function () {
$('.titleTaskList').html('کل وظایف');
$('#btnAllTaskRequest').removeClass('active');
//$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
@@ -235,7 +247,10 @@ $(document).on('click', '.btn-clear-filter', function () {
});
$(document).on('click', "#btnTaskListSent", function () {
$('.titleTaskList').html('وظایف ارسالی');
$('#btnAllTaskRequest').removeClass('active');
//$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
@@ -256,7 +271,10 @@ $(document).on('click', '.btn-clear-filter', function () {
$(document).on('click', "#btnTaskListReceived", function () {
$('.titleTaskList').html('وظایف دریافتی');
$('#btnAllTaskRequest').removeClass('active');
//$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
@@ -276,7 +294,10 @@ $(document).on('click', '.btn-clear-filter', function () {
$(document).on('click', "#btnTaskList", function () {
$('.titleTaskList').html('لیست وظایف');
$('#btnAllTaskRequest').removeClass('active');
//$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
@@ -296,7 +317,10 @@ $(document).on('click', '.btn-clear-filter', function () {
});
$(document).on('click', "#btnTaskTicket", function () {
$('.titleTaskList').html('لیست پشتیبانی‌ها');
$('#btnAllTaskRequest').removeClass('active');
//$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
@@ -314,18 +338,68 @@ $(document).on('click', '.btn-clear-filter', function () {
$('#divTaskRequest').hide();
loadMore('list');
});
//2 Ticket Tabs in Task field
$(document).on('click', "#btnTicketList", function () {
$('.titleTaskList').html('لیست تیکت');
//$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
$('#AccountId').trigger('change');
$('#StartDate').val('');
$('#EndDate').val('');
$('#IsDone').val('');
$('.dropdown-IsDone .item').removeClass("active");
$('.dropdown-IsDone .item:first').addClass("active");
$('.selected-display').text($('.dropdown-IsDone .item:first').text());
$('#GeneralSearch').val('');
$('#divTaskList').show();
$('#divTaskRequest').hide();
loadMore('TasksHaveTicket');
});
$(document).on('click', "#btnTicketRequestList", function () {
$('.titleTaskList').html('لیست درخواست تیکت ها');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
$('#tasksAjax').html('');
Number($('#pageIndex').val(0));
Number($('#AccountId').val(0));
$('#AccountId').trigger('change');
$('#StartDate').val('');
$('#EndDate').val('');
$('#IsDone').val('');
$('.dropdown-IsDone .item').removeClass("active");
$('.dropdown-IsDone .item:first').addClass("active");
$('.selected-display').text($('.dropdown-IsDone .item:first').text());
$('#taskRequestsAjax').html('');
$('#GeneralSearch').val('');
$('#divTaskList').hide();
$('#divTaskRequest').show();
loadMoreRequest('TaskHaveTicketRequests');
});
$(document).on('click', ".btnTaskRequest", function () {
$(document).on('click', ".btnTaskRequest", function () {
$('.titleTaskList').html('لیست درخواست‌ها');
$('#btnTaskListSelfTask').removeClass('active');
$('#btnTaskListAllTask').removeClass('active');
$('#btnTaskListSent').removeClass('active');
$('#btnTaskListReceived').removeClass('active');
$('#btnTaskList').removeClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
//$('#btnTaskListSelfTask').removeClass('active');
//$('#btnTaskListAllTask').removeClass('active');
//$('#btnTaskListSent').removeClass('active');
//$('#btnTaskListReceived').removeClass('active');
//$('#btnTaskList').removeClass('active');
$('#btnAllTaskRequest').removeClass('active');
$('.btnTaskRequest').addClass('active');
//$('#btnAllTaskRequest').removeClass('active');
//$('.btnTaskRequest').addClass('active');
$('#divTaskList').hide();
$('#divTaskRequest').show();
@@ -349,17 +423,19 @@ $(document).on('click', ".btnTaskRequest", function () {
// $('#TimeRequestAccepted').val('');
loadMoreRequest('request');
});
});
$(document).on('click', ".btnTaskRequestAll", function () {
$(document).on('click', ".btnTaskRequestAll", function () {
$('.titleTaskList').html('لیست تمامی درخواست‌ها');
$('#btnTaskListSelfTask').removeClass('active');
$('#btnTaskListAllTask').removeClass('active');
$('#btnTaskListSent').removeClass('active');
$('#btnTaskListReceived').removeClass('active');
$('#btnTaskList').removeClass('active');
$('#btnTaskRequest').removeClass('active');
$('#btnAllTaskRequest').addClass('active');
$('.btnTaskFilter').removeClass('active');
$(this).addClass('active');
//$('#btnTaskListSelfTask').removeClass('active');
//$('#btnTaskListAllTask').removeClass('active');
//$('#btnTaskListSent').removeClass('active');
//$('#btnTaskListReceived').removeClass('active');
//$('#btnTaskList').removeClass('active');
//$('#btnTaskRequest').removeClass('active');
//$('#btnAllTaskRequest').addClass('active');
$('#divTaskList').hide();
$('#divTaskRequest').show();
@@ -385,7 +461,7 @@ $(document).on('click', ".btnTaskRequestAll", function () {
// $('#TimeRequestAccepted').val('');
loadMoreRequest('allRequested');
});
});
@@ -458,6 +534,7 @@ function loadMore(type) {
var index = 1;
var html = '';
if (b === 0) {
// var searchModel = {};
// searchModel.Status = $('#status').val();
@@ -855,27 +932,93 @@ function loadMore(type) {
}
function loadRequestCount() {
//function loadRequestCount() {
// $.ajax({
// async: false,
// dataType: 'json',
// type: 'GET',
// url: loadRequestCountAjax,
// headers: { "RequestVerificationToken": `${antiForgeryToken}` },
// success: function (response) {
// if (response.isSuccess) {
// if(response.result === 0) {
// $('#badgeRequestCount1').css('display', 'none');
// } else {
// $('#badgeRequestCount1').html(response.result);
// }
// //if (response.result === 0) {
// // $('#badgeRequestCount1').css('display', 'none');
// // $('#badgeRequestCount2').css('display', 'none');
// //} else {
// // $('#badgeRequestCount1').html(response.result);
// // $('#badgeRequestCount2').html(response.result);
// //}
// //if (response.result === 0) {
// // $('#badgeRequestCount1').css('display', 'none');
// // $('#badgeRequestCount2').css('display', 'none');
// //} else {
// // $('#badgeRequestCount1').html(response.result);
// // $('#badgeRequestCount2').html(response.result);
// //}
// } else {
// $('.alert-msg').show();
// $('.alert-msg p').text(response.message);
// setTimeout(function () {
// $('.alert-msg').hide();
// $('.alert-msg p').text('');
// }, 3500);
// }
// },
// error: function (err) {
// console.log(err);
// }
// });
//}
function loadTicketAndRequestCount() {
$.ajax({
async: false,
dataType: 'json',
type: 'GET',
url: `${loadRequestCountAjax}`,
headers: { "RequestVerificationToken": `${antiForgeryToken}` },
url: loadTicketCountAjax,
success: function (response) {
$('#badgeRequestCount1').html(response.result);
$('#badgeRequestCount2').html(response.result);
//if (response.isSuccess) {
if (response.isSuccess) {
// Check and update text or value based on conditions
$("#badgeRequestCount1").text(response.requestCount == 0 ? "" : response.requestCount);
$("#badgeTicketCount1").text(response.resultTicketCount == 0 ? "" : response.resultTicketCount);
$("#badgeTicketRequesttCount1").text(response.resultRequestTicketCount == 0 ? "" : response.resultRequestTicketCount);
$("#badgeRequestCount2").text(response.requestCount == 0 ? "" : response.requestCount);
$("#badgeTicketCount2").text(response.resultTicketCount == 0 ? "" : response.resultTicketCount);
$("#badgeTicketRequesttCount2").text(response.resultRequestTicketCount == 0 ? "" : response.resultRequestTicketCount);
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
}, 3500);
}
},
error: function (err) {
console.log(err);
}
});
})
}
function loadMoreRequest(type) {
loadRequestCount();
loadTicketAndRequestCount();
//loadRequestCount();
//loadMessages();
let pageIndex = Number($('#pageIndex').val());
var b = pageIndex % 30;
@@ -1086,7 +1229,11 @@ function loadMoreRequest(type) {
html += `${item.canCheckRequests && CheckRequestPermission === `True` ? `<button permission="90120" class="btn-taskmanager-more position-relative" onclick="OperationRequest(${item.id}, '${operation}')">
html += `${item.canCheckRequests && CheckRequestPermission === `True` ? ` <div class="d-flex just">
<button permission="90120" class="btn-taskmanager-more position-relative" onclick="OperationRequest(${item.id}, '${operation}')">
<span class="mx-1 align-items-center d-flex justify-content-between">
<p class="my-0 ps-1 d-none d-md-block">بررسی</p>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 16 16" fill="currentColor">
@@ -1095,7 +1242,8 @@ function loadMoreRequest(type) {
<circle cx="8.4001" cy="12.3992" r="1.2" transform="rotate(90 8.4001 12.3992)"/>
</svg>
</span>
</button>`: ``}`;
</button>
</div>`: ``}`;
html += `</div>
@@ -1429,8 +1577,9 @@ function remove(id) {
function Operation(id, type) {
var task_ID = Number(id);
var goTo = `#showmodal=/AdminNew/Company/Task/Index?taskId=${task_ID}&type=${type}&handler=AssignTo`;
window.location.href = goTo;
var goTo = `/AdminNew/Company/Task/Index?taskId=${task_ID}&type=${type}&handler=AssignTo`;
//window.location.href = goTo;
AjaxUrlContentModal(goTo);
}

View File

@@ -307,6 +307,13 @@ function loadChatMessageRequest(id) {
$('#LoadingCard').hide();
$('#ajaxChatSection').append(html);
$('.date').each(function () {
var value = $(this).val();
$(this).val(convertPersianNumbersToEnglish(value));
$(this).mask("0000/00/00");
});
},
failure: function (response) {
console.log(5, response);
@@ -428,7 +435,8 @@ function saveRequestAjax(url, data, assignId) {
$('.alert-success-msg p').text('');
}, 1500);
loadRequestCount();
//loadRequestCount();
loadTicketAndRequestCount();
var countAssign = CountAssignViewModel - 1;

View File

@@ -1,5 +1,7 @@
var isHoliday = false;
var urlPathname = location.pathname;
var isHoliday = false;
var nameHoliday = "";
$(document).on('keydown', '#EndTaskDate', function () {
$("input[name='btnradio']").prop('checked', false);
@@ -17,6 +19,15 @@ function updateDateInput(daysToAdd) {
$(document).ready(function () {
if (urlPathname.indexOf('/AdminNew/Company/Ticket') > -1) {
$('#append_title').show();
$('#append_title').text(titleTask);
$('#TicketId').val(ticketIdTask);
$('#partyNameSearch').val(contractingPartyNameTask);
$('#Command_Title').val(commandTitleTask);
$('#TaskTitle').removeClass('w-100');
}
//updateDateInput(0);
$(document).on('click', '#today', function () {
@@ -211,6 +222,7 @@ $(document).ready(function () {
var data = new FormData(button.closest('form')[0]);
var ticketValue = Number($('#TicketId').val());
var ticketTitle = $('#Command_Title').val();
var urlAjax = "";
var dataAjax = {};
@@ -220,7 +232,9 @@ $(document).ready(function () {
} else {
urlAjax = createTaskTicketSaveModalAjax;
if (data instanceof FormData) {
$('#TaskTitle').addClass('.onlyTicketTask');
data.append('TicketId', ticketValue);
data.set('Command.Title', titleTask + ' ' + ticketTitle);
dataAjax = data;
} else {
dataAjax = { data, 'TicketId': ticketValue };
@@ -243,11 +257,25 @@ $(document).ready(function () {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
window.location.replace('/AdminNew/Company/Task');
}, 1500);
if (urlPathname.indexOf('/AdminNew/Company/Ticket') > -1) {
var type = $('.ticketButtons .ticketActive').data("type-ticket");
pagIndexMain = 0;
$('.loadTicketsAjax').html('');
loadTicketsMore(type);
$('#MainModal').modal('toggle');
} else {
console.log(response.message);
if (response.message == 'لطفا عنوان وظیفه خود را وارد کنید') {
loadTicketAndRequestCount();
$(`.section-btns-task button.active`).click();
$('#MainModal').modal('toggle');
}
//window.location.replace('/AdminNew/Company/Task');
} else {
if (response.message === 'لطفا عنوان وظیفه خود را وارد کنید') {
$('#Command_Title').addClass('errored');
$('.alert-msg p').text('لطفا انتخاب گروهی را مشخص نمائید.');
setTimeout(function () {
@@ -255,7 +283,7 @@ $(document).ready(function () {
}, 3500);
}
if (response.message == 'لطفا طرف حساب خود را وارد کنید') {
if (response.message === 'لطفا طرف حساب خود را وارد کنید') {
$('#partyNameSearch').addClass('errored');
$('.alert-msg p').text('لطفا انتخاب گروهی را مشخص نمائید.');
setTimeout(function () {
@@ -263,7 +291,7 @@ $(document).ready(function () {
}, 3500);
}
if (response.message == 'لطفا تاریخ انجام وظیفه را وارد کنید') {
if (response.message === 'لطفا تاریخ انجام وظیفه را وارد کنید') {
$('#Command_EndTaskDate').addClass('errored');
$('.alert-msg p').text('لطفا انتخاب گروهی را مشخص نمائید.');
setTimeout(function () {
@@ -779,8 +807,8 @@ $('.cancelAndRefresh').on('click', function () {
success: function (response) {
if (response.isSuccedded) {
// showAlertMessage('.alert-success-msg', response.message, 1500);
//$('#MainModal').modal('toggle');
window.location.reload();
$('#MainModal').modal('hide');
//window.location.reload();
} else {
showAlertMessage('.alert-msg', response.message, 3500);
}
@@ -1492,8 +1520,9 @@ function searchSubjectTask() {
function taskSubjectModal() {
var goTo = `#showmodal=${taskSubjectModal}`;
window.location.href = goTo;
//var goTo = `#showmodal=${taskSubjectModal}`;
//window.location.href = goTo;
AjaxUrlContentModal(taskSubjectModal);
}

View File

@@ -124,6 +124,11 @@
white-space: nowrap;
margin: 0 2px;
}
.disable-Erja {
width: 48px;
height: 48px;
border-radius: 50%;
}
.btn-ticket-edit {
background: rgba(52, 209, 209, 0.3);

View File

@@ -28,7 +28,7 @@
height: 48px;
border-radius: 50%;
background-color: #A5F3FC;
padding: 4px;
padding: 10px;
display: flex;
justify-content: center;
align-items: center;
@@ -39,7 +39,7 @@
height: 48px;
border-radius: 50%;
background-color: rgb(255, 158, 158);
padding: 4px;
padding: 10px;
display: flex;
justify-content: center;
align-items: center;

View File

@@ -0,0 +1,498 @@
var titleTask = '';
var contractingPartyNameTask = '';
var commandTitleTask = '';
var ticketIdTask = '';
if ($(window).width() < 768) {
$(document).on("click", ".openAction", function () {
$(this).next().find(".operations-btns").slideToggle(500);
$(".operations-btns").not($(this).next().find(".operations-btns")).slideUp(500);
});
}
$(document).ready(function () {
$('.loadingButton').on('click', function () {
var button = $(this);
var loadingDiv = button.find('.loading');
loadingDiv.show();
});
loadTicketsMore("");
$(window).scroll(function () {
if ($(window).scrollTop() + $(window).height() > $(document).height() - 600) {
var type = $('.ticketButtons .ticketActive').data("type-ticket");
loadTicketsMore(type);
}
if ($(this).scrollTop() > 100) {
$('.goToTop').show().fadeIn();
} else {
$('.goToTop').fadeOut().hide();
}
});
$(".cardTicket").click(function () {
$(".cardTicket").removeClass("active");
$(this).addClass("active");
});
$('.goToTop').on('click', function () {
$('html, body').animate({ scrollTop: 0 }, 360);
return false;
});
});
function DetailTicket(TicketID) {
var ticketID = Number(TicketID);
var url = `/AdminNew/Company/Ticket/Index?ticketID=${ticketID}&handler=ShowDetailTicketByAdmin`;
AjaxUrlContentModal(url);
}
function CreateTaskTicket(id) {
ticketIdTask = Number(id);
titleTask = 'پشتیبانی شماره ' + $(`#ticketNumber_${id}`).text() + ' - ';
contractingPartyNameTask = $(`#contractingParting_${id}`).text();
commandTitleTask = $(`#title_${id}`).text();
var url = `/AdminNew/Company/Task/Index?handler=CreateTaskModal`;
AjaxUrlContentModal(url);
//commandTitleTask = 'پشتیبانی شماره ' + $(`#ticketNumber_${id}`).text() + ' - ' + $(`#title_${id}`).text();
//$(document).ready(function () {
// setTimeout(function () {
// $('#TicketId').val(ticketId);
// $('#partyNameSearch').val(contractingPartyName);
// $('#Command_Title').val(commandTitle);
// },1000);
//});
}
function removeTicket(TicketID) {
swal({
title: "آیا از حذف اطمینان دارید؟",
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
removeAjax(TicketID);
}
});
}
function removeAjax(id) {
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
url: deleteTicketAjax,
headers: { "RequestVerificationToken": antiForgeryToken },
data: { ticketId: Number(id) },
success: function(response) {
if (response.success) {
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function() {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 1000);
countNumber();
$('#fineListAjax').html('');
pagIndexMain = 0;
pageIndexJs = 0;
$('.loadTicketsAjax').html('');
var type = $('.ticketButtons .ticketActive').data("type-ticket");
loadTicketsMore(type);
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);
setTimeout(function() {
$('.alert-msg').hide();
$('.alert-msg p').text('');
},3500);
}
},
error: function(err) {
console.log(err);
}
});
}
function ticketType(parameters, element) {
$('.cardTicket').removeClass('ticketActive');
$(element).addClass('ticketActive');
let status = '';
switch (parameters) {
case "ticketAll":
status = '';
break;
case "ticketAnswered":
status = 'پاسخ داده شده';
break;
case "ticketInProgress":
status = 'درحال بررسی';
break;
case "ticketOpen":
status = 'باز';
break;
case "ticketClosed":
status = 'بسته شده';
break;
case "trash":
status = "زباله";
break;
default:
}
pagIndexMain = 0;
$('.loadTicketsAjax').html('');
countNumber();
loadTicketsMore(status);
}
var pagIndexMain = 0;
function loadTicketsMore(status) {
let pageIndex =pagIndexMain;
var b = pageIndex % 30;
if (b === 0) {
$.ajax({
async: false,
contentType: 'charset=utf-8',
dataType: 'json',
type: 'GET',
url: urlAjaxLoadData,
data: {
pageIndex: pageIndex,
status: status
},
headers: { "RequestVerificationToken": antiForgeryToken },
success: function (response) {
if (response.pageIndex > 0) {
var n = pageIndex + 1;
$.each(response.data,
function(i, item) {
var statusClass = '';
switch (item.status) {
case "باز":
statusClass = "badget-open";
break;
case "درحال بررسی":
statusClass = "badget-inprogress";
break;
case "پاسخ داده شده":
statusClass = "badget-answer";
break;
case "بسته شده":
statusClass = "badget-closed";
break;
default:
statusClass = "";
break;
};
const html = `
<div></div>
<div class="ticket-list Rtable-row align-items-center position-relative openAction ${statusClass === "badget-answer"
? "done"
: ""}" id="${item.id}">
<div class="Rtable-cell d-md-block d-flex width1">
<div class="Rtable-cell--content">
<span class="d-flex justify-content-center align-items-center justify-content-center">
${n}
</span>
</div>
</div>
<div class="Rtable-cell d-md-block d-none width2">
<div class="Rtable-cell--content" id="ticketNumber_${item.id}">${item.ticketNumber
}</div>
</div>
<div class="Rtable-cell d-md-block d-none width3">
<div class="Rtable-cell--content" id="workshopName_${item.id}">${item.workshopName
}</div>
</div>
<div class="Rtable-cell width4">
<div class="Rtable-cell--content text-start" id="contractingParting_${item.id}">${item
.contractingPartyName}</div>
</div>
<div class="Rtable-cell width5">
<div class="Rtable-cell--content text-start" id="title_${item.id}">${item.title}</div>
</div>
<div class="Rtable-cell d-md-block d-none width6">
<div class="Rtable-cell--content">${item.creationDateTime}</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--content">
<div class="badget ${statusClass}">
${item.status}
</div>
</div>
</div>
<div class="Rtable-cell width8 text-end">
<div class="Rtable-cell--content align-items-center d-flex justify-content-end gap-1">
${status === "زباله"
? `<button type="button" class="btn-ticket-restore" onclick="restoreTicket(${item.id})">بازیابی</button>
<button type="button" class="btn-ticket-detail position-relative d-md-block d-none" onclick="DetailTicket(${item.id})">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.58325 4.58333C4.58325 3.57081 5.40406 2.75 6.41659 2.75H10.7708C10.8973 2.75 10.9999 2.8526 10.9999 2.97917V7.33333C10.9999 8.34586 11.8207 9.16667 12.8333 9.16667H17.1874C17.314 9.16667 17.4166 9.26924 17.4166 9.39583V17.4167C17.4166 18.4292 16.5958 19.25 15.5833 19.25H6.41659C5.40406 19.25 4.58325 18.4292 4.58325 17.4167V4.58333Z" fill="#58E85B"/>
<path d="M12.4167 7.33392V3.95768L16.2096 7.75058H12.8334C12.6033 7.75058 12.4167 7.56404 12.4167 7.33392Z" fill="#248826" stroke="#248826"/>
<path d="M7.79175 12.375H13.2917H7.79175Z" fill="#248826"/>
<path d="M7.79175 12.375H13.2917" stroke="#248826" stroke-linecap="round"/>
<path d="M7.79175 15.125H12.3751H7.79175Z" fill="#248826"/>
<path d="M7.79175 15.125H12.3751" stroke="#248826" stroke-linecap="round"/>
</svg>
<span class="mx-1 d-md-none d-flex">جزئیات</span>
</button>
`
: `
<button type="button" class="btn-ticket-detail position-relative d-md-block d-none" onclick="DetailTicket(${item.id})">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.58325 4.58333C4.58325 3.57081 5.40406 2.75 6.41659 2.75H10.7708C10.8973 2.75 10.9999 2.8526 10.9999 2.97917V7.33333C10.9999 8.34586 11.8207 9.16667 12.8333 9.16667H17.1874C17.314 9.16667 17.4166 9.26924 17.4166 9.39583V17.4167C17.4166 18.4292 16.5958 19.25 15.5833 19.25H6.41659C5.40406 19.25 4.58325 18.4292 4.58325 17.4167V4.58333Z" fill="#58E85B"/>
<path d="M12.4167 7.33392V3.95768L16.2096 7.75058H12.8334C12.6033 7.75058 12.4167 7.56404 12.4167 7.33392Z" fill="#248826" stroke="#248826"/>
<path d="M7.79175 12.375H13.2917H7.79175Z" fill="#248826"/>
<path d="M7.79175 12.375H13.2917" stroke="#248826" stroke-linecap="round"/>
<path d="M7.79175 15.125H12.3751H7.79175Z" fill="#248826"/>
<path d="M7.79175 15.125H12.3751" stroke="#248826" stroke-linecap="round"/>
</svg>
<span class="mx-1 d-md-none d-flex">جزئیات</span>
</button>
<button type="button" class="btn-ticket-task position-relative d-md-block d-none ${
item.hasTask || item.status === "بسته شده" ? "disable" : ""}" onclick=${!item.hasTask
? `"CreateTaskTicket(${item.id})"`
: ""}>
${!item.HasTask
? `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 8H17.8C18.9201 8 19.4802 8 19.908 8.21799C20.2843 8.40973 20.5903 8.71569 20.782 9.09202C21 9.51984 21 10.0799 21 11.2V16.8C21 17.9201 21 18.4802 20.782 18.908C20.5903 19.2843 20.2843 19.5903 19.908 19.782C19.4802 20 18.9201 20 17.8 20H6.2C5.0799 20 4.51984 20 4.09202 19.782C3.71569 19.5903 3.40973 19.2843 3.21799 18.908C3 18.4802 3 17.9201 3 16.8V8Z" fill="#7DD3FC"/>
<path d="M3 8C3 7.06812 3 6.60218 3.15224 6.23463C3.35523 5.74458 3.74458 5.35523 4.23463 5.15224C4.60218 5 5.06812 5 6 5H8.34315C9.16065 5 9.5694 5 9.93694 5.15224C10.3045 5.30448 10.5935 5.59351 11.1716 6.17157L13 8H3Z" fill="#38BDF8"/>
<path d="M10 14H15M15 14L12.5 11.5M15 14L12.5 16.5" stroke="#0284C7" stroke-linecap="round"/>
</svg>`
: `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 8H17.8C18.9201 8 19.4802 8 19.908 8.21799C20.2843 8.40973 20.5903 8.71569 20.782 9.09202C21 9.51984 21 10.0799 21 11.2V16.8C21 17.9201 21 18.4802 20.782 18.908C20.5903 19.2843 20.2843 19.5903 19.908 19.782C19.4802 20 18.9201 20 17.8 20H6.2C5.0799 20 4.51984 20 4.09202 19.782C3.71569 19.5903 3.40973 19.2843 3.21799 18.908C3 18.4802 3 17.9201 3 16.8V8Z" fill="#7DD3FC"/>
<path d="M10 14H15M15 14L12.5 11.5M15 14L12.5 16.5" stroke="#0284C7" stroke-linecap="round"/>
<path d="M3 8C3 7.06812 3 6.60218 3.15224 6.23463C3.35523 5.74458 3.74458 5.35523 4.23463 5.15224C4.60218 5 5.06812 5 6 5H8.34315C9.16065 5 9.5694 5 9.93694 5.15224C10.3045 5.30448 10.5935 5.59351 11.1716 6.17157L13 8H3Z" fill="#38BDF8"/>
<circle cx="20.0002" cy="18.9997" r="2.66667" fill="#84CC16" fill-opacity="0.6"/>
<path d="M19.1665 18.9997L19.7271 19.5603C19.7857 19.6189 19.8807 19.6189 19.9392 19.5603L21.1665 18.333" stroke="white" stroke-width="0.5" stroke-linecap="round"/>
</svg>`
}
</button>
<button type="button" class="btn-ticket-delete d-md-block d-none" onclick="removeTicket(${
item.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-linecap="round"/>
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-linecap="round"/>
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-linecap="round"/>
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-linecap="round"/>
</svg>
<span class="mx-1 d-md-none d-flex">حذف</span>
</button>
`
}
<button type="button" class="btn-ticket-more d-md-none d-block position-relative">
<span> </span>
<span> </span>
<span> </span>
<span> </span>
<span class="mx-1 align-items-center d-flex justify-content-center">
<p class="my-0 mx-1">عملیات</p>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 16 16" fill="currentColor">
<circle cx="8.4001" cy="8.39922" r="1.2" transform="rotate(90 8.4001 8.39922)"/>
<circle cx="8.4001" cy="4.39922" r="1.2" transform="rotate(90 8.4001 4.39922)"/>
<circle cx="8.4001" cy="12.3992" r="1.2" transform="rotate(90 8.4001 12.3992)"/>
</svg>
</span>
</button>
</div>
</div>
</div>
<div class="operation-div w-100">
<div class="operations-btns">
<div class="row p-0">
<div class="d-flex align-items-center justify-content-between">
<span class="span1">شماره پشتیبانی</span>
<span class="span1">${item.ticketNumber}</span>
</div>
<div class="d-flex align-items-center justify-content-between">
<span class="span2">${item.title}</span>
<span class="span2">${item.creationDateTime}</span>
</div>
<div class="col-md-12 col-12 p-1">
<div class="badget ${statusClass} w-100 my-2">${item.status}</div>
</div>
<div class="col-md-6 col-6">
<button type="button" class="btn-ticket-task position-relative d-md-none d-flex align-items-center justify-content-center w-100 ${
item.hasTask || item.status === "بسته شده" ? "disable" : ""}" onclick=${!item.hasTask
? `"CreateTaskTicket(${item.id})"`
: ""} style="color: #283868; border: 1px solid #5e6d9b;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 8H17.8C18.9201 8 19.4802 8 19.908 8.21799C20.2843 8.40973 20.5903 8.71569 20.782 9.09202C21 9.51984 21 10.0799 21 11.2V16.8C21 17.9201 21 18.4802 20.782 18.908C20.5903 19.2843 20.2843 19.5903 19.908 19.782C19.4802 20 18.9201 20 17.8 20H6.2C5.0799 20 4.51984 20 4.09202 19.782C3.71569 19.5903 3.40973 19.2843 3.21799 18.908C3 18.4802 3 17.9201 3 16.8V8Z" fill="#7DD3FC"/>
<path d="M3 8C3 7.06812 3 6.60218 3.15224 6.23463C3.35523 5.74458 3.74458 5.35523 4.23463 5.15224C4.60218 5 5.06812 5 6 5H8.34315C9.16065 5 9.5694 5 9.93694 5.15224C10.3045 5.30448 10.5935 5.59351 11.1716 6.17157L13 8H3Z" fill="#38BDF8"/>
<path d="M10 14H15M15 14L12.5 11.5M15 14L12.5 16.5" stroke="#0284C7" stroke-linecap="round"/>
</svg>
<span class="mx-1 d-md-none d-flex">ارجاع</span>
</button>
</div>
<div class="col-md-6 col-6">
<button type="button" class="btn-ticket-detail position-relative d-md-none d-flex align-items-center justify-content-center w-100" onclick="DetailTicket(${
item.id})">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.58325 4.58333C4.58325 3.57081 5.40406 2.75 6.41659 2.75H10.7708C10.8973 2.75 10.9999 2.8526 10.9999 2.97917V7.33333C10.9999 8.34586 11.8207 9.16667 12.8333 9.16667H17.1874C17.314 9.16667 17.4166 9.26924 17.4166 9.39583V17.4167C17.4166 18.4292 16.5958 19.25 15.5833 19.25H6.41659C5.40406 19.25 4.58325 18.4292 4.58325 17.4167V4.58333Z" fill="#58E85B"/>
<path d="M12.4167 7.33392V3.95768L16.2096 7.75058H12.8334C12.6033 7.75058 12.4167 7.56404 12.4167 7.33392Z" fill="#248826" stroke="#248826"/>
<path d="M7.79175 12.375H13.2917H7.79175Z" fill="#248826"/>
<path d="M7.79175 12.375H13.2917" stroke="#248826" stroke-linecap="round"/>
<path d="M7.79175 15.125H12.3751H7.79175Z" fill="#248826"/>
<path d="M7.79175 15.125H12.3751" stroke="#248826" stroke-linecap="round"/>
</svg>
<span class="mx-1 d-md-none d-flex">جزئیات</span>
</button>
</div>
</div>
</div>
</div>`;
$('.loadTicketsAjax').append(html);
n += 1;
});
pagIndexMain = pageIndex + response.pageIndex;
} else {
const html = `
<div class="container-fluid">
<div class="row p-lg-2 p-auto">
<div class="text-center bg-white d-flex align-items-center justify-content-center w-100">
<div class="">
<img src="/assetsclient/images/empty.png" alt="" class="img-fluid" />
<h5>اطلاعاتی وجود ندارد.</h5>
</div>
</div>
</div>
</div>`;
$('.loadTicketsAjax').append(html);
}
countNumber();
},
failure: function (response) {
console.log(5, response);
}
});
}
}
function countNumber() {
$.ajax({
async: false,
dataType: 'json',
type: 'GET',
url: countTicketAjax,
headers: { "RequestVerificationToken": antiForgeryToken },
success: function (response) {
if (response.success) {
$('#All').text(response.countAll);
$('#Answered').text(response.countAnswered);
$('#Pending').text(response.countPending);
$('#Open').text(response.countOpen);
$('#Closed').text(response.countClosed);
$('#CountOfTrashTicket').text(response.countDelete);
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
},3500);
}
},
error: function (err) {
console.log(err);
}
});
}
function restoreTicket(id) {
swal({
title: "آیا از بازیابی اطمینان دارید؟",
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
restoreDeletedTicket(id);
}
});
}
function restoreDeletedTicket(id) {
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
data: { "ticketId": Number(id) },
url: restoreDeletedTicketUrl,
headers: { "RequestVerificationToken": antiForgeryToken },
success: function (response) {
if (response.success) {
var type = $('.ticketButtons .ticketActive').data("type-ticket");
pagIndexMain = 0;
$('.loadTicketsAjax').html('');
loadTicketsMore(type);
countNumber();
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 3500);
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
},
3500);
}
},
error: function (err) {
console.log(err);
}
});
}

View File

@@ -1,5 +1,8 @@
$(document).ready(function () {
submitionAjax();
loadMessages();
setTimeout(function () {
$('#messageContent').animate({
scrollTop: $('#messageContent').get(0).scrollHeight
@@ -25,7 +28,6 @@
// });
// برای اینتر زدن که پیام مستقیم ارسال میشود
$('#saveAdminResponseTicket').on('click', function (e) {
e.preventDefault();
@@ -70,6 +72,11 @@ $('#saveAdminResponseTicket').on('click', function (e) {
data: formData,
success: function (response) {
if (response.isSuccedd) {
var type = $('.ticketButtons .ticketActive').data("type-ticket");
pagIndexMain = 0;
$('.loadTicketsAjax').html('');
loadTicketsMore(type);
loadMessages();
$('#saveAdminResponseTicket').prop('disabled', false);
$('#Response').val('');
@@ -115,6 +122,171 @@ $('#saveAdminResponseTicket').on('click', function (e) {
});
});
function loadTicketsMore(status) {
let pageIndex = Number($('#pageIndex').val());
var b = pageIndex % 30;
if (b === 0) {
$.ajax({
async: false,
contentType: 'charset=utf-8',
dataType: 'json',
type: 'GET',
url: urlAjaxLoadData,
data: {
pageIndex: pageIndex,
status: status
},
headers: { "RequestVerificationToken": antiForgeryToken },
success: function (response) {
if (response.pageIndex > 0) {
var n = pageIndex + 1;
$.each(response.data, function (i, item) {
var statusClass = '';
switch (item.status) {
case "باز":
statusClass = "badget-open";
break;
case "درحال بررسی":
statusClass = "badget-inprogress";
break;
case "پاسخ داده شده":
statusClass = "badget-answer";
break;
case "بسته شده":
statusClass = "badget-close";
break;
default:
statusClass = "";
break;
};
const html = `
<div></div>
<div class="ticket-list Rtable-row align-items-center position-relative openAction">
<div class="Rtable-cell d-md-block d-flex width1">
<div class="Rtable-cell--content">
<span class="d-flex justify-content-center align-items-center justify-content-center">
${n}
</span>
</div>
</div>
<div class="Rtable-cell d-md-block d-none width2">
<div class="Rtable-cell--content">${item.ticketNumber}</div>
</div>
<div class="Rtable-cell width3 d-md-block d-none">
<div class="Rtable-cell--content">${item.contractingPartyName}</div>
</div>
<div class="Rtable-cell width3">
<div class="Rtable-cell--content">${item.title}</div>
</div>
<div class="Rtable-cell d-md-block d-none width4">
<div class="Rtable-cell--content">${item.creationDateTime}</div>
</div>
<div class="Rtable-cell d-md-block d-none width5">
<div class="Rtable-cell--content">
<div class="badget ${statusClass}">
${item.status}
</div>
</div>
</div>
<div class="Rtable-cell width6 text-end">
<div class="Rtable-cell--content align-items-center d-flex justify-content-end">
<button class="btn-ticket-detail position-relative d-flex align-items-center d-md-block d-none" onclick="DetailTicket(${item.id})">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.58325 4.58333C4.58325 3.57081 5.40406 2.75 6.41659 2.75H10.7708C10.8973 2.75 10.9999 2.8526 10.9999 2.97917V7.33333C10.9999 8.34586 11.8207 9.16667 12.8333 9.16667H17.1874C17.314 9.16667 17.4166 9.26924 17.4166 9.39583V17.4167C17.4166 18.4292 16.5958 19.25 15.5833 19.25H6.41659C5.40406 19.25 4.58325 18.4292 4.58325 17.4167V4.58333Z" fill="#58E85B" />
<path d="M12.4167 7.33392V3.95768L16.2096 7.75058H12.8334C12.6033 7.75058 12.4167 7.56404 12.4167 7.33392Z" fill="#248826" stroke="#248826" />
<path d="M7.79175 12.375H13.2917H7.79175Z" fill="#248826" />
<path d="M7.79175 12.375H13.2917" stroke="#248826" stroke-linecap="round" />
<path d="M7.79175 15.125H12.3751H7.79175Z" fill="#248826" />
<path d="M7.79175 15.125H12.3751" stroke="#248826" stroke-linecap="round" />
</svg>
<span class="mx-1 d-md-none d-flex">جزئیات</span>
</button>
<button class="btn-ticket-more position-relative d-flex align-items-center d-md-none d-block">
<span class="mx-1 d-md-none d-flex">عملیات</span>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 16 16" fill="currentColor">
<circle cx="8.4001" cy="8.39922" r="1.2" transform="rotate(90 8.4001 8.39922)"/>
<circle cx="8.4001" cy="4.39922" r="1.2" transform="rotate(90 8.4001 4.39922)"/>
<circle cx="8.4001" cy="12.3992" r="1.2" transform="rotate(90 8.4001 12.3992)"/>
</svg>
</button>
</div>
</div>
</div>
<div class="operation-div w-100">
<div class="operations-btns">
<div class="row p-0">
<div class="d-flex align-items-center justify-content-between">
<span class="span1">شماره پشتیبانی:</span>
<span class="span1">${item.ticketNumber}</span>
</div>
<div class="d-flex align-items-center justify-content-between">
<span class="span1">تاریخ ایجاد:</span>
<span class="span1">${item.creationDateTime}</span>
</div>
<div class="d-flex align-items-center justify-content-between">
<span class="span1">نام کاربر:</span>
<span class="span1">${item.contractingPartyName}</span>
</div>
<div class="col-md-12 col-12 p-1">
<div class="badget ${statusClass} w-100 my-2">${item.status}</div>
</div>
<div class="col-md-12 col-12">
<button class="btn-ticket-detail position-relative d-md-none d-flex align-items-center justify-content-center w-100" onclick="DetailTicket(${item.id})">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.58325 4.58333C4.58325 3.57081 5.40406 2.75 6.41659 2.75H10.7708C10.8973 2.75 10.9999 2.8526 10.9999 2.97917V7.33333C10.9999 8.34586 11.8207 9.16667 12.8333 9.16667H17.1874C17.314 9.16667 17.4166 9.26924 17.4166 9.39583V17.4167C17.4166 18.4292 16.5958 19.25 15.5833 19.25H6.41659C5.40406 19.25 4.58325 18.4292 4.58325 17.4167V4.58333Z" fill="#58E85B" />
<path d="M12.4167 7.33392V3.95768L16.2096 7.75058H12.8334C12.6033 7.75058 12.4167 7.56404 12.4167 7.33392Z" fill="#248826" stroke="#248826" />
<path d="M7.79175 12.375H13.2917H7.79175Z" fill="#248826" />
<path d="M7.79175 12.375H13.2917" stroke="#248826" stroke-linecap="round" />
<path d="M7.79175 15.125H12.3751H7.79175Z" fill="#248826" />
<path d="M7.79175 15.125H12.3751" stroke="#248826" stroke-linecap="round" />
</svg>
<span class="mx-1 d-md-none d-flex">جزئیات</span>
</button>
</div>
</div>
</div>
</div>
`;
$('.loadTicketsAjax').append(html);
n += 1;
});
var newPageIndex = pageIndex + response.pageIndex;
$('#pageIndex').val(newPageIndex);
}
},
failure: function (response) {
console.log(5, response);
}
});
}
}
var submition = false;
function submitionAjax() {
$.ajax({
async: false,
dataType: 'json',
type: 'GET',
url: HasTicketAccessUrl,
success: function (response) {
submition = response.hasTicketAccess;
},
error: function (err) {
console.log(err);
}
});
}
function loadMessages() {
var html = '';
$.ajax({
@@ -125,6 +297,7 @@ function loadMessages() {
headers: { "RequestVerificationToken": antiForgeryToken },
data: { 'ticketID': TicketId },
success: function (response) {
console.log(response);
var responseTickets = response.ticketDetail;
html += `<div class="ticket-message-reciever row" style="${responseTickets.ticketType === 'inPage' ? 'display: flex;' : ''}">`;
@@ -402,10 +575,11 @@ function loadMessages() {
});
html += `</div>
<div class="d-flex align-items-center justify-content-between">
<div class="d-flex align-items-center justify-content-between p-0">
<div class="createdDate">${itemResponse.creationDateStr}</div>`;
if (IsActiveAction) {
if (submition) {
if (itemResponse.isActive === "false") {
html += `<div class="buttomActionTickets">
<button class="btn-ticket-action-edit" onclick="showEditPendingAdminResponse(${itemResponse.adminResponseId})">ویرایش</button>
@@ -416,7 +590,7 @@ function loadMessages() {
}
html += `</div>`;
if (IsActiveAction) {
if (submition) {
if (itemResponse.isActive === "false") {
html += `<div id="EditDescriptionSection_${itemResponse.adminResponseId}" style="display: none">
<textarea class="form-control my-2 textareaEdit" rows="3" id="EditDescription_${itemResponse.adminResponseId}">${itemResponse.responseMessage === "$GOzaReshgirMediaVoIce@" ? "" : itemResponse.responseMessage}</textarea>
@@ -428,6 +602,8 @@ function loadMessages() {
}
}
html += `</div>`;
}
});
@@ -652,8 +828,8 @@ $('#cancelSendTicket').on('click', function () {
success: function (response) {
if (response.isSuccedded) {
// showAlertMessage('.alert-success-msg', response.message, 1500);
window.location.reload();
// $('#MainModal').modal('toggle');
// window.location.reload();
$('#MainModal').modal('hide');
} else {
showAlertMessage('.alert-msg', response.message, 3500);
}
@@ -1101,7 +1277,6 @@ if (navigator.mediaDevices.getUserMedia) {
}
function save() {
console.log(audioSrc);
var a = document.createElement('a');
a.download = 'record.ogg';
a.href = audioSrc;

View File

@@ -168,7 +168,6 @@ $(window).scroll(function () {
}
});
function ajaxPersonals() {
$.ajax({
url: employeeListAjax,
@@ -263,14 +262,29 @@ function loadFineList() {
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" />
</svg>
</button>
<button data-edit-id="${item.id}" class="btn-edit position-relative d-md-block d-none">
${editPermission
?
`<button data-edit-id="${item.id}" class="btn-edit position-relative d-md-block d-none">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
<button data-remove-id="${item.id}" type="button" class="btn-delete removeFine d-md-block d-none">
</button>`
:
`<button class="btn-edit position-relative d-md-block d-none disable">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>`
}
${deletePermission
?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeFine d-md-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -278,7 +292,20 @@ function loadFineList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeFine d-md-block d-none disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`
}
<button type="button" class="btn-operation-more btn-open-div position-relative d-md-none d-block removeFine">
<span class="align-items-center d-flex justify-content-center">
<span class="mx-1">عملیات</span>
@@ -325,15 +352,28 @@ function loadFineList() {
<span class="mx-1">پرینت</span>
</button>
<button data-edit-id="${item.id}" class="btn-edit position-relative">
${editPermission
?
`<button data-edit-id="${item.id}" class="btn-edit position-relative">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
</button>`
:
`<button class="btn-edit position-relative disable">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>`
}
<button data-remove-id="${item.id}" type="button" class="btn-delete removeFine">
${deletePermission
?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeFine">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -341,7 +381,19 @@ function loadFineList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeFine disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`
}
</div>
</div>
</div>

View File

@@ -17,9 +17,17 @@ $(document).ready(function () {
}
});
$('#Amount').keyup(function () {
var amount = $(this).val();
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
});
$('#CRUDFineSubjectBTN').on('click', function() {
$('#CRUDFineSubjectModal').show();
})
});
$('.form-control-number').on('keydown', function (e) {
const allowedKeys = [
@@ -190,6 +198,11 @@ function searchSubjectFine() {
//});
function selectItemTitle(subject, amount) {
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
searchBoxTitle.val(subject);
$('#Amount').val(amount);
containerTitle.hide();
@@ -231,6 +244,7 @@ function fineSubjectModal() {
$('#createData').on('click', SaveDataAjax);
function SaveDataAjax() {
var loading = $('#createData .spinner-loading');
@@ -306,8 +320,8 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 2000);
if (urlPathname.indexOf('/Client/Company/Fine') > -1) {
$('#fineListAjax').html('');
@@ -315,7 +329,9 @@ function SaveDataAjax() {
pageIndexJs = 0;
loadFineList();
}
}, 2000);
loading.hide();
$('#MainModal').modal('hide');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -14,6 +14,20 @@
}
});
var amount = parseFloat($("#Amount").val().replace(/٬/g, ''));
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
$('#Amount').keyup(function () {
var amount = $(this).val();
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
});
$(".form-control-currency").each(function () {
let element = $(this);
element.on('input', function () {
@@ -188,14 +202,15 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 1500);
$('#fineListAjax').html('');
$('#PageIndex').val(0);
pageIndexJs = 0;
loadFineList();
loading.hide();
$('#MainModal').modal('hide');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -232,7 +232,8 @@ function loadLoanList() {
<div class="Rtable-cell width1 widthNumberCustom1">
<label for="${n}" class="Rtable-cell--content prevent-select">
<span class="d-flex justify-content-center align-items-center justify-content-center">
<input id="${n}" type="checkbox" class="d-none form-check-input foo" name="foo" value="${item.Id}">
<input id="${n
}" type="checkbox" class="d-none form-check-input foo" name="foo" value="${item.Id}">
${n}
</span>
</label>
@@ -253,7 +254,8 @@ function loadLoanList() {
<div class="Rtable-cell--content ">${item.startDateTime}</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--content align-items-center justify-content-center d-flex">${item.count}</div>
<div class="Rtable-cell--content align-items-center justify-content-center d-flex">${
item.count}</div>
</div>
<div class="Rtable-cell width8">
@@ -267,7 +269,9 @@ function loadLoanList() {
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" />
</svg>
</button>
<button data-remove-id="${item.id}" type="button" class="btn-delete removeLoan d-md-block d-none">
${deletePermission
?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeLoan d-md-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -275,7 +279,18 @@ function loadLoanList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeLoan d-md-block d-none disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`
}
<button type="button" class="btn-operation-more btn-open-div position-relative d-md-none d-block">
<span class="align-items-center d-flex justify-content-center">
<span class="mx-1">عملیات</span>
@@ -325,7 +340,10 @@ function loadLoanList() {
</svg>
<span class="mx-1">پرینت</span>
</button>
<button data-remove-id="${item.id}" type="button" class="btn-delete removeLoan">
${deletePermission
?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeLoan">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -333,7 +351,18 @@ function loadLoanList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeLoan disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`
}
</div>
</div>
</div>

View File

@@ -1,5 +1,15 @@
var urlPathname = location.pathname;
//var Scrollbar = window.Scrollbar;
//Scrollbar.init(document.querySelector('#amountRials'), {
// alwaysShowTracks: true
//});
//Scrollbar.init(document.querySelector('#amountTomans'), {
// alwaysShowTracks: true
//});
$(document).ready(function () {
$('.loading').hide();
@@ -368,8 +378,7 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 2000);
if (urlPathname.indexOf('/Client/Company/Loan') > -1) {
$('#loanListAjax').html('');
@@ -378,7 +387,9 @@ function SaveDataAjax() {
loadLoanList();
}
}, 2000);
loading.hide();
$('#MainModal').modal('hide');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -269,16 +269,26 @@ function loadRewardList() {
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" />
</svg>
</button>
<button data-edit-id="${item.id}" class="btn-edit position-relative d-md-block d-none">
${editPermission ?
`<button data-edit-id="${item.id}" class="btn-edit position-relative d-md-block d-none">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
</button>`
:
`<button class="btn-edit position-relative d-md-block d-none disable">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>`}
<button data-remove-id="${item.id}" type="button" class="btn-delete removeReward d-md-block d-none">
${deletePermission ?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeReward d-md-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -286,7 +296,20 @@ function loadRewardList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeReward d-md-block d-none disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`}
<button type="button" class="btn-operation-more btn-open-div position-relative d-md-none d-block">
<span class="align-items-center d-flex justify-content-center">
@@ -335,15 +358,25 @@ function loadRewardList() {
<span class="mx-1">پرینت</span>
</button>
<button data-edit-id="${item.id}" class="btn-edit position-relative">
${editPermission ?
`<button data-edit-id="${item.id}" class="btn-edit position-relative">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
</button>`
:
`<button class="btn-edit position-relative disable">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>`}
<button data-remove-id="${item.id}" type="button" class="btn-delete removeReward">
${deletePermission ?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeReward">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -351,7 +384,19 @@ function loadRewardList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeReward disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`}
</div>
</div>
</div>

View File

@@ -17,6 +17,14 @@ $(document).ready(function () {
}
});
$('#Amount').keyup(function () {
var amount = $(this).val();
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
});
$('.form-control-number').on('keydown', function (e) {
const allowedKeys = [
'Backspace', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowRight',
@@ -175,8 +183,7 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 2000);
if (urlPathname.indexOf('/Client/Company/Reward') > -1) {
$('#rewardListAjax').html('');
@@ -184,7 +191,9 @@ function SaveDataAjax() {
pageIndexJs = 0;
loadRewardList();
}
}, 2000);
loading.hide();
$('#MainModal').modal('hide');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -1,5 +1,4 @@
$(document).ready(function () {
$(document).ready(function () {
$('.form-control-number').on('keydown', function (e) {
const allowedKeys = [
'Backspace', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowRight',
@@ -15,6 +14,20 @@ $(document).ready(function () {
}
});
var amount = parseFloat($("#Amount").val().replace(/٬/g, ''));
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
$('#Amount').keyup(function () {
var amount = $(this).val();
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
});
$(".form-control-currency").each(function () {
let element = $(this);
element.on('input', function () {
@@ -45,8 +58,6 @@ $(document).ready(function () {
ajaxPersonals();
});
$('#createData').on('click', SaveDataAjax);
function SaveDataAjax() {
var loading = $('#createData .spinner-loading');
@@ -109,15 +120,15 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 2000);
$('#rewardListAjax').html('');
$('#PageIndex').val(0);
pageIndexJs = 0;
loadRewardList();
loading.hide();
$('#MainModal').modal('hide');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -263,14 +263,28 @@ function loadSalaryAidList() {
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" />
</svg>
</button>
<button data-edit-id="${item.id}" class="btn-edit position-relative d-md-block d-none">
${editPermission
?
`<button data-edit-id="${item.id}" class="btn-edit position-relative d-md-block d-none">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
<button data-remove-id="${item.id}" type="button" class="btn-delete removeSalaryAid d-md-block d-none">
</button> `
:
`<button class="btn-edit position-relative d-md-block d-none disable">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button> `
}
${deletePermission
?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeSalaryAid d-md-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -278,7 +292,19 @@ function loadSalaryAidList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeSalaryAid d-md-block d-none disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`
}
<button type="button" class="btn-operation-more btn-open-div position-relative d-md-none d-block removeSalaryAid">
<span class="align-items-center d-flex justify-content-center">
<span class="mx-1">عملیات</span>
@@ -321,15 +347,27 @@ function loadSalaryAidList() {
<span class="mx-1">پرینت</span>
</button>
<button data-edit-id="${item.id}" class="btn-edit position-relative">
${editPermission
?
`<button data-edit-id="${item.id}" class="btn-edit position-relative">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
<button data-remove-id="${item.id}" type="button" class="btn-delete removeSalaryAid">
</button>`
:
`<button class="btn-edit position-relative disable">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>`
}
${deletePermission
?
`<button data-remove-id="${item.id}" type="button" class="btn-delete removeSalaryAid">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -337,7 +375,19 @@ function loadSalaryAidList() {
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</button>`
:
`<button type="button" class="btn-delete removeSalaryAid disable">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>`
}
</div>
</div>
</div>

View File

@@ -17,6 +17,14 @@ $(document).ready(function () {
}
});
$('#Amount').keyup(function () {
var amount = $(this).val();
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
});
$('.form-control-number').on('keydown', function (e) {
const allowedKeys = [
'Backspace', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowRight',
@@ -100,6 +108,7 @@ function ajaxPersonals() {
}
$('#createData').on('click', SaveDataAjax);
function SaveDataAjax() {
var loading = $('#createData .spinner-loading');
@@ -161,13 +170,18 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 1500);
if (urlPathname.indexOf('/Client/Company/SalaryAid') > -1) {
window.location.reload();
$('#salaryaidListAjax').html('');
$('#PageIndex').val(0);
pageIndexJs = 0;
loadSalaryAidList();
//window.location.reload();
}
}, 1500);
loading.hide();
$('#MainModal').modal('hide');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -14,6 +14,20 @@
}
});
var amount = parseFloat($("#Amount").val().replace(/٬/g, ''));
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
$('#Amount').keyup(function () {
var amount = $(this).val();
var amountRials = wordifyRials(amount);
var amountTomans = wordifyRialsInTomans(amount);
$('#amountRials').text(amountRials);
$('#amountTomans').text(amountTomans);
});
$(".form-control-currency").each(function () {
new Cleave(this, {
numeral: true,
@@ -80,10 +94,16 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 1500);
$('#salaryaidListAjax').html('');
$('#PageIndex').val(0);
pageIndexJs = 0;
loadSalaryAidList();
//window.location.reload();
loading.hide();
$('#MainModal').modal('hide');
window.location.reload();
}, 1500);
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -56,7 +56,8 @@
.form-check-input[type=checkbox]:indeterminate {
background-color: #148989;
border-color: #ffffff;
--bs-form-check-bg-image: url(data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e);
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="white" stroke-width="3"%3E%3Cpath stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" /%3E%3C/svg%3E');
/*--bs-form-check-bg-image: url(data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e);*/
}
.form-check-input[type="checkbox"]:focus {
@@ -148,7 +149,7 @@
display: flex;
align-items: center;
justify-content: space-between;
width: 246px;
width: 265px;
}
#tree .node-label {

View File

@@ -8,6 +8,7 @@
background: #CAF5F5;
padding: 0;
margin: 0;
height: 100%;
}
#navbar-animmenu ul li a i {
@@ -83,7 +84,7 @@
}
.verti-selector .top.last-role::before {
background-color: #f5f5f5;
background-color: #caf5f5;
}
.verti-selector .top:before {

View File

@@ -25,10 +25,12 @@
});
});
$('#MainModal').on('show.bs.modal', function () {
$(document).off('click', '#tree .togglePermission').on('click', '#tree .togglePermission', function (e) {
e.stopPropagation();
if ($(e.target).is('input[type="checkbox"]')) {
return;
}
let parentLi = $(this).closest('li');
parentLi.children('ul').slideToggle();
$(this).toggleClass('open');
@@ -67,7 +69,6 @@ $('#MainModal').on('show.bs.modal', function () {
}
});
});
});
function updateParentCheckbox(childCheckbox) {
@@ -82,8 +83,9 @@ function updateParentCheckbox(childCheckbox) {
let allChecked = allChildren.length === checkedChildren.length;
let anyChecked = checkedChildren.length > 0;
parentCheckbox.prop('checked', allChecked);
parentCheckbox.prop('indeterminate', !allChecked && anyChecked);
//parentCheckbox.prop('checked', allChecked);
//parentCheckbox.prop('indeterminate', !allChecked && anyChecked);
parentCheckbox.prop('indeterminate', !allChecked);
parentLi = parentLi.parent().closest('li');
}
@@ -257,15 +259,15 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 2000);
loading.hide();
$('#MainModal').modal('hide');
if (hasRole) {
LoadRolesAndAccountsList();
} else {
window.location.reload();
}
}, 2000);
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);

View File

@@ -114,8 +114,10 @@ $('#NationalCode ').on('keyup', function () {
data: { nationalCode: nationalCodeValue },
success: function (response) {
if (response.success) {
if (response.data.fName != null) {
$('#FName ').val(response.data.fName);
$('#LName ').val(response.data.lName);
}
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);
@@ -383,10 +385,10 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 2000);
loading.hide();
$('#MainModal').modal('hide');
// Load Roles with its Sub Accounts in Index page
LoadRolesAndAccountsList();
} else {

View File

@@ -28,6 +28,9 @@
$('#MainModal').on('show.bs.modal', function () {
$(document).off('click', '#tree .togglePermission').on('click', '#tree .togglePermission', function (e) {
e.stopPropagation();
if ($(e.target).is('input[type="checkbox"]')) {
return;
}
let parentLi = $(this).closest('li');
parentLi.children('ul').slideToggle();
$(this).toggleClass('open');
@@ -80,8 +83,9 @@ function updateParentCheckbox(childCheckbox) {
let allChecked = allChildren.length === checkedChildren.length;
let anyChecked = checkedChildren.length > 0;
parentCheckbox.prop('checked', allChecked);
parentCheckbox.prop('indeterminate', !allChecked && anyChecked);
//parentCheckbox.prop('checked', allChecked);
//parentCheckbox.prop('indeterminate', !allChecked && anyChecked);
parentCheckbox.prop('indeterminate', !allChecked);
parentLi = parentLi.parent().closest('li');
}
@@ -100,16 +104,16 @@ function ajaxPermissionsList() {
if (listPermission.length > 0) {
permissionListHtml += `<ul>`;
listPermission.forEach(function (sub1Item) {
listPermission.forEach(function(sub1Item) {
permissionListHtml += `<li>
<div class="li-tree-main li-tree">
<div class="li-tree-main li-tree togglePermission">
<div>
<input value="${sub1Item.code}" name="Permissions" type="checkbox" class="node-checkbox form-check-input">
<span class="node-label">${sub1Item.title}</span>
</div>`;
if (sub1Item.children.length > 0) {
permissionListHtml += `<span class="togglePermission">
permissionListHtml += `<span class="">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 18L9 12L15 6" stroke-width="2" stroke-linecap="round" />
</svg>
@@ -120,15 +124,15 @@ function ajaxPermissionsList() {
if (sub1Item.children.length > 0) {
permissionListHtml += `<ul>`;
sub1Item.children.forEach(function (sub2Item) {
sub1Item.children.forEach(function(sub2Item) {
permissionListHtml += `<li>
<div class="li-tree li-tree-main-second">
<div class="li-tree li-tree-main-second togglePermission">
<div>
<input value="${sub2Item.code}" name="Permissions" type="checkbox" class="node-checkbox form-check-input">
<span class="node-label">${sub2Item.title}</span>
</div>`;
if (sub2Item.children.length > 0) {
permissionListHtml += `<span class="togglePermission">
permissionListHtml += `<span class="">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 18L9 12L15 6" stroke-width="2" stroke-linecap="round" />
</svg>
@@ -139,15 +143,15 @@ function ajaxPermissionsList() {
if (sub2Item.children.length > 0) {
permissionListHtml += `<ul>`;
sub2Item.children.forEach(function (sub3Item) {
sub2Item.children.forEach(function(sub3Item) {
permissionListHtml += `<li>
<div class="li-tree">
<div class="li-tree togglePermission">
<div>
<input value="${sub3Item.code}" name="Permissions" type="checkbox" class="node-checkbox form-check-input">
<span class="node-label">${sub3Item.title}</span>
</div>`;
if (sub3Item.children.length > 0) {
permissionListHtml += `<span class="togglePermission">
permissionListHtml += `<span class="">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 18L9 12L15 6" stroke-width="2" stroke-linecap="round" />
</svg>
@@ -158,7 +162,7 @@ function ajaxPermissionsList() {
if (sub3Item.children.length > 0) {
permissionListHtml += `<ul>`;
sub3Item.children.forEach(function (sub4Item) {
sub3Item.children.forEach(function(sub4Item) {
permissionListHtml += `<li>
<div class="li-tree">
<div>
@@ -226,9 +230,9 @@ function updateParentCheckbox(childCheckbox) {
let allChecked = childCheckboxes.length === checkedChildren.length;
let anyChecked = checkedChildren.length > 0;
parentCheckbox.prop('checked', allChecked);
//parentCheckbox.prop('checked', allChecked);
parentCheckbox.prop('indeterminate', !allChecked && anyChecked);
//parentCheckbox.prop('indeterminate', !allChecked);
parentLi = parentLi.parent().closest('li');
}
}
@@ -292,10 +296,10 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 2000);
loading.hide();
$('#MainModal').modal('hide');
LoadRolesAndAccountsList();
} else {
$('.alert-msg').show();

View File

@@ -270,10 +270,10 @@ function SaveDataAjax() {
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
loading.hide();
$('#MainModal').modal('hide');
}, 2000);
loading.hide();
$('#MainModal').modal('hide');
// Load Roles with its Sub Accounts in Index page
LoadRolesAndAccountsList();
} else {

View File

@@ -352,10 +352,10 @@ function LoadRolesAndAccountsList() {
});
htmlRole += `
<li id="hideCircle">
<div class="d-flex alien-items-center justify-content-between"></div>
</li>`;
//htmlRole += `
//<li id="hideCircle">
// <div class="d-flex alien-items-center justify-content-between"></div>
// </li>`;
$('#loadDataRole').html(htmlRole);
$('#subAccountListAjax').html(htmlSubAccounts);