task full updated - fixed connectedPersonnel

This commit is contained in:
samsys
2024-07-10 20:25:54 +03:30
parent 39768f8074
commit aafafa27ce
123 changed files with 21086 additions and 1384 deletions

View File

@@ -11,7 +11,7 @@ public static class Version
static Version()
{
StyleVersion = "2.11.24";
AdminVersion = "2.5.8";
AdminVersion = "2.5.9";
CameraVersion = "1.0.3";
}

View File

@@ -9,5 +9,6 @@
public string RoleName { get; set; }
public string VerifyCode { get; set; }
public string IsActiveString { get; set; }
public string positionId { get; set; }
}
}

View File

@@ -20,7 +20,7 @@ namespace AccountManagement.Application.Contracts.Account
#region Mahan
public int PositionValue { get; set; }
public long PositionId { get; set; }
#endregion
}
}

View File

@@ -29,12 +29,12 @@ namespace AccountManagement.Application.Contracts.Account
OperationResult DirectLogin(long id);
#region Mahan
List<AccountViewModel> AccountsForAssign(long accountId);
List<AccountViewModel> GetAccountsByPositionId(long positionId);
List<AccountViewModel> GetAccountLowerPositionvalue();
OperationResult ReLogin();
#endregion
}
#endregion
}
}

View File

@@ -5,4 +5,5 @@ public class MediaViewModel
public long Id { get; set; }
public string Path { get; set; }
public string Type { get; set; }
public string Category { get; set; }
}

View File

@@ -0,0 +1,10 @@
using System.Collections.Generic;
using AccountManagement.Application.Contracts.Account;
namespace AccountManagement.Application.Contracts.Position;
public class AddAccountToPositionPartialViewModel
{
public List<AccountViewModel> Accounts { get; set; }
public long PositionId { get; set; }
}

View File

@@ -1,4 +1,4 @@
namespace TaskManager.Application.Contract.Position;
namespace AccountManagement.Application.Contracts.Position;
public class CreatePosition
{

View File

@@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace AccountManagement.Application.Contracts.Position;
public class CreatePositionModalViewModel
{
public int LastPositionValue { get; set; }
public List<int> UnUsedPositionValue { get; set; }
}

View File

@@ -1,4 +1,4 @@
namespace TaskManager.Application.Contract.Position;
namespace AccountManagement.Application.Contracts.Position;
public class EditPosition:CreatePosition
{

View File

@@ -2,14 +2,15 @@
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
namespace TaskManager.Application.Contract.Position;
namespace AccountManagement.Application.Contracts.Position;
public interface IPositionApplication
{
OperationResult Create(CreatePosition command);
OperationResult SaveAccountPosition(List<AccountViewModel> command, long positionId);
OperationResult SaveAccountPosition(List<long> accountIds, long positionId);
List<AccountViewModel> GetNoPositionAccounts();
OperationResult Remove(long id);
List<int> GetUnUsedPositionValues();
OperationResult Remove(long id);
OperationResult Edit(EditPosition command);
List<PositionViewModel> GetPositions();
OperationResult Save();
@@ -17,4 +18,5 @@ public interface IPositionApplication
OperationResult RemoveAccountListFromPosition(List<long> accountIdList, long PositionId);
List<PositionViewModel> GetLowerPosition();
int GetLastPositionValue();
}

View File

@@ -1,6 +1,6 @@
namespace TaskManager.Application.Contract.Position;
namespace AccountManagement.Application.Contracts.Position;
public class PositionViewModel:EditPosition
{
public int CountUsers { get; set; }
}

View File

@@ -1,5 +1,4 @@
#nullable enable
namespace AccountManagement.Application.Contracts.Task;
namespace AccountManagement.Application.Contracts.Task;
public class CompleteTaskViewModel
{

View File

@@ -1,5 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
namespace AccountManagement.Application.Contracts.Task;

View File

@@ -6,4 +6,7 @@ public class EditTask:CreateTask
{
public long Id { get; set; }
public List<MediaViewModel> medias { get; set; }
public string? CompleteDescription { get; set; }
public bool IsDone { get; set; }
public List<long> DeletedFileIds { get; set; }
}

View File

@@ -0,0 +1,11 @@
using System.Collections.Generic;
using AccountManagement.Application.Contracts.Account;
namespace AccountManagement.Application.Contracts.Task;
public class EditTaskPartialViewModel
{
public EditTask EditTask { get; set; }
public List<AccountViewModel> AccountList { get; set; }
public long Id { get; set; }
}

View File

@@ -29,10 +29,16 @@ public interface ITaskApplication
OperationResult AcceptCancelRequest(long taskId);
OperationResult RejectCancelRequest(long taskId);
OperationResult CompleteTask(CompleteTaskViewModel command);
OperationResult CreateCompleteTaskRequest(CompleteTaskViewModel command);
OperationResult AcceptCompleteRequest(long taskId);
OperationResult RejectCompleteRequest(long taskId);
OperationResult CreateTaskByPosition(CreateTask command, List<long> positionIds);
List<TaskViewModel> GetAllRequestedTasks(TaskSearchModel searchModel);
int GetRequestedTasksCount();
OperationResult ChangeRequestTimeAndAccept(string time,long taskId);
TaskViewModel GetRequestDetails(long id);
}

View File

@@ -0,0 +1,9 @@
namespace AccountManagement.Application.Contracts.Task;
public class OperationModalTaskRequest
{
public string Time { get; set; }
public string Description{ get; set; }
}

View File

@@ -12,6 +12,8 @@ public class OperationModalViewModel
public CreateTaskCancel CreateTaskCancel { get; set; }
public CreateTaskTimeRequest CreateTaskTimeRequest { get; set; }
public CompleteTaskViewModel CompleteTaskViewModel { get; set; }
public TaskViewModel ModalTaskRequest { get; set; }
public string Type { get; set; }
}

View File

@@ -6,6 +6,7 @@ public class TaskSearchModel
public string StartDate { get; set; }
public string EndDate { get; set; }
public long AccountId { get; set; }
public string IsDoneRequest { get; set; }
public string IsDone { get; set; }
public string IsCanceled { get; set; }
public string IsCancelRequest { get; set; }
@@ -13,4 +14,5 @@ public class TaskSearchModel
public string TimeRequestAccepted { get; set; }
public string TypeOfTicket { get; set; }
}

View File

@@ -17,13 +17,21 @@ public class TaskViewModel
public string CreateDate { get; set; }
public string EndTaskDateFA { get; set; }
public string EndTaskTime { get; set; }
public string RequestTaskDate { get; set; }
public bool IsDone { get; set; }
public bool RequestCancel { get; set; }
public bool IsDoneRequest { get; set; }
public string IsDoneDescription { get; set; }
public bool RequestCancel { get; set; }
public bool RequestTime { get; set; }
public bool IsCancel { get; set; }
public bool IsCancelRequest { get; set; }
public string CancelDescription { get; set; }
public int AcceptedTimeRequest { get; set; }
public DateTime EndTaskDateGE { get; set; }
public string TimeRequestDescription { get; set; }
public DateTime EndTaskDateGE { get; set; }
public DateTime CreateTaskDateGE { get; set; }
public string ContractingPartyName { get; set; }
public string? Description { get; set; }

View File

@@ -8,5 +8,5 @@ public interface ITaskSubjectApplication
OperationResult Create(string subject);
OperationResult Edit(TaskSubjectViewModel command);
OperationResult Delete(long id);
List<TaskSubjectViewModel> GetAll();
List<TaskSubjectViewModel> GetAll(string search);
}

View File

@@ -0,0 +1,11 @@
using System.Collections.Generic;
using AccountManagement.Application.Contracts.Media;
namespace AccountManagement.Application.Contracts.Ticket;
public class AdminResponseViewModel
{
public long TicketId { get; set; }
public string Response { get; set; }
public List<MediaViewModel> MediaViewModels { get; set; }
}

View File

@@ -0,0 +1,9 @@
using AccountManagement.Application.Contracts.Task;
namespace AccountManagement.Application.Contracts.Ticket;
public class AssignTicket : CreateTask
{
public long TicketId { get; set; }
}

View File

@@ -0,0 +1,6 @@
namespace AccountManagement.Application.Contracts.Ticket;
public class ClientResponseViewModel : AdminResponseViewModel
{
}

View File

@@ -0,0 +1,20 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
namespace AccountManagement.Application.Contracts.Ticket;
public class CreateTicket
{
public string Title { get; set; }
public string Description { get; set; }
public long SenderId { get; set; }
public string ContractingPartyName { get; set; }
public string TicketType { get; set; }
public IFormFile Document1 { get; set; }
public IFormFile Document2 { get; set; }
public IFormFile Document3 { get; set; }
public IFormFile Document4 { get; set; }
public IFormFile Document5 { get; set; }
public IFormFile ScreenShot { get; set; }
public IFormFile Voice { get; set; }
}

View File

@@ -0,0 +1,10 @@
using System.Collections.Generic;
using AccountManagement.Application.Contracts.Media;
namespace AccountManagement.Application.Contracts.Ticket;
public class EditTicket:CreateTicket
{
public long Id { get; set; }
public List<MediaViewModel> MediaViewModels { get; set; }
}

View File

@@ -0,0 +1,17 @@
using System.Collections.Generic;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Task;
namespace AccountManagement.Application.Contracts.Ticket;
public interface ITicketApplication
{
OperationResult CreateTicket(CreateTicket command);
OperationResult AssignTicket(CreateTask command, long ticketId);
OperationResult CompleteTicket(long id);
OperationResult AdminResponseTicket(ResponseTicket command);
OperationResult ClientResponseTicket(ResponseTicket command);
EditTicket GetDetails(long id);
List<TicketViewModel> GetAll(TicketSearchModel searchModel);
bool IsExist(long id);
}

View File

@@ -0,0 +1,16 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
namespace AccountManagement.Application.Contracts.Ticket;
public class ResponseTicket
{
public long TicketId { get; set; }
public string Response { get; set; }
public IFormFile Document1 { get; set; }
public IFormFile Document2 { get; set; }
public IFormFile Document3 { get; set; }
public IFormFile Document4 { get; set; }
public IFormFile Document5 { get; set; }
public IFormFile Document6 { get; set; }
public IFormFile Voice { get; set; }
}

View File

@@ -0,0 +1,21 @@
namespace AccountManagement.Application.Contracts.Ticket;
public class TicketSearchModel
{
public string StartDate { get; set; }
public string EndDate { get; set; }
public string ContractingPartyName { get; set; }
public string OneDay { get; set; }
public string IsAssigned { get; set; }
public string TypeOfTicket { get; set; }
public string Title { get; set; }
public string Status { get; set; }
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace AccountManagement.Application.Contracts.Ticket;
public class TicketViewModel:EditTicket
{
public List<AdminResponseViewModel> AdminResponseViewModels { get; set; }
public List<ClientResponseViewModel> ClientResponseViewModels { get; set; }
public string Status { get; set; }
public string CreationDateTime { get; set; }
public DateTime CreationDateTimeGr { get; set; }
public long? TaskId { get; set; }
}

View File

@@ -422,4 +422,28 @@ public class AccountApplication : IAccountApplication
{
return _accountRepository.GetAccountLowerPositionvalue();
}
public OperationResult ReLogin()
{
var prAcc = _authHelper.CurrentAccountInfo();
var operation = new OperationResult();
var account = _accountRepository.GetIncludePositions(prAcc.Id);
if (account == null)
return operation.Failed("این اکانت وجود ندارد");
var permissions = _roleRepository.Get(account.RoleId)
.Permissions
.Select(x => x.Code)
.ToList();
_authHelper.SignOut();
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, account.AdminAreaPermission, account.ClientAriaPermission, account.Position.PositionValue);
_authHelper.Signin(authViewModel);
return operation.Succcedded(2);
}
}

View File

@@ -1,9 +1,8 @@
using System.Collections.Generic;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Domain.AccountAgg;
using TaskManager.Application.Contract.Position;
using TaskManager.Domain.PositionAgg;
namespace TaskManager.Application;
@@ -52,7 +51,7 @@ public class PositionApplication:IPositionApplication
return operation.Succcedded(position.id);
}
//ذخیره لیست پرسنل برای سمت خود
public OperationResult SaveAccountPosition(List<AccountViewModel> command, long positionId)
public OperationResult SaveAccountPosition(List<long> accountIds, long positionId)
{
var operation = new OperationResult();
if (!_positionRepository.Exists(x=>x.id==positionId))
@@ -60,14 +59,14 @@ public class PositionApplication:IPositionApplication
return operation.Failed("چنین سمتی وجود ندارد");
}
if (command.Count<1)
if (accountIds.Count<1)
{
return operation.Failed("لطفا شخصی برای ذخیره انتخاب کنید");
}
foreach (var accountViewModel in command)
foreach (var id in accountIds)
{
var account = _accountRepository.Get(accountViewModel.Id);
var account = _accountRepository.Get(id);
account.SetPosition(positionId);
}
_accountRepository.SaveChanges();
@@ -79,6 +78,11 @@ public class PositionApplication:IPositionApplication
return _positionRepository.GetNoPositionAccounts();
}
public List<int> GetUnUsedPositionValues()
{
return _positionRepository.GetUnUsedPositionValues();
}
public OperationResult Remove(long id)
{
var operation = new OperationResult();

File diff suppressed because it is too large Load Diff

View File

@@ -73,8 +73,8 @@ public class TaskSubjectApplication : ITaskSubjectApplication
}
}
public List<TaskSubjectViewModel> GetAll()
public List<TaskSubjectViewModel> GetAll(string search)
{
return _taskSubjectRepository.GetAll();
return _taskSubjectRepository.GetAll(search);
}
}

View File

@@ -0,0 +1,768 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Domain.AccountAgg;
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.AssignAgg;
using AccountManagement.Domain.ClientResponseAgg;
using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.TaskAgg;
using AccountManagement.Domain.TicketAgg;
namespace AccountManagement.Application;
public class TicketApplication : ITicketApplication
{
private readonly ITicketRepository _ticketRepository;
private readonly IAccountRepository _accountRepository;
private readonly ITaskRepository _taskRepository;
private readonly IAssignRepository _assignRepository;
private readonly IMediaRepository _mediaRepository;
public TicketApplication(ITicketRepository ticketRepository, IAccountRepository accountRepository, ITaskRepository taskRepository, IAssignRepository assignRepository, IMediaRepository mediaRepository)
{
_ticketRepository = ticketRepository;
_accountRepository = accountRepository;
_taskRepository = taskRepository;
_assignRepository = assignRepository;
_mediaRepository = mediaRepository;
}
public OperationResult CreateTicket(CreateTicket command)
{
var operation = new OperationResult();
if (string.IsNullOrWhiteSpace(command.ContractingPartyName))
{
return operation.Failed("خطای سیستمی");
}
if (string.IsNullOrWhiteSpace(command.Title))
{
return operation.Failed("لطفا عنوان را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.Description))
{
return operation.Failed("لطفا توضیحات خودرا وارد کنید");
}
var ticket = new Ticket(command.Title, command.Description, command.SenderId, command.ContractingPartyName,
command.TicketType);
_ticketRepository.Create(ticket);
_ticketRepository.SaveChanges();
#region SaveDocuments
if ((command.Document1?.Length > 5000000) || (command.Document2?.Length > 5000000) || (command.Document3?.Length > 5000000) || (command.Document4?.Length > 5000000)
|| (command.Document5?.Length > 5000000))
return operation.Failed("حجم فایل نمیتواند از 5 مگابایت بیشتر باشد");
if (command.Document1?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Ticket", $"{ticket.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document1.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document1.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateTicketMedia(ticket.id, media.id);
}
if (command.Document2?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Ticket", $"{ticket.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document2.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document2.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateTicketMedia(ticket.id, media.id);
}
if (command.Document3?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Ticket", $"{ticket.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document3.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document3.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateTicketMedia(ticket.id, media.id);
}
if (command.Document4?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Ticket", $"{ticket.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document4.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document4.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateTicketMedia(ticket.id, media.id);
}
if (command.Document5?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Ticket", $"{ticket.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document5.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document5.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateTicketMedia(ticket.id, media.id);
}
if (command.ScreenShot?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Ticket", $"{ticket.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.ScreenShot.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.ScreenShot.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateTicketMedia(ticket.id, media.id);
}
#endregion
#region SaveVoice
if (command.Voice?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Ticket", $"{ticket.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Voice.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Voice.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateTicketMedia(ticket.id, media.id);
}
#endregion
_mediaRepository.SaveChanges();
return operation.Succcedded(ticket.id);
}
public OperationResult AssignTicket(CreateTask command, long ticketId)
{
var operation = new OperationResult();
if (string.IsNullOrEmpty(command.Title))
{
return operation.Failed("لطفا عنوان وظیفه خود ار وارد کنید");
}
if (string.IsNullOrEmpty(command.EndTaskDate))
{
return operation.Failed("لطفا تاریخ انجام وظیفه را وارد کنید");
}
if (string.IsNullOrEmpty(command.ContractingPartyName))
{
return operation.Failed("لطفا طرف حساب خودرا وارد کنید");
}
if (command.SenderId < 1)
{
return operation.Failed("خطای سیستمی!!!");
}
var sender = _accountRepository.GetIncludePositions(command.SenderId);
if (command.ReceiverId.Count < 1)
{
return operation.Failed("طرف وظیفه خود را وارد کنید");
}
var receivers = _accountRepository.GetAccountsByIds(command.ReceiverId);
if (sender.Position.PositionValue == 1)
{
}
else if (receivers.Any(x => sender.Position.PositionValue >= x.Position.PositionValue))
{
var checkReceiver = receivers.Where(x => sender.Position.PositionValue >= x.Position.PositionValue).ToList();
if (checkReceiver.All(x => x.id == sender.id))
{
}
else
{
return operation.Failed("شما نمیتوانید به سطح بالاتر خود یا هم سطح خود وظیفه ای دهید");
}
}
else if (receivers.Count == 1 && receivers.Any(x => sender.id == x.id))
{
}
var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) ? command.EndTaskDate.ToGeorgianDateTime2() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime);
var task = new Tasks(command.Title, endTask, command.Description, command.SenderId, command.ContractingPartyName, ticketId);
_taskRepository.Create(task);
_assignRepository.SaveChanges();
foreach (var receiver in receivers)
{
var assign = new Assign(task.id, task.SenderId, receiver.id, sender.Position.PositionValue, receiver.Fullname,
receiver.Position.PositionValue);
_assignRepository.Create(assign);
}
#region SaveMedias
#region SaveDocuments
if ((command.Document1?.Length > 5000000) || (command.Document2?.Length > 5000000) || (command.Document3?.Length > 5000000) || (command.Document4?.Length > 5000000)
|| (command.Document5?.Length > 5000000) || (command.Document6?.Length > 5000000))
return operation.Failed("حجم فایل نمیتواند از 5 مگابایت بیشتر باشد");
if (command.Document1?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Task", $"{task.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document1.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document1.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateMediaWithTaskMedia(task.id, media.id);
}
if (command.Document2?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Task", $"{task.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document2.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document2.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateMediaWithTaskMedia(task.id, media.id);
}
if (command.Document3?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Task", $"{task.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document3.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document3.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateMediaWithTaskMedia(task.id, media.id);
}
if (command.Document4?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Task", $"{task.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document4.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document4.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateMediaWithTaskMedia(task.id, media.id);
}
if (command.Document5?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Task", $"{task.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document5.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document5.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateMediaWithTaskMedia(task.id, media.id);
}
if (command.Document6?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Task", $"{task.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document6.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document6.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateMediaWithTaskMedia(task.id, media.id);
}
#endregion
#region SaveVoice
if (command.Voice?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"Task", $"{task.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Voice.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Voice.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "صوت");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateMediaWithTaskMedia(task.id, media.id);
}
#endregion
#endregion
_taskRepository.SaveChanges();
return operation.Succcedded(task.id);
}
public OperationResult CompleteTicket(long id)
{
var operation = new OperationResult();
if (!_ticketRepository.Exists(x => x.id == id))
{
return operation.Failed("چنین تیکتی وجود ندارد");
}
var ticket = _ticketRepository.Get(id);
ticket.Completed();
_ticketRepository.SaveChanges();
return operation.Succcedded(ticket.id);
}
public OperationResult AdminResponseTicket(ResponseTicket command)
{
var operation = new OperationResult();
if (string.IsNullOrWhiteSpace(command.Response))
{
return operation.Failed("لطفا پیغام خود را وارد کنبد");
}
var adminRes = new AdminResponse(command.Response, command.TicketId);
_ticketRepository.CreateAdminResponse(adminRes);
_ticketRepository.SaveChanges();
#region SaveDocuments
if ((command.Document1?.Length > 5000000) || (command.Document2?.Length > 5000000) || (command.Document3?.Length > 5000000) || (command.Document4?.Length > 5000000)
|| (command.Document5?.Length > 5000000) || (command.Document6?.Length > 5000000))
return operation.Failed("حجم فایل نمیتواند از 5 مگابایت بیشتر باشد");
if (command.Document1?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketAdminResponse", $"{adminRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document1.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document1.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateAdminResponseMedia(adminRes.id, media.id);
}
if (command.Document2?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketAdminResponse", $"{adminRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document2.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document2.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateAdminResponseMedia(adminRes.id, media.id);
}
if (command.Document3?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketAdminResponse", $"{adminRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document3.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document3.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateAdminResponseMedia(adminRes.id, media.id);
}
if (command.Document4?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketAdminResponse", $"{adminRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document4.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document4.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateAdminResponseMedia(adminRes.id, media.id);
}
if (command.Document5?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketAdminResponse", $"{adminRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document5.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document5.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateAdminResponseMedia(adminRes.id, media.id);
}
if (command.Document6?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost",
"Storage",
"TicketAdminResponse", $"{adminRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document6.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document6.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateAdminResponseMedia(adminRes.id, media.id);
}
#endregion
_mediaRepository.SaveChanges();
return operation.Succcedded(adminRes.id);
}
public OperationResult ClientResponseTicket(ResponseTicket command)
{
var operation = new OperationResult();
if (string.IsNullOrWhiteSpace(command.Response))
{
return operation.Failed("لطفا پیغام خود را وارد کنبد");
}
var clientRes = new ClientResponse(command.Response, command.TicketId);
_ticketRepository.CreateClientResponse(clientRes);
_ticketRepository.SaveChanges();
#region SaveDocuments
if ((command.Document1?.Length > 5000000) || (command.Document2?.Length > 5000000) || (command.Document3?.Length > 5000000) || (command.Document4?.Length > 5000000)
|| (command.Document5?.Length > 5000000) || (command.Document6?.Length > 5000000))
return operation.Failed("حجم فایل نمیتواند از 5 مگابایت بیشتر باشد");
if (command.Document1?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketClientResponse", $"{clientRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document1.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document1.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateClientResponseMedia(clientRes.id, media.id);
}
if (command.Document2?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketClientResponse", $"{clientRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document2.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document2.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateClientResponseMedia(clientRes.id, media.id);
}
if (command.Document3?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketClientResponse", $"{clientRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document3.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document3.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateClientResponseMedia(clientRes.id, media.id);
}
if (command.Document4?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketClientResponse", $"{clientRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document4.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document4.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateClientResponseMedia(clientRes.id, media.id);
}
if (command.Document5?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage",
"TicketClientResponse", $"{clientRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document5.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document5.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateClientResponseMedia(clientRes.id, media.id);
}
if (command.Document6?.Length > 0)
{
var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost",
"Storage",
"TicketClientResponse", $"{clientRes.id}");
Directory.CreateDirectory(path);
string filepath = Path.Combine(path, command.Document6.FileName);
using (var stream = new FileStream(filepath, FileMode.Create))
{
command.Document6.CopyTo(stream);
}
var type = Path.GetExtension(filepath);
var media = new Media(filepath, type, "فایل");
_mediaRepository.Create(media);
_mediaRepository.SaveChanges();
_mediaRepository.CreateClientResponseMedia(clientRes.id, media.id);
}
#endregion
_mediaRepository.SaveChanges();
return operation.Succcedded(clientRes.id);
}
public EditTicket GetDetails(long id)
{
return _ticketRepository.GetDetails(id);
}
public List<TicketViewModel> GetAll(TicketSearchModel searchModel)
{
return _ticketRepository.GetAll(searchModel);
}
public bool IsExist(long id)
{
return _ticketRepository.Exists(x => x.id == id);
}
}

View File

@@ -1,9 +1,11 @@
using AccountManagement.Application;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.CameraAccount;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Application.Contracts.Role;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.TaskSubject;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Domain.AccountAgg;
using AccountManagement.Domain.AssignAgg;
using AccountManagement.Domain.CameraAccountAgg;
@@ -11,11 +13,11 @@ using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.RoleAgg;
using AccountManagement.Domain.TaskAgg;
using AccountManagement.Domain.TaskSubjectAgg;
using AccountManagement.Domain.TicketAgg;
using AccountMangement.Infrastructure.EFCore;
using AccountMangement.Infrastructure.EFCore.Repository;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using TaskManager.Application.Contract.Position;
using TaskManager.Application;
using TaskManager.Domain.PositionAgg;
using TaskManager.Infrastructure.EFCore.Repository;
@@ -36,7 +38,6 @@ namespace AccountManagement.Configuration
services.AddTransient<ICameraAccountRepository, CameraAccountRepository>();
#region Mahan
services.AddTransient<IPositionRepository, PositionRepository>();
services.AddTransient<IPositionApplication, PositionApplication>();
@@ -50,6 +51,9 @@ namespace AccountManagement.Configuration
services.AddTransient<IMediaRepository, MediaRepository>();
services.AddTransient<ITicketRepository, TicketRepository>();
services.AddTransient<ITicketApplication, TicketApplication>();
#endregion

View File

@@ -0,0 +1,22 @@
using System.Collections.Generic;
using _0_Framework.Domain;
using AccountManagement.Domain.AdminResponseMediaAgg;
using AccountManagement.Domain.TicketAgg;
namespace AccountManagement.Domain.AdminResponseAgg;
public class AdminResponse:EntityBase
{
public AdminResponse(string response,long ticketId)
{
Response = response;
TicketId = ticketId;
}
public long TicketId { get; private set; }
public string Response { get; private set; }
public Ticket Ticket { get; set; }
public List<AdminResponseMedia> AdminResponseMedias { get; set; }
}

View File

@@ -0,0 +1,18 @@
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.MediaAgg;
namespace AccountManagement.Domain.AdminResponseMediaAgg;
public class AdminResponseMedia
{
public AdminResponseMedia(long adminResponseId, long mediaId)
{
AdminResponseId = adminResponseId;
MediaId = mediaId;
}
public long AdminResponseId { get; set; }
public long MediaId { get; set; }
public AdminResponse AdminResponse { get; set; }
public Media Media { get; set; }
}

View File

@@ -0,0 +1,21 @@
using System.Collections.Generic;
using _0_Framework.Domain;
using AccountManagement.Domain.ClientResponseMediaAgg;
using AccountManagement.Domain.TicketAgg;
namespace AccountManagement.Domain.ClientResponseAgg;
public class ClientResponse:EntityBase
{
public ClientResponse(string response, long ticketId)
{
Response = response;
TicketId = ticketId;
}
public long TicketId { get; private set; }
public string Response { get; private set; }
public Ticket Ticket { get; set; }
public List<ClientResponseMedia> ClientResponseMedias { get; set; }
}

View File

@@ -0,0 +1,19 @@
using AccountManagement.Domain.ClientResponseAgg;
using AccountManagement.Domain.MediaAgg;
namespace AccountManagement.Domain.ClientResponseMediaAgg;
public class ClientResponseMedia
{
public ClientResponseMedia(long clientResponseId, long mediaId)
{
ClientResponseId = clientResponseId;
MediaId = mediaId;
}
public long ClientResponseId { get; set; }
public long MediaId { get; set; }
public ClientResponse ClientResponse{ get; set; }
public Media Media { get; set; }
}

View File

@@ -10,4 +10,8 @@ public interface IMediaRepository:IRepository<long,Media>
void CreateMediaWithTaskMedia(long taskId, long mediaId);
List<MediaViewModel> GetMediaByTaskId(long taskId);
void Remove(long id);
void CreateTicketMedia(long ticketId, long mediaId);
void CreateAdminResponseMedia(long adminResponseId, long mediaId);
void CreateClientResponseMedia(long clientResponseId, long mediaId);
}

View File

@@ -1,6 +1,9 @@
using System.Collections.Generic;
using _0_Framework.Domain;
using AccountManagement.Domain.AdminResponseMediaAgg;
using AccountManagement.Domain.ClientResponseMediaAgg;
using AccountManagement.Domain.TaskMediaAgg;
using AccountManagement.Domain.TicketMediasAgg;
namespace AccountManagement.Domain.MediaAgg;
@@ -24,4 +27,7 @@ public class Media:EntityBase
//دسته بندی ذخیره فایل
public string Category { get; set; }
public List<TaskMedia> TaskMedias { get; set; }
public List<AdminResponseMedia> AdminResponseMedias { get; set; }
public List<ClientResponseMedia> ClientResponseMedias { get; set; }
public List<TicketMedia> TicketMedias { get; set; }
}

View File

@@ -1,8 +1,8 @@
using System.Collections.Generic;
using _0_Framework.Domain;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Domain.AccountAgg;
using TaskManager.Application.Contract.Position;
namespace TaskManager.Domain.PositionAgg;
@@ -11,6 +11,7 @@ public interface IPositionRepository : IRepository<long, Position>
List<PositionViewModel> GetPositions();
List<PositionViewModel> GetLowerPosition();
List<int> GetUnUsedPositionValues();
List<AccountViewModel> GetNoPositionAccounts();
List<Account> GetAccountsByIds(List<long> ids);

View File

@@ -13,8 +13,11 @@ public interface ITaskRepository:IRepository<long,Tasks>
//گرفتن تمامی وظایف
List<TaskViewModel> GetTasks(TaskSearchModel searchModel);
List<TaskViewModel> GetAllRequestedTasks(TaskSearchModel searchModel);
string SetTasksColors(DateTime time);
string SetTasksColors(DateTime time,bool isCancel);
int GetRequestedTasksCount();
TaskViewModel GetRequestDetails(long id);
}

View File

@@ -47,18 +47,33 @@ public class Tasks : EntityBase
//توضیحات درخواست انصراف
public string? CancelDescription { get; private set; }
public bool IsDone { get; private set; }
public bool IsDoneRequest { get; private set; }
public string? DoneDescription { get; private set; }
public string IsActiveString { get; private set; }
public List<Assign> Assigns { get; set; }
public List<TaskMedia> TaskMedias { get; set; }
public long? TicketId { get; set; }
public void Edit(string title, DateTime endTaskDate, string? description, long senderId)
public Tasks(string title, DateTime endTaskDate, string? description, long senderId, string contractingPartyName, long ticketId)
{
Title = title;
EndTaskDate = endTaskDate;
Description = description;
SenderId = senderId;
ContractingPartyName = contractingPartyName;
StartTaskDate = DateTime.Now;
IsActiveString = "true";
TicketId = ticketId;
}
public void Edit(string title, DateTime endTaskDate, string? description, long senderId, string contractingPartyName)
{
Title = title;
EndTaskDate = endTaskDate;
Description = description;
SenderId = senderId;
ContractingPartyName= contractingPartyName;
}
@@ -104,9 +119,20 @@ public class Tasks : EntityBase
IsCanceledRequest = false;
}
public void Completed(string? doneDescription)
public void CompleteRequest(string? doneDescription)
{
DoneDescription = doneDescription;
IsDoneRequest = true;
}
public void RejectCompleteRequest()
{
IsDoneRequest = false;
DoneDescription=null;
}
public void Completed()
{
IsDoneRequest = false;
IsDone=true;
}
@@ -121,7 +147,13 @@ public class Tasks : EntityBase
}
public void ChangeTimeTask(DateTime time)
{
EndTaskDate = time;
AcceptedTimeRequest++;
RequestDate = null;
TimeRequest = false;
}
}

View File

@@ -6,6 +6,6 @@ namespace AccountManagement.Domain.TaskSubjectAgg;
public interface ITaskSubjectRepository:IRepository<long, TaskSubject>
{
List<TaskSubjectViewModel> GetAll();
List<TaskSubjectViewModel> GetAll(string search);
void Remove(long id);
}

View File

@@ -0,0 +1,17 @@
using System.Collections.Generic;
using _0_Framework.Domain;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.ClientResponseAgg;
namespace AccountManagement.Domain.TicketAgg;
public interface ITicketRepository:IRepository<long,Ticket>
{
List<TicketViewModel> GetAll(TicketSearchModel searchModel);
void CreateAdminResponse(AdminResponse command);
void CreateClientResponse(ClientResponse command);
EditTicket GetDetails(long id);
}

View File

@@ -0,0 +1,42 @@
using System.Collections.Generic;
using _0_Framework.Domain;
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.ClientResponseAgg;
using AccountManagement.Domain.TicketMediasAgg;
namespace AccountManagement.Domain.TicketAgg;
public class Ticket:EntityBase
{
public Ticket(string title, string description, long senderId, string contractingPartyName, string ticketType)
{
Title = title;
Description = description;
Status = "درحال بررسی";
SenderId = senderId;
ContractingPartyName = contractingPartyName;
TicketType = ticketType;
}
public string Title { get; private set; }
public string Description { get; private set; }
public string TicketType { get; set; }
public string Status { get; private set; }
public long SenderId { get; private set; }
public string ContractingPartyName { get; private set; }
public long? TaskId { get; private set; }
public List<ClientResponse> ClientResponses { get; set; }
public List<AdminResponse> AdminResponses{ get; set; }
public List<TicketMedia> TicketMedias { get; set; }
public void Completed()
{
Status = "بسته شده";
}
public void Responded()
{
Status = "پاسخ داده شده";
}
}

View File

@@ -0,0 +1,19 @@
using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.TicketAgg;
namespace AccountManagement.Domain.TicketMediasAgg;
public class TicketMedia
{
public TicketMedia(long ticketId, long mediaId)
{
TicketId = ticketId;
MediaId = mediaId;
}
public long TicketId { get; set; }
public long MediaId { get; set; }
public Ticket Ticket { get; set; }
public Media Media { get; set; }
}

View File

@@ -10,6 +10,12 @@ 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.TicketAgg;
using AccountManagement.Domain.TicketMediasAgg;
namespace AccountMangement.Infrastructure.EFCore
{
@@ -29,6 +35,13 @@ namespace AccountMangement.Infrastructure.EFCore
public DbSet<TaskMedia> TaskMedias { get; set; }
public DbSet<TaskSubject> TaskSubjects { get; set; }
public DbSet<AdminResponse> AdminResponses { get; set; }
public DbSet<AdminResponseMedia> AdminResponseMedias { get; set; }
public DbSet<ClientResponse> ClientResponses { get; set; }
public DbSet<ClientResponseMedia> ClientResponseMedias { get; set; }
public DbSet<Ticket> Tickets { get; set; }
public DbSet<TicketMedia> TicketMedias { get; set; }
#endregion
public AccountContext(DbContextOptions<AccountContext> options) : base(options)
{

View File

@@ -0,0 +1,22 @@
using AccountManagement.Domain.AdminResponseAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace AccountMangement.Infrastructure.EFCore.Mappings;
public class AdminResponseMapping : IEntityTypeConfiguration<AdminResponse>
{
public void Configure(EntityTypeBuilder<AdminResponse> builder)
{
builder.ToTable("AdminResponses");
builder.HasKey(x => x.id);
builder.Property(x => x.Response).HasColumnType("ntext");
builder.HasMany(x => x.AdminResponseMedias).WithOne(x => x.AdminResponse).HasForeignKey(x => x.AdminResponseId);
builder.HasOne(x => x.Ticket).WithMany(x => x.AdminResponses).HasForeignKey(x => x.TicketId);
}
}

View File

@@ -0,0 +1,18 @@
using AccountManagement.Domain.AdminResponseMediaAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace AccountMangement.Infrastructure.EFCore.Mappings;
public class AdminResponseMediaMapping:IEntityTypeConfiguration<AdminResponseMedia>
{
public void Configure(EntityTypeBuilder<AdminResponseMedia> builder)
{
builder.ToTable("AdminResponseMedias");
builder.HasKey(x => new { x.AdminResponseId, x.MediaId });
builder.HasOne(x => x.Media).WithMany(x => x.AdminResponseMedias).HasForeignKey(x => x.MediaId);
builder.HasOne(x => x.AdminResponse).WithMany(x => x.AdminResponseMedias).HasForeignKey(x => x.AdminResponseId);
}
}

View File

@@ -0,0 +1,20 @@
using AccountManagement.Domain.ClientResponseAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace AccountMangement.Infrastructure.EFCore.Mappings;
public class ClientResponseMapping:IEntityTypeConfiguration<ClientResponse>
{
public void Configure(EntityTypeBuilder<ClientResponse> builder)
{
builder.ToTable("ClientResponses");
builder.HasKey(x => x.id);
builder.Property(x => x.Response).HasColumnType("ntext");
builder.HasMany(x => x.ClientResponseMedias).WithOne(x => x.ClientResponse).HasForeignKey(x => x.ClientResponseId);
builder.HasOne(x => x.Ticket).WithMany(x => x.ClientResponses).HasForeignKey(x => x.TicketId);
}
}

View File

@@ -0,0 +1,18 @@
using AccountManagement.Domain.ClientResponseMediaAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace AccountMangement.Infrastructure.EFCore.Mappings;
public class ClientResponseMediaMapping:IEntityTypeConfiguration<ClientResponseMedia>
{
public void Configure(EntityTypeBuilder<ClientResponseMedia> builder)
{
builder.ToTable("ClientResponseMedias");
builder.HasKey(x => new { x.ClientResponseId, x.MediaId });
builder.HasOne(x => x.Media).WithMany(x => x.ClientResponseMedias).HasForeignKey(x => x.MediaId);
builder.HasOne(x => x.ClientResponse).WithMany(x => x.ClientResponseMedias).HasForeignKey(x => x.ClientResponseId);
}
}

View File

@@ -21,9 +21,10 @@ public class TaskMapping:IEntityTypeConfiguration<Tasks>
builder.Property(x => x.IsActiveString).HasMaxLength(7);
builder.Property(x => x.ContractingPartyName).HasMaxLength(200);
builder.Property(x => x.DoneDescription).IsRequired(false).HasColumnType("ntext");
builder.Property(x => x.TicketId).IsRequired(false);
builder.HasMany(x => x.Assigns).WithOne(x => x.Task).HasForeignKey(x => x.TaskId).IsRequired(false);
builder.HasMany(x => x.Assigns).WithOne(x => x.Task).HasForeignKey(x => x.TaskId).IsRequired(false).OnDelete(DeleteBehavior.Cascade);
}
}

View File

@@ -10,7 +10,10 @@ public class TasksMediaMapping:IEntityTypeConfiguration<TaskMedia>
builder.ToTable("TasksMedias");
builder.HasKey(x => new { x.MediaId, x.TaskId });
builder.HasOne(x => x.Media).WithMany(x => x.TaskMedias).HasForeignKey(x => x.MediaId);
builder.HasOne(x => x.Tasks).WithMany(x => x.TaskMedias).HasForeignKey(x => x.TaskId);
builder.HasOne(x => x.Media).WithMany(x => x.TaskMedias)
.HasForeignKey(x => x.MediaId).OnDelete(DeleteBehavior.Cascade);
builder.HasOne(x => x.Tasks).WithMany(x => x.TaskMedias)
.HasForeignKey(x => x.TaskId).OnDelete(DeleteBehavior.Cascade);
}
}

View File

@@ -0,0 +1,29 @@
using AccountManagement.Domain.TicketAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace AccountMangement.Infrastructure.EFCore.Mappings;
public class TicketMapping:IEntityTypeConfiguration<Ticket>
{
public void Configure(EntityTypeBuilder<Ticket> builder)
{
builder.HasKey(x => x.id);
builder.ToTable("Tickets");
builder.Property(x => x.TaskId).IsRequired(false);
builder.Property(x => x.ContractingPartyName).HasMaxLength(155);
builder.Property(x => x.TicketType).HasMaxLength(50);
builder.Property(x => x.Title).HasMaxLength(200);
builder.Property(x => x.Description).HasColumnType("ntext");
builder.Property(x => x.Status).HasMaxLength(30);
builder.HasMany(x => x.ClientResponses).WithOne(x => x.Ticket).HasForeignKey(x => x.TicketId);
builder.HasMany(x => x.TicketMedias).WithOne(x => x.Ticket).HasForeignKey(x => x.MediaId);
builder.HasMany(x => x.AdminResponses).WithOne(x => x.Ticket).HasForeignKey(x => x.TicketId);
}
}

View File

@@ -0,0 +1,19 @@
using AccountManagement.Domain.TicketMediasAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace AccountMangement.Infrastructure.EFCore.Mappings;
public class TicketMediasMapping:IEntityTypeConfiguration<TicketMedia>
{
public void Configure(EntityTypeBuilder<TicketMedia> builder)
{
builder.ToTable("TicketMedias");
builder.HasKey(x => new { x.TicketId, x.MediaId });
builder.HasOne(x => x.Media).WithMany(x => x.TicketMedias).HasForeignKey(x => x.MediaId);
builder.HasOne(x => x.Ticket).WithMany(x => x.TicketMedias).HasForeignKey(x => x.TicketId);
}
}

View File

@@ -0,0 +1,484 @@
// <auto-generated />
using System;
using AccountMangement.Infrastructure.EFCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
[DbContext(typeof(AccountContext))]
[Migration("20240701124238_setOnDeleteToCascadeInTaskTableWithAssign")]
partial class setOnDeleteToCascadeInTaskTableWithAssign
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("AdminAreaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("ClientAriaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Email")
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.Property<string>("Fullname")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("IsActiveString")
.HasMaxLength(6)
.HasColumnType("nvarchar(6)");
b.Property<string>("Mobile")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<string>("NationalCode")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<long?>("PositionId")
.HasMaxLength(10)
.HasColumnType("bigint");
b.Property<string>("ProfilePhoto")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<long>("RoleId")
.HasColumnType("bigint");
b.Property<string>("RoleName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("VerifyCode")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.HasKey("id");
b.HasIndex("PositionId");
b.HasIndex("RoleId");
b.ToTable("Accounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AssignedId")
.HasColumnType("bigint");
b.Property<string>("AssignedName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<int>("AssignedPositionValue")
.HasColumnType("int");
b.Property<long>("AssignerId")
.HasColumnType("bigint");
b.Property<int>("AssignerPositionValue")
.HasColumnType("int");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TaskId");
b.ToTable("Assigns", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AccountId")
.HasColumnType("bigint");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveSting")
.IsRequired()
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Mobile")
.HasMaxLength(11)
.HasColumnType("nvarchar(11)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<long>("WorkshopId")
.HasColumnType("bigint");
b.Property<string>("WorkshopName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.HasIndex("AccountId");
b.ToTable("CameraAccounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("Category")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Path")
.HasColumnType("ntext");
b.Property<string>("Type")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.HasKey("id");
b.ToTable("Medias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("Roles", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<int>("AcceptedTimeRequest")
.HasColumnType("int");
b.Property<string>("CancelDescription")
.HasColumnType("ntext");
b.Property<string>("ContractingPartyName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<string>("DoneDescription")
.HasColumnType("ntext");
b.Property<DateTime>("EndTaskDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveString")
.HasMaxLength(7)
.HasColumnType("nvarchar(7)");
b.Property<bool>("IsCancel")
.HasColumnType("bit");
b.Property<bool>("IsCanceledRequest")
.HasColumnType("bit");
b.Property<bool>("IsDone")
.HasColumnType("bit");
b.Property<DateTime?>("RequestDate")
.HasColumnType("datetime2");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<DateTime>("StartTaskDate")
.HasColumnType("datetime2");
b.Property<bool>("TimeRequest")
.HasColumnType("bit");
b.Property<string>("TimeRequestDescription")
.HasColumnType("ntext");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TasksManager", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("MediaId", "TaskId");
b.HasIndex("TaskId");
b.ToTable("TasksMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskSubjectAgg.TaskSubject", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Subject")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TaskSubjects", (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")
.WithMany("Accounts")
.HasForeignKey("PositionId");
b.HasOne("AccountManagement.Domain.RoleAgg.Role", "Role")
.WithMany("Accounts")
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Position");
b.Navigation("Role");
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Task")
.WithMany("Assigns")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Task");
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account")
.WithMany("CameraAccounts")
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.OwnsMany("AccountManagement.Domain.RoleAgg.Permission", "Permissions", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<int>("Code")
.HasColumnType("int");
b1.Property<long>("RoleId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("RoleId");
b1.ToTable("RolePermissions", (string)null);
b1.WithOwner("Role")
.HasForeignKey("RoleId");
b1.Navigation("Role");
});
b.Navigation("Permissions");
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TaskMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Tasks")
.WithMany("TaskMedias")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Tasks");
});
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Navigation("CameraAccounts");
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Navigation("TaskMedias");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Navigation("Assigns");
b.Navigation("TaskMedias");
});
modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,41 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
/// <inheritdoc />
public partial class setOnDeleteToCascadeInTaskTableWithAssign : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Assigns_TasksManager_TaskId",
table: "Assigns");
migrationBuilder.AddForeignKey(
name: "FK_Assigns_TasksManager_TaskId",
table: "Assigns",
column: "TaskId",
principalTable: "TasksManager",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Assigns_TasksManager_TaskId",
table: "Assigns");
migrationBuilder.AddForeignKey(
name: "FK_Assigns_TasksManager_TaskId",
table: "Assigns",
column: "TaskId",
principalTable: "TasksManager",
principalColumn: "id");
}
}
}

View File

@@ -0,0 +1,725 @@
// <auto-generated />
using System;
using AccountMangement.Infrastructure.EFCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
[DbContext(typeof(AccountContext))]
[Migration("20240702162847_InitialTicket")]
partial class InitialTicket
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("AdminAreaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("ClientAriaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Email")
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.Property<string>("Fullname")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("IsActiveString")
.HasMaxLength(6)
.HasColumnType("nvarchar(6)");
b.Property<string>("Mobile")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<string>("NationalCode")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<long?>("PositionId")
.HasMaxLength(10)
.HasColumnType("bigint");
b.Property<string>("ProfilePhoto")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<long>("RoleId")
.HasColumnType("bigint");
b.Property<string>("RoleName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("VerifyCode")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.HasKey("id");
b.HasIndex("PositionId");
b.HasIndex("RoleId");
b.ToTable("Accounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("AdminResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.Property<long>("AdminResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("AdminResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("AdminResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AssignedId")
.HasColumnType("bigint");
b.Property<string>("AssignedName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<int>("AssignedPositionValue")
.HasColumnType("int");
b.Property<long>("AssignerId")
.HasColumnType("bigint");
b.Property<int>("AssignerPositionValue")
.HasColumnType("int");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TaskId");
b.ToTable("Assigns", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AccountId")
.HasColumnType("bigint");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveSting")
.IsRequired()
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Mobile")
.HasMaxLength(11)
.HasColumnType("nvarchar(11)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<long>("WorkshopId")
.HasColumnType("bigint");
b.Property<string>("WorkshopName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.HasIndex("AccountId");
b.ToTable("CameraAccounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("ClientResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.Property<long>("ClientResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("ClientResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("ClientResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("Category")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Path")
.HasColumnType("ntext");
b.Property<string>("Type")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.HasKey("id");
b.ToTable("Medias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("Roles", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<int>("AcceptedTimeRequest")
.HasColumnType("int");
b.Property<string>("CancelDescription")
.HasColumnType("ntext");
b.Property<string>("ContractingPartyName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<string>("DoneDescription")
.HasColumnType("ntext");
b.Property<DateTime>("EndTaskDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveString")
.HasMaxLength(7)
.HasColumnType("nvarchar(7)");
b.Property<bool>("IsCancel")
.HasColumnType("bit");
b.Property<bool>("IsCanceledRequest")
.HasColumnType("bit");
b.Property<bool>("IsDone")
.HasColumnType("bit");
b.Property<DateTime?>("RequestDate")
.HasColumnType("datetime2");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<DateTime>("StartTaskDate")
.HasColumnType("datetime2");
b.Property<long?>("TicketId")
.HasColumnType("bigint");
b.Property<bool>("TimeRequest")
.HasColumnType("bit");
b.Property<string>("TimeRequestDescription")
.HasColumnType("ntext");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TasksManager", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("MediaId", "TaskId");
b.HasIndex("TaskId");
b.ToTable("TasksMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskSubjectAgg.TaskSubject", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Subject")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TaskSubjects", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("ContractingPartyName")
.HasMaxLength(155)
.HasColumnType("nvarchar(155)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<string>("Status")
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");
b.Property<long?>("TaskId")
.HasColumnType("bigint");
b.Property<string>("TicketType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Title")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.HasKey("id");
b.ToTable("Tickets", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("TicketId", "MediaId");
b.HasIndex("MediaId");
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")
.WithMany("Accounts")
.HasForeignKey("PositionId");
b.HasOne("AccountManagement.Domain.RoleAgg.Role", "Role")
.WithMany("Accounts")
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Position");
b.Navigation("Role");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("AdminResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.AdminResponseAgg.AdminResponse", "AdminResponse")
.WithMany("AdminResponseMedias")
.HasForeignKey("AdminResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("AdminResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("AdminResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Task")
.WithMany("Assigns")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Task");
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account")
.WithMany("CameraAccounts")
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("ClientResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.ClientResponseAgg.ClientResponse", "ClientResponse")
.WithMany("ClientResponseMedias")
.HasForeignKey("ClientResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("ClientResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ClientResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.OwnsMany("AccountManagement.Domain.RoleAgg.Permission", "Permissions", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<int>("Code")
.HasColumnType("int");
b1.Property<long>("RoleId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("RoleId");
b1.ToTable("RolePermissions", (string)null);
b1.WithOwner("Role")
.HasForeignKey("RoleId");
b1.Navigation("Role");
});
b.Navigation("Permissions");
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TaskMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Tasks")
.WithMany("TaskMedias")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Tasks");
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TicketMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("TicketMedias")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Navigation("CameraAccounts");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Navigation("AdminResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Navigation("ClientResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Navigation("AdminResponseMedias");
b.Navigation("ClientResponseMedias");
b.Navigation("TaskMedias");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Navigation("Assigns");
b.Navigation("TaskMedias");
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Navigation("AdminResponses");
b.Navigation("ClientResponses");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,206 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
/// <inheritdoc />
public partial class InitialTicket : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<long>(
name: "TicketId",
table: "TasksManager",
type: "bigint",
nullable: true);
migrationBuilder.CreateTable(
name: "Tickets",
columns: table => new
{
id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Title = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
Description = table.Column<string>(type: "ntext", nullable: true),
TicketType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Status = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: true),
SenderId = table.Column<long>(type: "bigint", nullable: false),
ContractingPartyName = table.Column<string>(type: "nvarchar(155)", maxLength: 155, nullable: true),
TaskId = table.Column<long>(type: "bigint", nullable: true),
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Tickets", x => x.id);
});
migrationBuilder.CreateTable(
name: "AdminResponses",
columns: table => new
{
id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TicketId = table.Column<long>(type: "bigint", nullable: false),
Response = table.Column<string>(type: "ntext", nullable: true),
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AdminResponses", x => x.id);
table.ForeignKey(
name: "FK_AdminResponses_Tickets_TicketId",
column: x => x.TicketId,
principalTable: "Tickets",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "ClientResponses",
columns: table => new
{
id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TicketId = table.Column<long>(type: "bigint", nullable: false),
Response = table.Column<string>(type: "ntext", nullable: true),
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ClientResponses", x => x.id);
table.ForeignKey(
name: "FK_ClientResponses_Tickets_TicketId",
column: x => x.TicketId,
principalTable: "Tickets",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TicketMedias",
columns: table => new
{
TicketId = table.Column<long>(type: "bigint", nullable: false),
MediaId = table.Column<long>(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TicketMedias", x => new { x.TicketId, x.MediaId });
table.ForeignKey(
name: "FK_TicketMedias_Medias_MediaId",
column: x => x.MediaId,
principalTable: "Medias",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TicketMedias_Tickets_TicketId",
column: x => x.TicketId,
principalTable: "Tickets",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AdminResponseMedias",
columns: table => new
{
AdminResponseId = table.Column<long>(type: "bigint", nullable: false),
MediaId = table.Column<long>(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AdminResponseMedias", x => new { x.AdminResponseId, x.MediaId });
table.ForeignKey(
name: "FK_AdminResponseMedias_AdminResponses_AdminResponseId",
column: x => x.AdminResponseId,
principalTable: "AdminResponses",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_AdminResponseMedias_Medias_MediaId",
column: x => x.MediaId,
principalTable: "Medias",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "ClientResponseMedias",
columns: table => new
{
ClientResponseId = table.Column<long>(type: "bigint", nullable: false),
MediaId = table.Column<long>(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ClientResponseMedias", x => new { x.ClientResponseId, x.MediaId });
table.ForeignKey(
name: "FK_ClientResponseMedias_ClientResponses_ClientResponseId",
column: x => x.ClientResponseId,
principalTable: "ClientResponses",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ClientResponseMedias_Medias_MediaId",
column: x => x.MediaId,
principalTable: "Medias",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_AdminResponseMedias_MediaId",
table: "AdminResponseMedias",
column: "MediaId");
migrationBuilder.CreateIndex(
name: "IX_AdminResponses_TicketId",
table: "AdminResponses",
column: "TicketId");
migrationBuilder.CreateIndex(
name: "IX_ClientResponseMedias_MediaId",
table: "ClientResponseMedias",
column: "MediaId");
migrationBuilder.CreateIndex(
name: "IX_ClientResponses_TicketId",
table: "ClientResponses",
column: "TicketId");
migrationBuilder.CreateIndex(
name: "IX_TicketMedias_MediaId",
table: "TicketMedias",
column: "MediaId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AdminResponseMedias");
migrationBuilder.DropTable(
name: "ClientResponseMedias");
migrationBuilder.DropTable(
name: "TicketMedias");
migrationBuilder.DropTable(
name: "AdminResponses");
migrationBuilder.DropTable(
name: "ClientResponses");
migrationBuilder.DropTable(
name: "Tickets");
migrationBuilder.DropColumn(
name: "TicketId",
table: "TasksManager");
}
}
}

View File

@@ -0,0 +1,725 @@
// <auto-generated />
using System;
using AccountMangement.Infrastructure.EFCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
[DbContext(typeof(AccountContext))]
[Migration("20240702165608_EditTaskMapping")]
partial class EditTaskMapping
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("AdminAreaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("ClientAriaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Email")
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.Property<string>("Fullname")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("IsActiveString")
.HasMaxLength(6)
.HasColumnType("nvarchar(6)");
b.Property<string>("Mobile")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<string>("NationalCode")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<long?>("PositionId")
.HasMaxLength(10)
.HasColumnType("bigint");
b.Property<string>("ProfilePhoto")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<long>("RoleId")
.HasColumnType("bigint");
b.Property<string>("RoleName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("VerifyCode")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.HasKey("id");
b.HasIndex("PositionId");
b.HasIndex("RoleId");
b.ToTable("Accounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("AdminResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.Property<long>("AdminResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("AdminResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("AdminResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AssignedId")
.HasColumnType("bigint");
b.Property<string>("AssignedName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<int>("AssignedPositionValue")
.HasColumnType("int");
b.Property<long>("AssignerId")
.HasColumnType("bigint");
b.Property<int>("AssignerPositionValue")
.HasColumnType("int");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TaskId");
b.ToTable("Assigns", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AccountId")
.HasColumnType("bigint");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveSting")
.IsRequired()
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Mobile")
.HasMaxLength(11)
.HasColumnType("nvarchar(11)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<long>("WorkshopId")
.HasColumnType("bigint");
b.Property<string>("WorkshopName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.HasIndex("AccountId");
b.ToTable("CameraAccounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("ClientResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.Property<long>("ClientResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("ClientResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("ClientResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("Category")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Path")
.HasColumnType("ntext");
b.Property<string>("Type")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.HasKey("id");
b.ToTable("Medias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("Roles", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<int>("AcceptedTimeRequest")
.HasColumnType("int");
b.Property<string>("CancelDescription")
.HasColumnType("ntext");
b.Property<string>("ContractingPartyName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<string>("DoneDescription")
.HasColumnType("ntext");
b.Property<DateTime>("EndTaskDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveString")
.HasMaxLength(7)
.HasColumnType("nvarchar(7)");
b.Property<bool>("IsCancel")
.HasColumnType("bit");
b.Property<bool>("IsCanceledRequest")
.HasColumnType("bit");
b.Property<bool>("IsDone")
.HasColumnType("bit");
b.Property<DateTime?>("RequestDate")
.HasColumnType("datetime2");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<DateTime>("StartTaskDate")
.HasColumnType("datetime2");
b.Property<long?>("TicketId")
.HasColumnType("bigint");
b.Property<bool>("TimeRequest")
.HasColumnType("bit");
b.Property<string>("TimeRequestDescription")
.HasColumnType("ntext");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TasksManager", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("MediaId", "TaskId");
b.HasIndex("TaskId");
b.ToTable("TasksMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskSubjectAgg.TaskSubject", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Subject")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TaskSubjects", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("ContractingPartyName")
.HasMaxLength(155)
.HasColumnType("nvarchar(155)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<string>("Status")
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");
b.Property<long?>("TaskId")
.HasColumnType("bigint");
b.Property<string>("TicketType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Title")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.HasKey("id");
b.ToTable("Tickets", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("TicketId", "MediaId");
b.HasIndex("MediaId");
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")
.WithMany("Accounts")
.HasForeignKey("PositionId");
b.HasOne("AccountManagement.Domain.RoleAgg.Role", "Role")
.WithMany("Accounts")
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Position");
b.Navigation("Role");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("AdminResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.AdminResponseAgg.AdminResponse", "AdminResponse")
.WithMany("AdminResponseMedias")
.HasForeignKey("AdminResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("AdminResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("AdminResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Task")
.WithMany("Assigns")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Task");
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account")
.WithMany("CameraAccounts")
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("ClientResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.ClientResponseAgg.ClientResponse", "ClientResponse")
.WithMany("ClientResponseMedias")
.HasForeignKey("ClientResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("ClientResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ClientResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.OwnsMany("AccountManagement.Domain.RoleAgg.Permission", "Permissions", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<int>("Code")
.HasColumnType("int");
b1.Property<long>("RoleId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("RoleId");
b1.ToTable("RolePermissions", (string)null);
b1.WithOwner("Role")
.HasForeignKey("RoleId");
b1.Navigation("Role");
});
b.Navigation("Permissions");
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TaskMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Tasks")
.WithMany("TaskMedias")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Tasks");
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TicketMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("TicketMedias")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Navigation("CameraAccounts");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Navigation("AdminResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Navigation("ClientResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Navigation("AdminResponseMedias");
b.Navigation("ClientResponseMedias");
b.Navigation("TaskMedias");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Navigation("Assigns");
b.Navigation("TaskMedias");
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Navigation("AdminResponses");
b.Navigation("ClientResponses");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
/// <inheritdoc />
public partial class EditTaskMapping : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

View File

@@ -0,0 +1,725 @@
// <auto-generated />
using System;
using AccountMangement.Infrastructure.EFCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
[DbContext(typeof(AccountContext))]
[Migration("20240703103641_SetOnDeleteToCascadeInTaskMediaTable")]
partial class SetOnDeleteToCascadeInTaskMediaTable
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("AdminAreaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("ClientAriaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Email")
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.Property<string>("Fullname")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("IsActiveString")
.HasMaxLength(6)
.HasColumnType("nvarchar(6)");
b.Property<string>("Mobile")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<string>("NationalCode")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<long?>("PositionId")
.HasMaxLength(10)
.HasColumnType("bigint");
b.Property<string>("ProfilePhoto")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<long>("RoleId")
.HasColumnType("bigint");
b.Property<string>("RoleName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("VerifyCode")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.HasKey("id");
b.HasIndex("PositionId");
b.HasIndex("RoleId");
b.ToTable("Accounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("AdminResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.Property<long>("AdminResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("AdminResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("AdminResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AssignedId")
.HasColumnType("bigint");
b.Property<string>("AssignedName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<int>("AssignedPositionValue")
.HasColumnType("int");
b.Property<long>("AssignerId")
.HasColumnType("bigint");
b.Property<int>("AssignerPositionValue")
.HasColumnType("int");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TaskId");
b.ToTable("Assigns", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AccountId")
.HasColumnType("bigint");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveSting")
.IsRequired()
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Mobile")
.HasMaxLength(11)
.HasColumnType("nvarchar(11)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<long>("WorkshopId")
.HasColumnType("bigint");
b.Property<string>("WorkshopName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.HasIndex("AccountId");
b.ToTable("CameraAccounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("ClientResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.Property<long>("ClientResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("ClientResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("ClientResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("Category")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Path")
.HasColumnType("ntext");
b.Property<string>("Type")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.HasKey("id");
b.ToTable("Medias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("Roles", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<int>("AcceptedTimeRequest")
.HasColumnType("int");
b.Property<string>("CancelDescription")
.HasColumnType("ntext");
b.Property<string>("ContractingPartyName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<string>("DoneDescription")
.HasColumnType("ntext");
b.Property<DateTime>("EndTaskDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveString")
.HasMaxLength(7)
.HasColumnType("nvarchar(7)");
b.Property<bool>("IsCancel")
.HasColumnType("bit");
b.Property<bool>("IsCanceledRequest")
.HasColumnType("bit");
b.Property<bool>("IsDone")
.HasColumnType("bit");
b.Property<DateTime?>("RequestDate")
.HasColumnType("datetime2");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<DateTime>("StartTaskDate")
.HasColumnType("datetime2");
b.Property<long?>("TicketId")
.HasColumnType("bigint");
b.Property<bool>("TimeRequest")
.HasColumnType("bit");
b.Property<string>("TimeRequestDescription")
.HasColumnType("ntext");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TasksManager", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("MediaId", "TaskId");
b.HasIndex("TaskId");
b.ToTable("TasksMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskSubjectAgg.TaskSubject", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Subject")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TaskSubjects", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("ContractingPartyName")
.HasMaxLength(155)
.HasColumnType("nvarchar(155)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<string>("Status")
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");
b.Property<long?>("TaskId")
.HasColumnType("bigint");
b.Property<string>("TicketType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Title")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.HasKey("id");
b.ToTable("Tickets", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("TicketId", "MediaId");
b.HasIndex("MediaId");
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")
.WithMany("Accounts")
.HasForeignKey("PositionId");
b.HasOne("AccountManagement.Domain.RoleAgg.Role", "Role")
.WithMany("Accounts")
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Position");
b.Navigation("Role");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("AdminResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.AdminResponseAgg.AdminResponse", "AdminResponse")
.WithMany("AdminResponseMedias")
.HasForeignKey("AdminResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("AdminResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("AdminResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Task")
.WithMany("Assigns")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Task");
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account")
.WithMany("CameraAccounts")
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("ClientResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.ClientResponseAgg.ClientResponse", "ClientResponse")
.WithMany("ClientResponseMedias")
.HasForeignKey("ClientResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("ClientResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ClientResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.OwnsMany("AccountManagement.Domain.RoleAgg.Permission", "Permissions", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<int>("Code")
.HasColumnType("int");
b1.Property<long>("RoleId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("RoleId");
b1.ToTable("RolePermissions", (string)null);
b1.WithOwner("Role")
.HasForeignKey("RoleId");
b1.Navigation("Role");
});
b.Navigation("Permissions");
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TaskMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Tasks")
.WithMany("TaskMedias")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Tasks");
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TicketMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("TicketMedias")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Navigation("CameraAccounts");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Navigation("AdminResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Navigation("ClientResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Navigation("AdminResponseMedias");
b.Navigation("ClientResponseMedias");
b.Navigation("TaskMedias");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Navigation("Assigns");
b.Navigation("TaskMedias");
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Navigation("AdminResponses");
b.Navigation("ClientResponses");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
/// <inheritdoc />
public partial class SetOnDeleteToCascadeInTaskMediaTable : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

View File

@@ -0,0 +1,728 @@
// <auto-generated />
using System;
using AccountMangement.Infrastructure.EFCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
[DbContext(typeof(AccountContext))]
[Migration("20240704073907_AddIsDoneRequestToTaskManagerTable")]
partial class AddIsDoneRequestToTaskManagerTable
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("AdminAreaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("ClientAriaPermission")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Email")
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.Property<string>("Fullname")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("IsActiveString")
.HasMaxLength(6)
.HasColumnType("nvarchar(6)");
b.Property<string>("Mobile")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<string>("NationalCode")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<long?>("PositionId")
.HasMaxLength(10)
.HasColumnType("bigint");
b.Property<string>("ProfilePhoto")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<long>("RoleId")
.HasColumnType("bigint");
b.Property<string>("RoleName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("VerifyCode")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.HasKey("id");
b.HasIndex("PositionId");
b.HasIndex("RoleId");
b.ToTable("Accounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("AdminResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.Property<long>("AdminResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("AdminResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("AdminResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AssignedId")
.HasColumnType("bigint");
b.Property<string>("AssignedName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<int>("AssignedPositionValue")
.HasColumnType("int");
b.Property<long>("AssignerId")
.HasColumnType("bigint");
b.Property<int>("AssignerPositionValue")
.HasColumnType("int");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TaskId");
b.ToTable("Assigns", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<long>("AccountId")
.HasColumnType("bigint");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveSting")
.IsRequired()
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Mobile")
.HasMaxLength(11)
.HasColumnType("nvarchar(11)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<long>("WorkshopId")
.HasColumnType("bigint");
b.Property<string>("WorkshopName")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.HasIndex("AccountId");
b.ToTable("CameraAccounts", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Response")
.HasColumnType("ntext");
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.HasKey("id");
b.HasIndex("TicketId");
b.ToTable("ClientResponses", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.Property<long>("ClientResponseId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("ClientResponseId", "MediaId");
b.HasIndex("MediaId");
b.ToTable("ClientResponseMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("Category")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Path")
.HasColumnType("ntext");
b.Property<string>("Type")
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.HasKey("id");
b.ToTable("Medias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("Roles", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<int>("AcceptedTimeRequest")
.HasColumnType("int");
b.Property<string>("CancelDescription")
.HasColumnType("ntext");
b.Property<string>("ContractingPartyName")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<string>("DoneDescription")
.HasColumnType("ntext");
b.Property<DateTime>("EndTaskDate")
.HasColumnType("datetime2");
b.Property<string>("IsActiveString")
.HasMaxLength(7)
.HasColumnType("nvarchar(7)");
b.Property<bool>("IsCancel")
.HasColumnType("bit");
b.Property<bool>("IsCanceledRequest")
.HasColumnType("bit");
b.Property<bool>("IsDone")
.HasColumnType("bit");
b.Property<bool>("IsDoneRequest")
.HasColumnType("bit");
b.Property<DateTime?>("RequestDate")
.HasColumnType("datetime2");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<DateTime>("StartTaskDate")
.HasColumnType("datetime2");
b.Property<long?>("TicketId")
.HasColumnType("bigint");
b.Property<bool>("TimeRequest")
.HasColumnType("bit");
b.Property<string>("TimeRequestDescription")
.HasColumnType("ntext");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TasksManager", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.Property<long>("TaskId")
.HasColumnType("bigint");
b.HasKey("MediaId", "TaskId");
b.HasIndex("TaskId");
b.ToTable("TasksMedias", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TaskSubjectAgg.TaskSubject", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Subject")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.HasKey("id");
b.ToTable("TaskSubjects", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("ContractingPartyName")
.HasMaxLength(155)
.HasColumnType("nvarchar(155)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("ntext");
b.Property<long>("SenderId")
.HasColumnType("bigint");
b.Property<string>("Status")
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");
b.Property<long?>("TaskId")
.HasColumnType("bigint");
b.Property<string>("TicketType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Title")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.HasKey("id");
b.ToTable("Tickets", (string)null);
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.Property<long>("TicketId")
.HasColumnType("bigint");
b.Property<long>("MediaId")
.HasColumnType("bigint");
b.HasKey("TicketId", "MediaId");
b.HasIndex("MediaId");
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")
.WithMany("Accounts")
.HasForeignKey("PositionId");
b.HasOne("AccountManagement.Domain.RoleAgg.Role", "Role")
.WithMany("Accounts")
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Position");
b.Navigation("Role");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("AdminResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.AdminResponseAgg.AdminResponse", "AdminResponse")
.WithMany("AdminResponseMedias")
.HasForeignKey("AdminResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("AdminResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("AdminResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b =>
{
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Task")
.WithMany("Assigns")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Task");
});
modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b =>
{
b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account")
.WithMany("CameraAccounts")
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("ClientResponses")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b =>
{
b.HasOne("AccountManagement.Domain.ClientResponseAgg.ClientResponse", "ClientResponse")
.WithMany("ClientResponseMedias")
.HasForeignKey("ClientResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("ClientResponseMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ClientResponse");
b.Navigation("Media");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.OwnsMany("AccountManagement.Domain.RoleAgg.Permission", "Permissions", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<int>("Code")
.HasColumnType("int");
b1.Property<long>("RoleId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("RoleId");
b1.ToTable("RolePermissions", (string)null);
b1.WithOwner("Role")
.HasForeignKey("RoleId");
b1.Navigation("Role");
});
b.Navigation("Permissions");
});
modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TaskMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Tasks")
.WithMany("TaskMedias")
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Tasks");
});
modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b =>
{
b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media")
.WithMany("TicketMedias")
.HasForeignKey("MediaId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket")
.WithMany("TicketMedias")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Media");
b.Navigation("Ticket");
});
modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b =>
{
b.Navigation("CameraAccounts");
});
modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b =>
{
b.Navigation("AdminResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b =>
{
b.Navigation("ClientResponseMedias");
});
modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b =>
{
b.Navigation("AdminResponseMedias");
b.Navigation("ClientResponseMedias");
b.Navigation("TaskMedias");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b =>
{
b.Navigation("Assigns");
b.Navigation("TaskMedias");
});
modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b =>
{
b.Navigation("AdminResponses");
b.Navigation("ClientResponses");
b.Navigation("TicketMedias");
});
modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}
}

View File

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

View File

@@ -5,6 +5,7 @@ using AccountManagement.Domain.AccountAgg;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using AccountManagement.Domain.RoleAgg;
@@ -106,6 +107,7 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
}).Where(x=>x.RoleId == 15 && x.IsActiveString == "true").ToList();
}
[SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 282")]
public List<AccountViewModel> Search(AccountSearchModel searchModel)
{
var query = _context.Accounts.Include(x => x.Role).Select(x => new AccountViewModel
@@ -179,6 +181,7 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
Fullname = x.Fullname,
Id = x.id,
PositionValue = x.Position.PositionValue,
PositionId = x.Position.id,
IsActiveString = x.IsActiveString,
Username = x.Username
@@ -193,7 +196,7 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
var assignerIds = _context.Assigns.Where(x => x.TaskId == taskId).Select(x => x.AssignerId).ToList();
return _context.Accounts.Include(x => x.Position).Where(x =>
x.Position.PositionValue > posValue && !assignerIds.Contains(x.id) && !assignedIds.Contains(x.id)).Select(
x.Position.PositionValue > posValue && !assignerIds.Contains(x.id) && !assignedIds.Contains(x.id)).Select(
x => new AccountViewModel()
{
PositionValue = x.Position.PositionValue,
@@ -203,16 +206,15 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
IsActiveString = x.IsActiveString,
Username = x.Username
}).ToList();
}
public List<Account> GetAccountsByIds(List<long> ids)
{
var res = _context.Accounts.Include(x => x.Position).Where(x => x.PositionId != null);
return res.Where(x => ids.Contains(x.id)).ToList();
}
public List<AccountViewModel> GetAccountLowerPositionvalue()
{
var account = GetIncludePositions(int.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value));
return _context.Accounts.Include(x => x.Position)
.Where(x => x.Position.PositionValue > account.Position.PositionValue && x.IsActiveString == "true").Select(x => new AccountViewModel()
@@ -231,6 +233,12 @@ public class AccountRepository : RepositoryBase<long, Account>, IAccountReposito
CreationDateGr = x.CreationDate,
}).ToList();
}
public List<Account> GetAccountsByIds(List<long> ids)
{
var res = _context.Accounts.Include(x => x.Position).Where(x => x.PositionId != null);
return res.Where(x => ids.Contains(x.id)).ToList();
}
public AccountViewModel GetAccountViewModel(long id)

View File

@@ -2,8 +2,11 @@
using System.Linq;
using _0_Framework.InfraStructure;
using AccountManagement.Application.Contracts.Media;
using AccountManagement.Domain.AdminResponseMediaAgg;
using AccountManagement.Domain.ClientResponseMediaAgg;
using AccountManagement.Domain.MediaAgg;
using AccountManagement.Domain.TaskMediaAgg;
using AccountManagement.Domain.TicketMediasAgg;
using Microsoft.EntityFrameworkCore;
namespace AccountMangement.Infrastructure.EFCore.Repository;
@@ -24,7 +27,26 @@ public class MediaRepository:RepositoryBase<long,Media>,IMediaRepository
}
public void Remove(long id)
{
Remove(id);
var media = Get(id);
Remove(media);
}
public void CreateTicketMedia(long ticketId, long mediaId)
{
var ticketMedias = new TicketMedia(ticketId, mediaId);
_taskManagerContext.Add(ticketMedias);
}
public void CreateAdminResponseMedia(long adminResponseId, long mediaId)
{
var adminResMedia = new AdminResponseMedia(adminResponseId, mediaId);
_taskManagerContext.Add(adminResMedia);
}
public void CreateClientResponseMedia(long clientResponseId, long mediaId)
{
var clientResMedia = new ClientResponseMedia(clientResponseId, mediaId);
_taskManagerContext.Add(clientResMedia);
}
public List<MediaViewModel> GetMediaByTaskId(long taskId)

View File

@@ -2,11 +2,11 @@
using System.Linq;
using _0_Framework.InfraStructure;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Domain.AccountAgg;
using AccountMangement.Infrastructure.EFCore;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using TaskManager.Application.Contract.Position;
using TaskManager.Domain.PositionAgg;
namespace TaskManager.Infrastructure.EFCore.Repository;
@@ -29,7 +29,8 @@ public class PositionRepository : RepositoryBase<long, Position>, IPositionRepos
{
Value = x.PositionValue,
Id = x.id,
Name = x.PositionName
Name = x.PositionName,
CountUsers = _accountContext.Accounts.Count(a => a.PositionId==x.id)
@@ -53,6 +54,13 @@ public class PositionRepository : RepositoryBase<long, Position>, IPositionRepos
}).OrderBy(x => x.Value).ToList();
}
public List<int> GetUnUsedPositionValues()
{
List<int> values= new List<int>() {1,2,3,4,5};
var usedPositions= _accountContext.Positions.Select(x => x.PositionValue).ToList();
return values.Where(x => !usedPositions.Contains(x)).ToList();
}
//لیست کسانی که سمتی برایشان ثبت نشده است
public List<AccountViewModel> GetNoPositionAccounts()
{

View File

@@ -34,7 +34,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
return _accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask()
{
EndTaskDate = x.EndTaskDate.ToFarsiFull(),
EndTaskDate = x.EndTaskDate.ToFarsi(),
Description = x.Description,
Id = x.id,
Title = x.Title,
@@ -43,17 +43,23 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
{
Path = m.Media.Path,
Type = m.Media.Type,
Category = m.Media.Category,
Id = m.Media.id
}).ToList(),
EndTaskTime = x.EndTaskDate.ToFarsiFull().Substring(11),
ContractingPartyName = x.ContractingPartyName,
CompleteDescription = x.DoneDescription,
IsDone = x.IsDone,
ReceiverId = _accountContext.Assigns.Where(a=>a.TaskId==x.id).Select(a=>a.AssignedId).ToList(),
SenderId = x.SenderId
}).FirstOrDefault();
}
public void Remove(long id)
{
Remove(id);
var task=Get(id);
Remove(task);
}
@@ -69,7 +75,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
};
var query = _accountContext.Assigns.Include(x => x.Task).Where(x =>
x.Task.IsDone == false && x.Task.IsActiveString == "true" &&
(x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true)).Select(x =>
(x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true||x.Task.IsDoneRequest)).Select(x =>
new TaskViewModel()
{
@@ -90,6 +96,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
ContractingPartyName = x.Task.ContractingPartyName,
MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id),
Description = x.Task.Description,
IsDoneRequest = x.Task.IsDoneRequest
});
//res = res.GroupBy(x => x.Id).Select(x => x.First());
@@ -132,7 +139,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
Description = x.Description
Description = x.Description,
IsDoneRequest=x.IsDoneRequest
});
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
{
@@ -153,12 +161,15 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
(end < x.EndTaskDateGE && x.EndTaskDateGE > end)));
}
if (searchModel.AccountId > 0)
if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest))
{
res = res.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
bool isDoneReq = bool.Parse(searchModel.IsDoneRequest);
res = res.Where(x => x.IsDoneRequest == isDoneReq);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
{
bool isDone = bool.Parse(searchModel.IsDone);
res = res.Where(x => x.IsDone == isDone);
@@ -189,11 +200,18 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
}
var resEnum = res.AsEnumerable();
var result = resEnum.GroupBy(x => x.Id).Select(x => x.First());
var orderResult = result.OrderBy(x => x.IsDone ? 1 : 0)
.ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1);
if (searchModel.AccountId > 0)
{
result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
}
var orderResult = result.OrderBy(x => x.IsDone ? 1 : 0)
.ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1);
var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
final = final.Select(x => new TaskViewModel()
@@ -223,7 +241,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
SelfName = x.SelfName,
Description = x.Description
Description = x.Description,
IsDoneRequest=x.IsDoneRequest,
@@ -260,13 +279,14 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE),
Color = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest ? SetRequestTasksColors(x.RequestTime, x.IsCancelRequest,x.IsDoneRequest) : "",
MediaCount = x.MediaCount,
HasAttachment = (!string.IsNullOrWhiteSpace(x.Description) || x.MediaCount > 0),
SelfName = x.SelfName,
SelfAssigned = x.SelfAssigned,
SelfAssigner = x.SelfAssigner,
Description = x.Description
Description = x.Description,
IsDoneRequest=x.IsDoneRequest
}).ToList();
final = final.Select(x => new TaskViewModel()
@@ -299,7 +319,8 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59"
? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}"
: "",
Description = x.Description
Description = x.Description,
IsDoneRequest=x.IsDoneRequest
}).ToList();
return final;
}
@@ -319,7 +340,7 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
.Select(x =>
new TaskViewModel()
{
AssignedId = x.AssignedId,
AssignerId = x.AssignerId,
CreateDate = x.Task.CreationDate.ToFarsi(),
@@ -335,8 +356,9 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
AcceptedTimeRequest = x.Task.AcceptedTimeRequest,
IsCancelRequest = x.Task.IsCanceledRequest,
ContractingPartyName = x.Task.ContractingPartyName,
MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id),
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id),
Description = x.Task.Description,
IsDoneRequest=x.Task.IsDoneRequest,
});
//res = res.GroupBy(x => x.Id).Select(x => x.First());
@@ -379,8 +401,9 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
Description = x.Description
});
Description = x.Description,
IsDoneRequest=x.IsDoneRequest
});
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
{
var start = searchModel.StartDate.ToGeorgianDateTime();
@@ -400,12 +423,13 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
(end < x.EndTaskDateGE && x.EndTaskDateGE > end)));
}
if (searchModel.AccountId > 0)
if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest))
{
res = res.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
bool isDoneReq = bool.Parse(searchModel.IsDoneRequest);
res = res.Where(x => x.IsDoneRequest == isDoneReq);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
{
bool isDone = bool.Parse(searchModel.IsDone);
res = res.Where(x => x.IsDone == isDone);
@@ -438,8 +462,16 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
var resEnum = res.AsEnumerable();
var result = resEnum.GroupBy(x => x.Id).Select(x => x.First());
var orderResult = result.OrderBy(x => x.IsDone ? 1 : 0)
.ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1);
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();
@@ -470,13 +502,14 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
ContractingPartyName = x.ContractingPartyName,
MediaCount = x.MediaCount,
SelfName = x.SelfName,
Description = x.Description
Description = x.Description,
IsDoneRequest=x.IsDoneRequest
}).ToList();
}).ToList();
final = final.Select(x => new TaskViewModel()
@@ -507,14 +540,15 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
AcceptedTimeRequest = x.AcceptedTimeRequest,
IsCancelRequest = x.IsCancelRequest,
ContractingPartyName = x.ContractingPartyName,
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE),
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE,x.IsCancel),
MediaCount = x.MediaCount,
HasAttachment = (!string.IsNullOrWhiteSpace(x.Description) || x.MediaCount > 0),
HasAttachment = (!string.IsNullOrWhiteSpace(x.Description) || x.MediaCount > 0)?true:false,
SelfName = x.SelfName,
SelfAssigned = x.SelfAssigned,
SelfAssigner = x.SelfAssigner,
Description = x.Description
}).ToList();
Description = x.Description,
IsDoneRequest=x.IsDoneRequest
}).ToList();
final = final.Select(x => new TaskViewModel()
{
@@ -544,16 +578,21 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
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
}).ToList();
? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}"
: "",
Description = x.Description,
IsDoneRequest=x.IsDoneRequest
}).ToList();
return final;
}
public string SetTasksColors(DateTime date)
public string SetTasksColors(DateTime date,bool isCancel)
{
if (isCancel)
{
return "brown";
}
var now = DateTime.Now.Date;
if (date.Date < now)
{
@@ -576,12 +615,50 @@ public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
}
public string SetRequestTasksColors(bool timeRequest, bool cancelRequest,bool isDoneRequest)
{
if (timeRequest)
{
return "yellow";
}
else if (cancelRequest)
{
return "red";
}
else if (isDoneRequest)
{
return "green";
}
else
{
return "";
}
}
public int GetRequestedTasksCount()
{
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
x.Task.IsDone == false && x.Task.IsActiveString == "true" &&
(x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true)).GroupBy(x => x.TaskId)
.Select(x => x.First()).Count();
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
x.Task.IsDone == false && x.Task.IsActiveString == "true" &&
(x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true||x.Task.IsDoneRequest)).GroupBy(x => x.TaskId)
.Select(x => x.First()).Count();
}
public TaskViewModel GetRequestDetails(long id)
{
return _accountContext.Tasks.Where(x => x.id == id).Select(x=>new TaskViewModel()
{
Id = x.id,
Name = x.Title,
ContractingPartyName = x.ContractingPartyName,
TimeRequestDescription = x.TimeRequestDescription,
CancelDescription = x.CancelDescription,
IsDoneDescription = x.DoneDescription,
IsCancelRequest = x.IsDoneRequest,
RequestTime = x.TimeRequest,
IsDoneRequest = x.IsDoneRequest,
RequestTaskDate = x.RequestDate==null?"":x.RequestDate.ToFarsi()
}).FirstOrDefault();
}
}

View File

@@ -15,13 +15,19 @@ public class TaskSubjectRepository:RepositoryBase<long,TaskSubject>, ITaskSubjec
_context = context;
}
public List<TaskSubjectViewModel> GetAll()
public List<TaskSubjectViewModel> GetAll(string search)
{
return _context.TaskSubjects.Select(x => new TaskSubjectViewModel()
var res = _context.TaskSubjects.Select(x => new TaskSubjectViewModel()
{
Id = x.id,
Subject = x.Subject
}).ToList();
});
if (!string.IsNullOrWhiteSpace(search))
{
res = res.Where(x => x.Subject.Contains(search));
}
return res.ToList();
}
public void Remove(long id)

View File

@@ -0,0 +1,153 @@
using System.Collections.Generic;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using AccountManagement.Application.Contracts.Media;
using AccountManagement.Application.Contracts.Ticket;
using AccountManagement.Domain.AdminResponseAgg;
using AccountManagement.Domain.ClientResponseAgg;
using AccountManagement.Domain.TicketAgg;
using Microsoft.EntityFrameworkCore;
namespace AccountMangement.Infrastructure.EFCore.Repository;
public class TicketRepository : RepositoryBase<long, Ticket>, ITicketRepository
{
private readonly AccountContext _accountContext;
public TicketRepository(AccountContext accountContext) : base(accountContext)
{
_accountContext = accountContext;
}
public List<TicketViewModel> GetAll(TicketSearchModel searchModel)
{
var query = _accountContext.Tickets.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,
TaskId = x.TaskId,
CreationDateTimeGr = x.CreationDate,
CreationDateTime = x.CreationDate.ToFarsiFull(),
MediaViewModels = _accountContext.TicketMedias.Include(z => z.Media).Where(a => a.TicketId == x.id)
.Select(m => new MediaViewModel()
{
Id = m.Media.id,
Path = m.Media.Path,
Type = m.Media.Type,
}).ToList(),
AdminResponseViewModels = _accountContext.AdminResponses.Include(a => a.AdminResponseMedias)
.Where(a => a.TicketId == x.id).Select(a => new AdminResponseViewModel()
{
MediaViewModels = _accountContext.AdminResponseMedias.Include(d => d.Media)
.Where(d => d.AdminResponseId == a.id).Select(d => new MediaViewModel()
{
Id = d.Media.id,
Path = d.Media.Path,
Type = d.Media.Type,
}).ToList(),
Response = a.Response,
TicketId = a.TicketId
}).ToList(),
ClientResponseViewModels = _accountContext.ClientResponses.Include(a => a.ClientResponseMedias)
.Where(a => a.TicketId == x.id).Select(a => new ClientResponseViewModel()
{
MediaViewModels = _accountContext.ClientResponseMedias.Include(d => d.Media)
.Where(d => d.ClientResponseId == a.id).Select(d => new MediaViewModel()
{
Id = d.Media.id,
Path = d.Media.Path,
Type = d.Media.Type,
}).ToList(),
Response = a.Response,
TicketId = a.TicketId
}).ToList(),
});
if (!string.IsNullOrWhiteSpace(searchModel.ContractingPartyName))
{
query = query.Where(x => x.ContractingPartyName.Contains(searchModel.ContractingPartyName));
}
if (!string.IsNullOrWhiteSpace(searchModel.Status))
{
query = query.Where(x => x.Status == searchModel.Status);
}
if (!(string.IsNullOrWhiteSpace(searchModel.StartDate) && string.IsNullOrWhiteSpace(searchModel.EndDate)))
{
if (string.IsNullOrWhiteSpace(searchModel.OneDay))
{
var startDate = searchModel.StartDate.ToGeorgianDateTime();
var endDate = searchModel.EndDate.ToGeorgianDateTime();
query = query.Where(x => startDate < x.CreationDateTimeGr && endDate > x.CreationDateTimeGr);
}
}
if (!string.IsNullOrWhiteSpace(searchModel.Title))
{
query = query.Where(x => x.Title.Contains(searchModel.Title));
}
if (!string.IsNullOrWhiteSpace(searchModel.TypeOfTicket))
{
query = query.Where(x => x.TicketType == searchModel.TypeOfTicket);
}
if (!string.IsNullOrWhiteSpace(searchModel.OneDay))
{
var day = searchModel.OneDay.ToGeorgianDateTime();
query = query.Where(x => x.CreationDateTimeGr.Date == day.Date);
}
if (!string.IsNullOrWhiteSpace(searchModel.IsAssigned))
{
var isAssigned = bool.Parse(searchModel.IsAssigned);
if (isAssigned)
{
query.Where(x => x.TaskId != null);
}
else if (!isAssigned)
{
query.Where(x => x.TaskId == null);
}
}
return query.ToList();
}
public void CreateAdminResponse(AdminResponse command)
{
_accountContext.Add(command);
}
public void CreateClientResponse(ClientResponse command)
{
_accountContext.Add(command);
}
public EditTicket GetDetails(long id)
{
return _accountContext.Tickets.Select(x => new EditTicket()
{
ContractingPartyName = x.ContractingPartyName,
Description = x.Description,
Id = x.id,
SenderId = x.SenderId,
TicketType = x.TicketType,
Title = x.Title,
MediaViewModels = _accountContext.TicketMedias.Include(z => z.Media).Where(a => a.TicketId == x.id)
.Select(m => new MediaViewModel()
{
Id = m.Media.id,
Path = m.Media.Path,
Type = m.Media.Type,
}).ToList(),
}).FirstOrDefault(x => x.Id == id);
}
}

View File

@@ -540,100 +540,105 @@
</div>
</div>
@* مدیریت متن *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="500" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت متن </span>&nbsp;</label>
@*لیست متون*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="501" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست متون </span> </label>
</div>
@*عنوان*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="502" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> عنوان </span> </label>
</div>
@*بخش*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="503" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> بخش </span> </label>
</div>
@*فصل*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="504" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> فصب </span> </label>
</div>
@*ماژول*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="505" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ماژول </span> </label>
</div>
</div>
@* مدیریت وظایف *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="600" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت وظایف </span>&nbsp;</label>
@*لیست وظایف*@
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="900" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت وظایف </span>&nbsp;</label>
@*وظایف*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="601" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست وظایف </span> </label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="901" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> وظایف </span> </label>
@*لیست وظایف*@
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60110" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تعریف وظیفه جدید </span> </label>
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="9011" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست وظایف </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90110" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ارجاع </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90111" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مهلت برای روز خاص </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90112" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> قابل انجام نیست </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90113" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> جزئیات </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90114" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ویرایش </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90115" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف </span> </label>
</div>
</div>
@*لیست درخواست ها*@
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60111" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> جستجوی وظیفه ها </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60112" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> دکمه ها </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60113" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ویرایش </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60114" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف </span> </label>
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="9012" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست درخواست ها </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90120" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مشاهده </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90121" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> جزئیات </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90122" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تایید یا رد - مودال</span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90123" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تغییر تاریخ - مودال </span> </label>
</div>
</div>
</div>
@*لیست عناوین وظایف*@
@*گروهبندی*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="602" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست عناوین وظایف </span> </label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="902" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> گروهبندی </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90210" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ساخت گروه </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90211" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف گروه </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90212" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> افزودن پرسنل </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90213" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف پرسنل </span> </label>
</div>
</div>
</div>
@* مدیریت لوایح *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="700" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت لوایح </span>&nbsp;</label>
@*لیست لوایح*@
@*وظیفه جدید*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="701" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست لوایح </span> </label>
</div>
@*ایجاد*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="702" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ایجاد </span> </label>
</div>
@*مخاطب*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="703" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مخاطب </span> </label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="903" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> وظیفه جدید </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90310" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> انتخاب اعضاء </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90311" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> انتخاب گروهی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90312" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ارسال تسک به خود </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90313" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست عنوان وظیف - مودال </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90314" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> عنوان جدید </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90315" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف عنوان </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90316" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ویرایش عنوان </span> </label>
</div>
</div>
</div>
@* بیمه *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>

View File

@@ -105,7 +105,7 @@
</div>
</div>
oo6ltk,m,br</div>
@* بانک اطلاعات *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
@@ -533,100 +533,106 @@
</div>
</div>
@* مدیریت متن *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="500" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت متن </span>&nbsp;</label>
@*لیست متون*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="501" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست متون </span> </label>
</div>
@*عنوان*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="502" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> عنوان </span> </label>
</div>
@*بخش*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="503" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> بخش </span> </label>
</div>
@*فصل*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="504" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> فصب </span> </label>
</div>
@*ماژول*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="505" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ماژول </span> </label>
</div>
</div>
@* مدیریت وظایف *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="600" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت وظایف </span>&nbsp;</label>
@*لیست وظایف*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="601" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست وظایف </span> </label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="900" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت وظایف </span>&nbsp;</label>
@*وظایف*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="901" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> وظایف </span> </label>
@*لیست وظایف*@
<div class="child-check level3">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="9011" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست وظایف </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90110" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ارجاع </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90111" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مهلت برای روز خاص </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90112" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> قابل انجام نیست </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90113" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> جزئیات </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90114" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ویرایش </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90115" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف </span> </label>
</div>
</div>
@*لیست درخواست ها*@
<div class="child-check level3">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="9012" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست درخواست ها </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60110" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تعریف وظیفه جدید </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90120" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مشاهده </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90121" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> جزئیات </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90122" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تایید یا رد - مودال</span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90123" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تغییر تاریخ - مودال </span> </label>
</div>
</div>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60111" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> جستجوی وظیفه ها </span> </label>
@*گروهبندی*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="902" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> گروهبندی </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90210" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ساخت گروه </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90211" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف گروه </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90212" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> افزودن پرسنل </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="90213" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف پرسنل </span> </label>
</div>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60112" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> دکمه ها </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60113" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ویرایش </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="60114" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف </span> </label>
</div>
</div>
@*لیست عناوین وظایف*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="602" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست عناوین وظایف </span> </label>
</div>
</div>
@* مدیریت لوایح *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parent"> <input type="checkbox" value="700" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مدیریت لوایح </span>&nbsp;</label>
@*لیست لوایح*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="701" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست لوایح </span> </label>
</div>
@*ایجاد*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="702" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ایجاد </span> </label>
</div>
@*مخاطب*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="703" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> مخاطب </span> </label>
@*وظیفه جدید*@
<div class="child-check level2">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="903" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> وظیفه جدید </span> </label>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90310" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> انتخاب اعضاء </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90311" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> انتخاب گروهی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90312" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ارسال تسک به خود </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90313" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> لیست عنوان وظیف - مودال </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90314" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> عنوان جدید </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90315" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> حذف عنوان </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children "><input type="checkbox" disabled="disabled" value="90316" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> ویرایش عنوان </span> </label>
</div>
</div>
</div>
@* بیمه *@
<div class="parent-check">
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close"><i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" /></label>

View File

@@ -575,7 +575,7 @@
}
});
$('.tableFindBtn').on('change', function () {
$(document).on('change', '.tableFindBtn', function () {
$(this).find(".save").prop("disabled", false);
});
});

View File

@@ -42,7 +42,7 @@
}
.last-div{
width: 100%;
height: 55px;
/* height: 55px; */
}
.printBtns {

View File

@@ -3,231 +3,249 @@
@inject _0_Framework.Application.IAuthHelper AuthHelper;
@{
<style>
.bl {
display: block !important;
}
</style>
var currentAccout = AuthHelper.CurrentAccountInfo();
<style>
.bl {
display: block !important;
}
</style>
var currentAccout = AuthHelper.CurrentAccountInfo();
}
<div class="left side-menu">
<div class="sidebar-inner slimscrollleft">
<div class="user-details">
<div class="pull-right">
@if (!String.IsNullOrEmpty(currentAccout.ProfilePhoto))
{
<img src="~/ProductPictures/@currentAccout.ProfilePhoto" alt="" class="thumb-md img-circle">
}
else
{
<img src="~/AdminTheme/assets/images/profile.png" alt="" class="thumb-md img-circle">
}
</div>
<div class="user-info">
<div class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">@currentAccout.Fullname<span class="caret"></span></a>
<ul class="dropdown-menu text-right">
<li><a href="javascript:void(0)"><i class="md md-face-unlock"></i> پروفایل<div class="ripple-wrapper"></div></a></li>
<li><a href="javascript:void(0)"><i class="md md-settings"></i> تنظیمات</a></li>
<li><a href="javascript:void(0)"><i class="md md-lock"></i> قفل </a></li>
<li><a asp-area="" asp-page="/Index" asp-page-handler="Logout"><i class="md md-settings-power"></i> خروج</a></li>
</ul>
</div>
<div class="sidebar-inner slimscrollleft">
<div class="user-details">
<div class="pull-right">
@if (!String.IsNullOrEmpty(currentAccout.ProfilePhoto))
{
<img src="~/ProductPictures/@currentAccout.ProfilePhoto" alt="" class="thumb-md img-circle">
}
else
{
<img src="~/AdminTheme/assets/images/profile.png" alt="" class="thumb-md img-circle">
}
</div>
<div class="user-info">
<div class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">@currentAccout.Fullname<span class="caret"></span></a>
<ul class="dropdown-menu text-right">
<li><a href="javascript:void(0)"><i class="md md-face-unlock"></i> پروفایل<div class="ripple-wrapper"></div></a></li>
<li><a href="javascript:void(0)"><i class="md md-settings"></i> تنظیمات</a></li>
<li><a href="javascript:void(0)"><i class="md md-lock"></i> قفل </a></li>
<li><a asp-area="" asp-page="/Index" asp-page-handler="Logout"><i class="md md-settings-power"></i> خروج</a></li>
</ul>
</div>
<p class="text-muted m-0">@currentAccout.Role</p>
</div>
</div>
<!--- Divider -->
<div id="sidebar-menu">
<p class="text-muted m-0">@currentAccout.Role</p>
</div>
</div>
<!--- Divider -->
<div id="sidebar-menu">
<ul>
<li>
<a asp-page="/Index" class="waves-effect active">
<div class="menuTitle">
<i class="md md-home"></i>
<span> داشبورد </span>
</div>
</a>
</li>
<ul>
<li>
<a asp-page="/Index" class="waves-effect active">
<div class="menuTitle">
<i class="md md-home"></i>
<span> داشبورد </span>
</div>
</a>
</li>
<li class="has_sub" permission="100">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-group"></i>
<span> بانک اطلاعات </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="sdf1">
<li permission="101"><a class="clik" asp-page="/Company/ContractingParties/Index"> طرف حساب </a></li>
<li permission="102"><a class="clik" asp-page="/Company/Employers/Index"> کارفرما </a></li>
<li permission="103"><a class="clik" asp-page="/Company/Workshops/Index"> کارگاه </a></li>
<li permission="104"><a class="clik" asp-page="/Company/Employees/Index"> پرسنل </a></li>
<li permission="105"><a class="clik" asp-page="/Company/Representative/Index"> معرف </a></li>
<li class="has_sub" permission="100">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-group"></i>
<span> بانک اطلاعات </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="sdf1">
<li permission="101"><a class="clik" asp-page="/Company/ContractingParties/Index"> طرف حساب </a></li>
<li permission="102"><a class="clik" asp-page="/Company/Employers/Index"> کارفرما </a></li>
<li permission="103"><a class="clik" asp-page="/Company/Workshops/Index"> کارگاه </a></li>
<li permission="104"><a class="clik" asp-page="/Company/Employees/Index"> پرسنل </a></li>
<li permission="105"><a class="clik" asp-page="/Company/Representative/Index"> معرف </a></li>
</ul>
</li>
</ul>
</li>
<li class="has_sub" permission="200">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-assignment"></i>
<span> قرارداد و تصفیه </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf2">
<li permission="201"><a class="clik2" asp-page="/Company/Contracts/Index">قرارداد </a></li>
<li permission="202"><a class="clik2" asp-page="/Company/Checkouts/Index">تصفیه حساب </a></li>
<li class="has_sub" permission="200">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-assignment"></i>
<span> قرارداد و تصفیه </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf2">
<li permission="201"><a class="clik2" asp-page="/Company/Contracts/Index">قرارداد </a></li>
<li permission="202"><a class="clik2" asp-page="/Company/Checkouts/Index">تصفیه حساب </a></li>
</ul>
</li>
</ul>
</li>
<li class="has_sub" permission="300">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-location-city"></i>
<span>بانک اطلاعات مدیریتی </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf3">
<li permission="307"><a class="clik3" asp-page="/Company/InstitutionContracts/Index">قراردادهای موسسه</a></li>
<li permission="306"><a class="clik3" asp-page="/Company/SmsResult/Index"> گزارش پیامک خودکار</a></li>
<li permission="301"><a class="clik3" asp-page="/Company/YearlySalaryTitles/Index"> ایجاد عناوین مقادیر سالانه </a></li>
<li permission="302"><a class="clik3" asp-page="/Company/YearlySalaries/Index"> مقادیر سالانه </a></li>
<li permission="309"><a class="clik3" asp-page="/Company/ClassifiedSalary/Index"> مزد سنوات</a></li>
<li permission="310"><a class="clik3" asp-page="/Company/InsuranceYearlySalary/Index"> مزد سنوات بیمه</a></li>
<li permission="303"><a class="clik3" asp-page="/Company/Jobs/Index"> لیست مشاغل </a></li>
<li permission="304"><a class="clik3" asp-page="/Company/Holidays/Index"> تعطیلات رسمی </a></li>
<li permission="305"><a class="clik3" asp-page="/Company/MandatoryHours/Index"> ساعت موظفی </a></li>
<li permission="306"><a class="clik3" asp-page="/Accounts/Account/Index"> مدیریت کاربران </a></li>
<li permission="308"><a class="clik3" asp-page="/Company/FaceRecognition/Index"> تشخیص چهره </a></li>
<li permission="306"><a class="clik3" asp-page="/Company/Reports/Index"> گزارشات </a></li>
</ul>
</li>
<li class="has_sub" permission="400">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-assignment"></i>
<span> پرونده </span>
</div>
<li class="has_sub" permission="300">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-location-city"></i>
<span>بانک اطلاعات مدیریتی </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf3">
<li permission="307"><a class="clik3" asp-page="/Company/InstitutionContracts/Index">قراردادهای موسسه</a></li>
<li permission="306"><a class="clik3" asp-page="/Company/SmsResult/Index"> گزارش پیامک خودکار</a></li>
<li permission="301"><a class="clik3" asp-page="/Company/YearlySalaryTitles/Index"> ایجاد عناوین مقادیر سالانه </a></li>
<li permission="302"><a class="clik3" asp-page="/Company/YearlySalaries/Index"> مقادیر سالانه </a></li>
<li permission="309"><a class="clik3" asp-page="/Company/ClassifiedSalary/Index"> مزد سنوات</a></li>
<li permission="310"><a class="clik3" asp-page="/Company/InsuranceYearlySalary/Index"> مزد سنوات بیمه</a></li>
<li permission="303"><a class="clik3" asp-page="/Company/Jobs/Index"> لیست مشاغل </a></li>
<li permission="304"><a class="clik3" asp-page="/Company/Holidays/Index"> تعطیلات رسمی </a></li>
<li permission="305"><a class="clik3" asp-page="/Company/MandatoryHours/Index"> ساعت موظفی </a></li>
<li permission="306"><a class="clik3" asp-page="/Accounts/Account/Index"> مدیریت کاربران </a></li>
<li permission="308"><a class="clik3" asp-page="/Company/FaceRecognition/Index"> تشخیص چهره </a></li>
<li permission="306"><a class="clik3" asp-page="/Company/Reports/Index"> گزارشات </a></li>
</ul>
</li>
<li class="has_sub" permission="400">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-assignment"></i>
<span> پرونده </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf4">
<li permission="401"><a class="clik4" asp-page="/Company/FilePage/Index">لیست پرونده ها </a></li>
<li permission="402"><a class="clik4" asp-page="/Company/FilePage/Alerts"> گزارش ها</a></li>
<li permission="403"><a class="clik4" asp-page="/Company/FilePage/Sessions"> جلسات</a></li>
<li permission="404"><a class="clik4 " asp-page="/Company/FileEmployee/Index"> پرسنل</a></li>
<li permission="404"><a class="clik4 " asp-page="/Company/FileEmployer/Index"> کارفرما</a></li>
<li permission="404"><a class="clik4 " asp-page="/Company/Contact2/Index">مخاطب </a></li>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf4">
<li permission="401"><a class="clik4" asp-page="/Company/FilePage/Index">لیست پرونده ها </a></li>
<li permission="402"><a class="clik4" asp-page="/Company/FilePage/Alerts"> گزارش ها</a></li>
<li permission="403"><a class="clik4" asp-page="/Company/FilePage/Sessions"> جلسات</a></li>
<li permission="404"><a class="clik4 " asp-page="/Company/FileEmployee/Index"> پرسنل</a></li>
<li permission="404"><a class="clik4 " asp-page="/Company/FileEmployer/Index"> کارفرما</a></li>
<li permission="404"><a class="clik4 " asp-page="/Company/Contact2/Index">مخاطب </a></li>
</ul>
</li>
<li class="has_sub" permission="500">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="fa fa-file-text-o"></i>
<span> مدیریت متن </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
</ul>
</li>
@* <li class="has_sub" permission="500">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="fa fa-file-text-o"></i>
<span> مدیریت متن </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf5">
<li permission="501"><a class="clik5 " asp-page="/Company/TextManager/Index"> لیست متون </a></li>
<li permission="502"><a class="clik5 " asp-page="/Company/OriginalTitle/Index">عنوان </a></li>
<li permission="503"><a class="clik5 " asp-page="/Company/Subtitle/Index"> بخش </a></li>
<li permission="504"><a class="clik5 " asp-page="/Company/Chapter/Index"> فصل </a></li>
<li permission="505"><a class="clik5 " asp-page="/Company/Module/Index">ماژول </a></li>
</ul>
<ul class="list-unstyled sdf5">
<li permission="501"><a class="clik5 " asp-page="/Company/TextManager/Index"> لیست متون </a></li>
<li permission="502"><a class="clik5 " asp-page="/Company/OriginalTitle/Index">عنوان </a></li>
<li permission="503"><a class="clik5 " asp-page="/Company/Subtitle/Index"> بخش </a></li>
<li permission="504"><a class="clik5 " asp-page="/Company/Chapter/Index"> فصل </a></li>
<li permission="505"><a class="clik5 " asp-page="/Company/Module/Index">ماژول </a></li>
</ul>
</li>
</li> *@
<li class="has_sub" permission="700">
@* <li class="has_sub" permission="700">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="fa fa-folder-open">
</i><span> مدیریت لوایح </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf7">
<li permission="701"><a class="clik7 " asp-page="/Company/Bill/Index"> لیست لوایح </a></li>
<li permission="702"><a class="clik7 " asp-page="/Company/Bill/CreateBill">ایجاد</a></li>
<li permission="703"><a class="clik7 " asp-page="/Company/Contact2/Index">مخاطب </a></li>
</ul>
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="fa fa-folder-open">
</i><span> مدیریت لوایح </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf7">
<li permission="701"><a class="clik7 " asp-page="/Company/Bill/Index"> لیست لوایح </a></li>
<li permission="702"><a class="clik7 " asp-page="/Company/Bill/CreateBill">ایجاد</a></li>
<li permission="703"><a class="clik7 " asp-page="/Company/Contact2/Index">مخاطب </a></li>
</ul>
</li>
<li class="has_sub" permission="600">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-assignment"></i>
<span> مدیریت وظایف </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf6">
<li permission="601"><a class="clik6" asp-page="/Company/TaskManager/Index">لیست وظایف </a></li>
<li permission="602"><a class="clik6" asp-page="/Company/TaskManager/TaskTitle">لیست عناوین وظیفه </a></li>
</ul>
</li>
<li class="has_sub" permission="800">
</li> *@
@* <li class="has_sub" permission="600">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-assignment"></i>
<span> مدیریت وظایف </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf6">
<li permission="601"><a class="clik6" asp-page="/Company/TaskManager/Index">لیست وظایف </a></li>
<li permission="602"><a class="clik6" asp-page="/Company/TaskManager/TaskTitle">لیست عناوین وظیفه </a></li>
</ul>
</li> *@
<li class="has_sub" permission="900">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="md md-assignment"></i>
<span> مدیریت وظایف </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf6">
<li permission="901"><a class="clik6" asp-area="AdminNew" asp-page="/Company/Task/Index">وظایف</a></li>
<li permission="902"><a class="clik6" asp-area="AdminNew" asp-page="/Company/Task/Group">گروهبندی </a></li>
<li permission="903"><a class="clik6" asp-area="AdminNew" asp-page="/Company/Task/Create">وظیفه جدید </a></li>
</ul>
</li>
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="fa fa-folder-open"></i>
<span> بیمه </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf8">
<li permission="801"><a class="clik8 " style="padding: 10px 94px 10px 0px;" asp-page="/Company/InsuranceList/Index"> صفحه اصلی </a></li>
<li permission="801"><a class="clik8 " style="padding: 10px 94px 10px 0px;" asp-page="/Company/InsuranceJob/Index"> لیست مشاغل مقطوع </a></li>
<li permission="801"><a class="clik8 " style="padding: 10px 94px 10px 0px;" asp-page="/Company/InsuranceJobItem/Index"> لیست مبالغ مشاغل مقطوع </a></li>
</ul>
<li class="has_sub" permission="800">
<a class="waves-effect MainMenuItem">
<div class="menuTitle">
<i class="fa fa-folder-open"></i>
<span> بیمه </span>
</div>
<span class="pull-right">
<i class="md md-add"></i>
</span>
</a>
<ul class="list-unstyled sdf8">
<li permission="801"><a class="clik8 " style="padding: 10px 94px 10px 0px;" asp-page="/Company/InsuranceList/Index"> صفحه اصلی </a></li>
<li permission="801"><a class="clik8 " style="padding: 10px 94px 10px 0px;" asp-page="/Company/InsuranceJob/Index"> لیست مشاغل مقطوع </a></li>
<li permission="801"><a class="clik8 " style="padding: 10px 94px 10px 0px;" asp-page="/Company/InsuranceJobItem/Index"> لیست مبالغ مشاغل مقطوع </a></li>
</ul>
</li>
</li>
</ul>
<div class="clearfix"></div>
</div>
<div class="clearfix"></div>
</ul>
<div class="clearfix"></div>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<script src="~/AdminTheme/assets/js/bootstrap.js"></script>
<script src="~/AdminTheme/assets/js/jquery.min.js"></script>
<style>
.submenu {
background: #dce8dc;
padding: 21px 92px 18px 0px;
}
.submenu {
background: #dce8dc;
padding: 21px 92px 18px 0px;
}
</style>
@*@section Script
{

View File

@@ -0,0 +1,250 @@
@page
@model ServiceHost.Areas.AdminNew.Pages.Company.Task.CreateModel
@using Version = _0_Framework.Application.Version
@{
ViewData["title"] = " - وظیفه جدید";
}
<script src="~/AssetsClient/js/jquery-ui.js"></script>
@section Styles {
<link href="~/assetsclient/css/task-manager-create.css" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/create.css" rel="stylesheet" />
}
<div class="container-fluid">
<div class="row">
<div class="col p-0 m-0 d-flex align-items-center justify-content-between">
<div class="col d-flex align-items-center justify-content-start">
<img src="~/AssetsClient/images/rollcall.png" alt="" class="img-fluid me-2" style="width: 45px;"/>
<div>
<h4 class="title d-flex align-items-center">وظایف جدید</h4>
<div class="title d-flex align-items-center">کارگاه نورداد مهر گستر کاسپین</div>
</div>
</div>
<div>
<a asp-page="/Company/Task/Index" class="back-btn" type="button">
<span>بازگشت</span>
</a>
</div>
</div>
</div>
<!-- List Items -->
<div class="row p-0">
<div class="card tm-create p-2">
<div class="col-12">
<form role="form" method="post" id="create-form" enctype="multipart/form-data" autocomplete="off">
@* <input type="hidden" asp-for="Command.SenderId" value="@Model.SenderId" /> *@
<div class="row">
<div class="col-12 col-lg-6 col-xl-4">
<div class="row">
<div class="col-4">
<div permission="90310" class="form-check form-checked">
<input class="form-check-input" type="radio" name="selectMemberOrGroup" id="memberSelect" checked>
<label class="form-check-label" for="memberSelect">
انتخاب اعضاء
</label>
</div>
<div permission="90311" class="form-check form-checked">
<input class="form-check-input" type="radio" name="selectMemberOrGroup" id="groupSelect">
<label class="form-check-label" for="groupSelect">
انتخاب گروهی
</label>
</div>
</div>
<div class="col-8">
<div class="from-group" id="select2MemberList">
<select class="form-select select2Member" multiple="multiple" asp-for="Command.ReceiverId">
<option value="@Model.Id">خودم</option>
@foreach (var item in Model.AccountsList)
{
<option value="@item.Value">@item.Text</option>
}
</select>
</div>
<div class="from-group" id="select2GroupList" style="display: none">
<select class="form-select select2Group" multiple="multiple" asp-for="Command.PositionId">
@foreach (var item in Model.PositionViewModels)
{
<option value="@item.Id">@item.Name</option>
}
</select>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 col-xl-4">
<div class="from-group position-relative">
<input type="text" asp-for="Command.ContractingPartyName" id="partyNameSearch" class="form-control" autocomplete="off" placeholder="طرف حساب">
<div id="partyName" class="selectDiv">
<ul class="searchResult">
</ul>
</div>
</div>
<div class="from-group my-1 position-relative">
<input type="text" asp-for="Command.Title" class="form-control m-0 TaskTitleSearch" placeholder="عنوان وظیفه">
<div permission="90313" class="position-absolute" style="top: 3px; left:3px; cursor: pointer;" onclick="taskSubjectModal()">
<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="#33363F" stroke-width="2" stroke-linecap="round"/>
<path d="M18 12L6 12" stroke="#33363F" stroke-width="2" stroke-linecap="round"/>
</svg>
</div>
<div id="TaskTitle" class="selectTitleDiv">
<ul class="searchTitleResult">
</ul>
</div>
</div>
</div>
<div class="col-12 col-md-8 col-lg-6 col-xl-4">
<div class="row">
<div class="col-8">
<div class="from-group">
<input asp-for="Command.EndTaskDate" type="text" id="EndTaskDate" value="@Model.DateFa" class="form-control text-center date" placeholder="تاریخ">
</div>
<div class="row my-2">
<div class="col-4 pe-0">
<input type="radio" class="tm-rad" name="btnradio" id="today" autocomplete="off" checked>
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="today" style="border-radius: 2; margin:0 2px">امروز</label>
</div>
<div class="col-4 p-0">
<input type="radio" class="tm-rad" name="btnradio" id="tommorow" autocomplete="off">
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="tommorow" style="border-radius: 2; margin:0 2px">فردا</label>
</div>
<div class="col-4 ps-0">
<input type="radio" class="tm-rad" name="btnradio" id="two-day-later" autocomplete="off">
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="two-day-later" style="border-radius: 2; margin:0 2px">پس فردا</label>
</div>
</div>
</div>
<div class="col-4">
<div class="from-group">
<input asp-for="Command.EndTaskTime" id="EndTaskTime" type="text" class="form-control text-center" placeholder="00:00">
</div>
</div>
</div>
</div>
@* <div class="col-5 col-md-4">
<span class="sumDays">مهلت زمانی: </span>
</div> *@
</div>
<div class="row">
<div class="col-12">
<div class="from-group">
<textarea asp-for="Command.Description" id="Command_Description" class="tm-textarea p-2" rows="10" placeholder="توضیحات ..."></textarea>
</div>
</div>
</div>
<div class="row">
<div class="col-12 col-lg-9">
<div class="row">
<div class="col-12 col-lg-11 col-xl-9">
<div class="d-block d-md-flex align-items-center">
<button class="upload-file" id="upload-doc" type="button">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 5C5 3.89543 5.89543 3 7 3H11.75C11.8881 3 12 3.11193 12 3.25V8C12 9.10457 12.8954 10 14 10H18.75C18.8881 10 19 10.1119 19 10.25V19C19 20.1046 18.1046 21 17 21H7C5.89543 21 5 20.1046 5 19V5Z" fill="white"/>
<path d="M13 8V3.60355C13 3.38083 13.2693 3.26929 13.4268 3.42678L18.5732 8.57322C18.7307 8.73071 18.6192 9 18.3964 9H14C13.4477 9 13 8.55228 13 8Z" fill="#29B4B4"/>
<path d="M12 11.5V17.5" stroke="#29B4B4" stroke-linecap="round"/>
<path d="M9 14.5H15" stroke="#29B4B4" stroke-linecap="round"/>
</svg>
<span>بارگذاری تصاویر و مدارک</span>
</button>
<input type="file" class="d-none" asp-for="Command.Document1" id="Command_Document1" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" asp-for="Command.Document2" id="Command_Document2" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" asp-for="Command.Document3" id="Command_Document3" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" asp-for="Command.Document4" id="Command_Document4" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" asp-for="Command.Document5" id="Command_Document5" accept=".pdf,.doc,.docx,.txt, image/*">
<input type="file" class="d-none" asp-for="Command.Document6" id="Command_Document6" accept=".pdf,.doc,.docx,.txt, image/*">
<div class="d-flex justify-content-between align-items-center mx-1" id="upload-container-doc">
<div class="upload-box empty inBox1"></div>
<div class="upload-box empty inBox2"></div>
<div class="upload-box empty inBox3"></div>
<div class="upload-box empty inBox4"></div>
<div class="upload-box empty inBox5"></div>
<div class="upload-box empty inBox6"></div>
</div>
</div>
</div>
<div class="col-12 col-lg-11 col-xl-9">
<div class="d-block d-md-flex align-items-center">
<button class="upload-file record_btn" id="upload-voice" type="button">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="9" y="3" width="6" height="11" rx="3" fill="#29B4B4" stroke="white" stroke-width="1.2" stroke-linejoin="round"/>
<path d="M5.4 11C5.4 12.7504 6.09536 14.4292 7.3331 15.6669C8.57084 16.9046 10.2496 17.6 12 17.6C13.7504 17.6 15.4292 16.9046 16.6669 15.6669C17.9046 14.4292 18.6 12.7504 18.6 11" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 21V19" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span style="font-size: 12px">پیام صوتی</span>
</button>
<input type="file" class="d-none" asp-for="Command.Voice" id="Command_Voice">
<div class="d-flex justify-content-between align-items-center mx-1" id="upload-container-voice">
<div class="upload-box-voice empty" id="msg_box"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-12 text-center">
<a asp-page="/Company/Task/Index" id="cancel" class="btn-tm-cancel m-1 text-white" type="button">
<span>انصراف</span>
</a>
<button type="button" id="save" class="btn-tm-save m-1">
<span>ارسال</span>
</button>
@* <a href="#" id="save" class="btn-tm-save">ارسال</a> *@
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- End List Items -->
<!-- مودال -->
<div class="modal fade assignTo" id="MainModal" tabindex="-1" data-bs-backdrop="static" aria-labelledby="assignToLabel" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-xl-taskTime modal-dialog-centered">
<div class="w-100" id="ModalContent">
</div>
</div>
</div>
<!-- مودال -->
@section Script {
<script src="~/assetsclient/js/site.js?ver=@Version.StyleVersion"></script>
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script>
var antiForgeryToken = $('@Html.AntiForgeryToken()').val();
var createTaskSaveAjax = '@Url.Page("/Company/Task/Create", "CreateSaveTask")';
var searchContractingPartiesAjax = '@Url.Page("./Create", "SearchContractingParties")';
var searchTaskSubject = '@Url.Page("./Create", "SearchTaskSubject")';
var taskSubject = '@Url.Page("/Company/Task/Create", "TaskSubject")';
</script>
<script src="~/assetsadminnew/tasks/js/create.js"></script>
}

View File

@@ -0,0 +1,232 @@
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.TaskSubject;
using CompanyManagment.App.Contracts.PersonalContractingParty;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
{
public class CreateModel : PageModel
{
private readonly ITaskApplication _taskApplication;
private readonly IAccountApplication _accountApplication;
private readonly IPersonalContractingPartyApp _personalContractingPartyApp;
private readonly IAuthHelper _authHelper;
private readonly IPersonalContractingPartyApp _contractingPartyApp;
private readonly IPositionApplication _positionApplication;
private readonly ITaskSubjectApplication _taskSubjectApplication;
public CreateModel(ITaskApplication taskApplication, IAccountApplication accountApplication, IPersonalContractingPartyApp personalContractingPartyApp, IAuthHelper authHelper, IPersonalContractingPartyApp contractingPartyApp, IPositionApplication positionApplication, ITaskSubjectApplication taskSubjectApplication)
{
_taskApplication = taskApplication;
_accountApplication = accountApplication;
_personalContractingPartyApp = personalContractingPartyApp;
_authHelper = authHelper;
_contractingPartyApp = contractingPartyApp;
_positionApplication = positionApplication;
_taskSubjectApplication = taskSubjectApplication;
}
public CreateTask Command { get; set; }
public SelectList AccountsList { get; set; }
public List<PositionViewModel> PositionViewModels { get; set; }
public long Id { get; set; }
public string DateFa;
public IActionResult OnGet()
{
if (_authHelper.GetPermissions().Any(x=>x==903))
{
var accounts = _accountApplication.GetAccountLowerPositionvalue();
AccountsList = new SelectList(accounts, "Id", "Fullname");
PositionViewModels = _positionApplication.GetLowerPosition();
DateFa = DateTime.Now.ToFarsi();
Id = _authHelper.CurrentAccountId();
return Page();
}
else
{
return Forbid();
}
}
public IActionResult OnPostCreateSaveTask(CreateTask Command)
{
Command.SenderId= _authHelper.CurrentAccountId();
var result = _taskApplication.CreateTask(Command);
return new JsonResult(new
{
IsSuccedded = result.IsSuccedded,
message = result.Message,
});
}
public IActionResult OnGetSearchContractingParties(string searchName)
{
var list =_contractingPartyApp.SearchByName(searchName);
return new JsonResult(new
{
isSuccess=true,
list =list,
});
}
// برای محاسبه تاریخ و ساعت
#region ComputeDay
//public IActionResult OnGetComputeDay(string date, string time)
//{
// if (string.IsNullOrWhiteSpace(time))
// {
// time = "23:59";
// }
// if (!string.IsNullOrWhiteSpace(date))
// {
// var endTime = Convert.ToDateTime(time);
// var dateDeadline = date.ToGeorgianDateTime();
// dateDeadline = dateDeadline.AddHours(endTime.Hour).AddMinutes(endTime.Minute);
// var dateNow = DateTime.Now;
// if (dateDeadline > dateNow)
// {
// var daysSpan = ((dateDeadline.Date - dateNow.Date).TotalDays);
// if (!string.IsNullOrWhiteSpace(time))
// {
// var hourlyDate = dateDeadline.ToLocalTime() - DateTime.Now.ToLocalTime();
// var hours = dateDeadline.Hour - DateTime.Now.Hour;
// if (hours > 0&& (int)daysSpan > 0)
// {
// return new JsonResult(new
// {
// res = $"{(int)daysSpan} روز " + hours + " " + "ساعت ",
// });
// }
// else if (hours == 0&&(int)daysSpan>0)
// {
// return new JsonResult(new
// {
// res = $"{(int)daysSpan} روز "
// });
// }
// else if (hours>0&& (int)daysSpan == 0)
// {
// return new JsonResult(new
// {
// res = $"{hours} ساعت",
// });
// }
// }
// return new JsonResult(new
// {
// res = $"{(int)daysSpan} روز",
// });
// }
// else
// {
// return new JsonResult(new
// {
// status = false,
// res = "مهلت انجام پروژه نمی تواند کوچکتر از گذشته باشد.",
// });
// }
// }
// return new JsonResult(new
// {
// res = "",
// });
//}
#endregion
// برای باز کردن مودال عنوان دلبخواه
public IActionResult OnGetTaskSubject()
{
return Partial("CreateCRUDTaskSubjectModal");
}
// برای گرفتن عنوان دلبخواه
public IActionResult OnGetListTaskSubject()
{
var result = _taskSubjectApplication.GetAll("").OrderByDescending(x=>x.Id);
return new JsonResult(new
{
result
});
}
// برای ذخیره عنوان دلبخواه
public IActionResult OnPostCreateTaskSubject(string subject)
{
var result = _taskSubjectApplication.Create(subject);
return new JsonResult(new
{
isSuccess = result.IsSuccedded,
message = result.Message,
});
}
// برای ویرایش عنوان دلبخواه
public IActionResult OnPostEditTaskSubject(long id, string subject)
{
var model = new TaskSubjectViewModel()
{
Id = id,
Subject = subject
};
var result = _taskSubjectApplication.Edit(model);
return new JsonResult(new
{
isSuccess = result.IsSuccedded,
message = result.Message,
});
}
// برای حذف عنوان دلبخواه
public IActionResult OnPostRemoveTaskSubject(long id)
{
var result = _taskSubjectApplication.Delete(id);
return new JsonResult(new
{
isSuccess = result.IsSuccedded,
message = result.Message,
});
}
public IActionResult OnGetSearchTaskSubject(string searchSubject)
{
var list = _taskSubjectApplication.GetAll(searchSubject);
return new JsonResult(new
{
isSuccess = true,
list = list,
});
}
}
}

View File

@@ -0,0 +1,70 @@
@using Version = _0_Framework.Application.Version
<!-- sweet alerts -->
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
<style>
.sweet-alert {
font-family: 'IranSans' !important
}
</style>
<div class="modal-content">
<div class="modal-header d-block text-center position-relative">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="morakhasiEstehghaghiModalLabel">لیست عنوان دلبخواه</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row ">
<div class="col-12">
<div permission="90314" class="d-flex align-items-center justify-content-between mb-3">
<div class="from-group w-100">
<input type="text" id="NewSubject" class="form-control" placeholder="عنوان جدید">
</div>
<div class="from-group">
<button class="btn-add" id="btn-add">
<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" />
</svg>
</button>
</div>
</div>
</div>
<div class="col-12">
<div class="from-group position-relative">
<input type="text" id="SearchSubject" class="form-control" placeholder="جستجو" onkeyup="searchSubjectTask()">
<div class="position-absolute" style="top: 3px; left:3px;">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="11" cy="11" r="7" stroke="#33363F" stroke-width="2" />
<path d="M20 20L17 17" stroke="#33363F" stroke-width="2" stroke-linecap="round" />
</svg>
</div>
</div>
</div>
<div class="col-12" id="loadSubjectList" style="height: 260px; overflow: auto;">
</div>
</div>
</div>
</div>
</div>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script>
var antiForgeryToken = $('@Html.AntiForgeryToken()').val();
var CreateTaskSubjectAjax = '@Url.Page("./Create", "CreateTaskSubject")';
var listTaskSubjectAjax = '@Url.Page("./Create", "ListTaskSubject")';
var editTaskSubjectAjax = '@Url.Page("./Create", "EditTaskSubject")';
var RemoveTaskSubjectAjax = '@Url.Page("./Create", "RemoveTaskSubject")';
</script>
<script src="~/assetsadminnew/tasks/js/createcrudtasksubjectmodal.js"></script>

View File

@@ -0,0 +1,174 @@
@model AccountManagement.Application.Contracts.Task.EditTask
@using Version = _0_Framework.Application.Version
<script src="~/AssetsClient/js/jquery-ui.js"></script>
<link href="~/assetsclient/css/task-manager-create.css" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/detailmodal.css" rel="stylesheet" />
<div class="modal-content">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
@{
if (Model.IsDone)
{
<h5 class="modal-title" id="assignToLabel">جزئیات وظیفه</h5>
}
else
{
<h5 class="modal-title" id="assignToLabel">جزئیات</h5>
}
}
</div>
<div class="modal-body detailTask">
<div class="container-fluid">
<div class="row mb-1">
<div class="col-12 col-sm-3 text-end">
<div class="detailTitle">طرف حساب: </div>
</div>
<div class="col-12 col-sm-9 border rounded">
<div class="detailTitleText">@Model.ContractingPartyName</div>
</div>
</div>
<div class="row mb-1">
<div class="col-12 col-sm-3 text-end">
<div class="detailTitle">عنوان وظیفه: </div>
</div>
<div class="col-12 col-sm-9 border rounded">
<div class="detailTitleText">@Model.Title</div>
</div>
</div>
<div class="row mb-1">
<div class="col-12 col-sm-3 text-end">
<div class="detailTitle">تاریخ انجام: </div>
</div>
<div class="col-12 col-sm-9 border rounded">
<div class="detailTitleText">@Model.EndTaskDate</div>
</div>
</div>
<div class="row mb-1">
<div class="col-12 col-sm-3 text-end">
<div class="detailTitle">توضیحات: </div>
</div>
<div class="col-12 col-sm-9 border rounded p-2 overflow-auto">
<p class="">@Html.Raw(Model.Description)</p>
</div>
</div>
@if (!string.IsNullOrWhiteSpace(Model.CompleteDescription))
{
<div class="row mb-1">
<div class="col-12 col-sm-3 text-end">
<div class="detailTitle">توضیحات تکمیلی: </div>
</div>
<div class="col-12 col-sm-9 border rounded p-2 overflow-auto">
<p class="">@Html.Raw(Model.CompleteDescription)</p>
</div>
</div>
}
<div class="row mb-1">
<div class="col-12 col-sm-3 text-end">
<div class="detailTitle">فایل: </div>
</div>
<div class="col-12 col-sm-9" id="upload-container">
<div class="d-block d-md-flex align-items-center">
@foreach (var item in Model.medias)
{
if (item.Category == "فایل")
{
<div class="d-flex justify-content-between align-items-center mx-1">
<div class="upload-box empty">
@if (item.Path.EndsWith(".jpg") || item.Path.EndsWith(".jpeg") || item.Path.EndsWith(".png") || item.Path.EndsWith(".gif") || item.Path.EndsWith(".webp"))
{
<section class="gallery">
<section class="container">
<div class="row p-0">
<div class="lightbox_img_wrap">
<img class="lightbox-enabled" src="@Url.Page("./Index", "ShowPicture", new { filePath = item.Path })" data-imgsrc="@Url.Page("./Index", "ShowPicture", new { filePath = item.Path })" id="@Model.Id" />
</div>
</div>
</section>
</section>
<section class="lightbox-container">
<span class="material-symbols-outlined material-icons lightbox-btn left" id="left">
قبلی
</span>
<span class="material-symbols-outlined material-icons lightbox-btn right" id="right">
بعدی
</span>
<span id="close" class="close material-icons material-symbols-outlined">
بستن
</span>
<div class="lightbox-image-wrapper">
<img alt="lightboximage" class="lightbox-image">
</div>
</section>
}
else
{
<a href="@Url.Page("./Index", "GetFile", new { filePath = item.Path ,id=Model.Id})">دانلود</a>
}
</div>
</div>
}
}
</div>
</div>
</div>
<div class="row mb-1">
<div class="col-12 col-sm-3 text-end">
<div class="detailTitle">پیام صوتی: </div>
</div>
<div class="col-12 col-sm-9 overflow-hidden" id="upload-container-voice">
@foreach (var item in Model.medias)
{
if (item.Category == "صوت")
{
<audio controls style="width: 100%; height: 30px">
<source src='@Url.Page("./Index", "ShowVoice", new { filePath = item.Path })' type="audio/ogg">
Your browser does not support the audio element.
</audio>
}
}
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="row">
<div class="col-12 text-end">
<button type="button" class="btn-cancel2" data-bs-dismiss="modal">بستن</button>
</div>
@* <div class="col-6 text-start">
<button id="save" type="button" class="btn-register text-white">ثبت</button>
<button style="display: none;" type="submit" id="saveFinaly"></button>
</div> *@
</div>
</div>
</div>
<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>
var antiForgeryToken = $('@Html.AntiForgeryToken()').val()
var createSaveTaskAjax = '@Url.Page("/Company/Task/Create", "CreateSaveTask")';
</script>
<script src="~/assetsadminnew/tasks/js/detailmodal.js"></script>

View File

@@ -0,0 +1,284 @@
@model AccountManagement.Application.Contracts.Task.EditTaskPartialViewModel
@using System.Web
@using Microsoft.AspNetCore.Mvc.TagHelpers
@using Version = _0_Framework.Application.Version
@{
int fileIndex = 0;
int i = 1;
<script src="~/AssetsClient/js/jquery-ui.js"></script>
<link href="~/assetsclient/css/task-manager-create.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/edit.css" rel="stylesheet" />
}
<div class="modal-content">
<div class="modal-header d-block text-center position-relative">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="morakhasiEstehghaghiModalLabel">ویرایش وظیفه</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row p-0">
<div class="card tm-create p-2">
<div class="col-12">
<form role="form" method="post" id="edit-form" enctype="multipart/form-data" autocomplete="off">
<input type="hidden" asp-for="EditTask.SenderId" />
<input type="hidden" asp-for="EditTask.Id" />
<div class="row">
<div class="col-12 col-lg-6 col-xl-4">
<div class="row">
<div class="col-3">
<div class="form-check form-checked">
@* <input class="form-check-input" type="radio" name="selectMemberOrGroup" id="memberSelect" checked> *@
<label class="form-check-label" for="memberSelect">
انتخاب اعضاء
</label>
</div>
</div>
<div class="col-9">
<div class="from-group" id="select2MemberList">
<select class="form-select select2Member" multiple="multiple" asp-for="EditTask.ReceiverId">
@if (Model.EditTask.ReceiverId.Any(x => x == Model.Id))
{
<option value="@Model.Id" selected>خودم</option>
}
else
{
<option value="@Model.Id">خودم</option>
}
@foreach (var item in Model.AccountList)
{
@if (Model.EditTask.ReceiverId.Any(x => x == item.Id))
{
<option value="@item.Id" selected>@item.Fullname</option>
}
else
{
<option value="@item.Id">@item.Fullname</option>
}
}
</select>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 col-xl-4">
<div class="from-group position-relative">
<input type="text" asp-for="EditTask.ContractingPartyName" id="partyNameSearch" class="form-control" autocomplete="off" placeholder="طرف حساب">
<div id="partyName" class="selectDiv">
<ul class="searchResult">
</ul>
</div>
</div>
<div class="from-group my-1">
<input type="text" asp-for="EditTask.Title" class="form-control m-0" placeholder="عنوان وظیفه">
</div>
</div>
<div class="col-12 col-md-8 col-lg-6 col-xl-4">
<div class="row">
<div class="col-8">
<div class="from-group">
<input asp-for="EditTask.EndTaskDate" type="text" id="EndTaskDate" class="form-control text-center date" placeholder="تاریخ">
</div>
<div class="row my-2">
<div class="col-4 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="border-radius: 2px; margin: 0 2px">امروز</label>
</div>
<div class="col-4 p-0">
<input type="radio" class="tm-rad" name="btnradio" id="tommorow" autocomplete="off">
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="tommorow" style="border-radius: 2px; margin: 0 2px">فردا</label>
</div>
<div class="col-4 ps-0">
<input type="radio" class="tm-rad" name="btnradio" id="two-day-later" autocomplete="off">
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="two-day-later" style="border-radius: 2px; margin: 0 2px">پس فردا</label>
</div>
</div>
</div>
<div class="col-4">
<div class="from-group">
<input asp-for="EditTask.EndTaskTime" id="EndTaskTime" type="text" class="form-control text-center" placeholder="00:00">
</div>
</div>
</div>
</div>
@* <div class="col-5 col-md-4">
<span class="sumDays">مهلت زمانی: </span>
</div> *@
</div>
<div class="row">
<div class="col-12">
<div class="from-group">
<textarea asp-for="EditTask.Description" id="Command_Description" class="tm-textarea p-2" rows="10" placeholder="توضیحات ...">
</textarea>
@* @{
// var Description = HttpUtility.HtmlDecode(Model.EditTask.Description);
var Description = @Html.Raw(Model.EditTask.Description);
} *@
@* @Html.TextAreaFor(x => Model.EditTask.Description, new { @class = "tm-textarea p-2", @id = "Command_Description" }) *@
</div>
</div>
</div>
<div class="row">
<div class="col-12 col-lg-9">
<div class="row">
<div class="col-12 col-lg-11 col-xl-9">
<div class="d-block d-md-flex align-items-center">
<button class="upload-file" id="upload-doc" type="button">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 5C5 3.89543 5.89543 3 7 3H11.75C11.8881 3 12 3.11193 12 3.25V8C12 9.10457 12.8954 10 14 10H18.75C18.8881 10 19 10.1119 19 10.25V19C19 20.1046 18.1046 21 17 21H7C5.89543 21 5 20.1046 5 19V5Z" fill="white" />
<path d="M13 8V3.60355C13 3.38083 13.2693 3.26929 13.4268 3.42678L18.5732 8.57322C18.7307 8.73071 18.6192 9 18.3964 9H14C13.4477 9 13 8.55228 13 8Z" fill="#29B4B4" />
<path d="M12 11.5V17.5" stroke="#29B4B4" stroke-linecap="round" />
<path d="M9 14.5H15" stroke="#29B4B4" stroke-linecap="round" />
</svg>
<span>بارگذاری تصاویر و مدارک</span>
</button>
<div class="d-flex justify-content-between align-items-center mx-1">
@foreach (var item in Model.EditTask.medias)
{
if (item.Category == "فایل")
{
var inBox = "inBox" + i;
<div class="upload-box empty @inBox">
<input type="text" class="d-none" id="EditTask_Document@(i)" name="EditTask_Document@(i)">
@if (item.Path.EndsWith(".jpg") || item.Path.EndsWith(".jpeg") || item.Path.EndsWith(".png") || item.Path.EndsWith(".gif") || item.Path.EndsWith(".webp"))
{
<img class="lightbox-enabled" src="@Url.Page("./Index", "ShowPicture", new { filePath = item.Path })" id="@Model.Id" />
}
else
{
<a href="@Url.Page("./Index", "GetFile", new { filePath = item.Path, id = Model.Id })">دانلود</a>
}
<div class="b1" style="cursor: pointer;" onclick="remove(@(i), @item.Id)">
<svg width="16" height="16" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="10" height="10" rx="5" fill="#FF4A4A" /><path d="M7 7L3 3" stroke="#FFFEFE" stroke-linecap="round" stroke-linejoin="round" /><path d="M3 7L7 3" stroke="#FFFEFE" stroke-linecap="round" stroke-linejoin="round" /></svg>
</div>
</div>
i++;
fileIndex++;
}
}
@for (int inn = fileIndex; inn < 6; inn++)
{
<div class="upload-box empty inBox@(inn + 1)">
<input type="file" class="d-none" id="EditTask_Document@(inn+1)" name="EditTask.Document@(inn+1)" accept=".pdf,.doc,.docx,.txt, image/*">
</div>
}
<div id="deletedItems" style="display: none">
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-11 col-xl-9">
<div class="d-block d-md-flex align-items-center">
@if (Model.EditTask.medias.Any(x => x.Category == "صوت"))
{
var voice = Model.EditTask.medias.First(x => x.Category == "صوت");
<div id="OldVoice" class="d-block d-md-flex align-items-center w-100">
<button class="upload-file v1" type="button" onclick="removeVoice(@voice.Id)">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="9" y="3" width="6" height="11" rx="3" fill="#29B4B4" stroke="white" stroke-width="1.2" stroke-linejoin="round" />
<path d="M5.4 11C5.4 12.7504 6.09536 14.4292 7.3331 15.6669C8.57084 16.9046 10.2496 17.6 12 17.6C13.7504 17.6 15.4292 16.9046 16.6669 15.6669C17.9046 14.4292 18.6 12.7504 18.6 11" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M12 21V19" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
<span style="font-size: 12px">حذف</span>
</button>
<div class="upload-box empty v1" id="upload-container-voice" style="width: 370px;">
<audio controls style="width: 100%; height: 30px">
<source src='@Url.Page("./Index", "ShowVoice", new { filePath = voice.Path })' type="audio/ogg">
Your browser does not support the audio element.
</audio>
</div>
</div>
<div id="NewVoice" class="d-none align-items-center w-100">
<button class="upload-file record_btn v2" id="upload-voice" type="button">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="9" y="3" width="6" height="11" rx="3" fill="#29B4B4" stroke="white" stroke-width="1.2" stroke-linejoin="round" />
<path d="M5.4 11C5.4 12.7504 6.09536 14.4292 7.3331 15.6669C8.57084 16.9046 10.2496 17.6 12 17.6C13.7504 17.6 15.4292 16.9046 16.6669 15.6669C17.9046 14.4292 18.6 12.7504 18.6 11" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M12 21V19" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
<span style="font-size: 12px">پیام صوتی</span>
</button>
<input type="file" class="d-none v2" asp-for="EditTask.Voice" id="EditTask_Voice">
<div class="d-flex justify-content-between align-items-center mx-1 v2" id="upload-container-voice">
<div class="upload-box-voice empty" id="msg_box"></div>
</div>
</div>
}
else
{
<button class="upload-file record_btn v2" id="upload-voice" type="button">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="9" y="3" width="6" height="11" rx="3" fill="#29B4B4" stroke="white" stroke-width="1.2" stroke-linejoin="round" />
<path d="M5.4 11C5.4 12.7504 6.09536 14.4292 7.3331 15.6669C8.57084 16.9046 10.2496 17.6 12 17.6C13.7504 17.6 15.4292 16.9046 16.6669 15.6669C17.9046 14.4292 18.6 12.7504 18.6 11" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M12 21V19" stroke="white" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
<span style="font-size: 12px">پیام صوتی</span>
</button>
<input type="file" class="d-none v2" asp-for="EditTask.Voice">
<div class="d-flex justify-content-between align-items-center mx-1 v2" id="upload-container-voice">
<div class="upload-box-voice empty" id="msg_box"></div>
</div>
}
</div>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-12 text-center">
<a asp-page="/Company/Task/Index" id="cancel" class="btn-tm-cancel m-1 text-white" type="button">
<span>انصراف</span>
</a>
<button type="button" id="save" class="btn-tm-save m-1">
<span>ویرایش</span>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script>
var AntiForgeryToken = $('@Html.AntiForgeryToken()').val();
var EditSaveTask = '@Url.Page("/Company/Task/Index", "EditSaveTask")';
var SearchContractingParties = '@Url.Page("./Create", "SearchContractingParties")';
</script>
<script src="~/assetsadminnew/tasks/js/edit.js"></script>

View File

@@ -0,0 +1,371 @@
@page
@using Version = _0_Framework.Application.Version
@model ServiceHost.Areas.AdminNew.Pages.Company.Task.GroupModel
@{
ViewData["Title"] = " - " + "کارگاه";
int index = 1;
int i = 0;
}
@section Styles {
<link href="~/AssetsClient/css/table-style.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/table-responsive.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsclient/css/table-grid.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsclient/css/operation-button.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsclient/css/task-manager-list.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsclient/css/taskgroup.css?ver=@Version.StyleVersion" rel="stylesheet" />
<!-- sweet alerts -->
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
<style>
/* Start Select2 */
.select2.select2-container .select2-selection {
display: flex !important;
height: 0 !important;
padding: 0px;
}
.select2.select2-container .select2-selection--multiple .select2-selection__rendered {
margin: 0;
}
.select2-container--default .select2-search--inline .select2-search__field {
line-height: 32px;
padding: 0 0;
font-family: 'IRANYekanX';
}
/* End Select2 */
.sweet-alert {
font-family: 'IranSans' !important
}
</style>
}
<div class="row p-0 mb-3">
<div class="col p-0 m-0 d-flex align-items-center justify-content-between">
<div>
<h4 class="title d-flex align-items-center">عملیات گروه‌بندی وظیفه</h4>
</div>
<div>
<a asp-page="/Company/Task/Index" class="back-btn" type="button">
<span>بازگشت</span>
</a>
</div>
</div>
</div>
<div class="row p-0">
<div class="col-12 p-0 mb-2">
<button permission="90210" class="btnCreateNew" type="button" onclick="CreateGroupModal()">
ساخت گروه
</button>
</div>
<div class="col-12 col-md-5 p-0 pe-1">
@foreach (var item in Model.PositionViewModels)
{
<div class="bg-white p-3 mb-2 rounded-3 d-flex align-items-center justify-content-between w-100 btnPosition">
<input value=@item.Id class="positionId" type="hidden" />
<div class="row-index">
<span>@(index++)</span>
</div>
<div class="title-group">
<p class="m-0">نام گروه:</p>
<h4 class="m-0">@item.Name</h4>
</div>
<div class="title-group">
<p class="m-0">سطح گروه: @item.Value</p>
<p class="m-0">تعداد اعضاء: @item.CountUsers</p>
</div>
<div class="d-flex align-items-center">
<button permission="90211" type="button" class="btn-delete" onclick="removeConfirm(@item.Id)">
<svg width="24" height="24" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.26733 12.4805L8.26733 10.036" stroke="#BF3737" stroke-linecap="round"/>
<path d="M12.2865 12.4805L12.2865 10.036" stroke="#BF3737" stroke-linecap="round"/>
<path d="M3.04224 5.96094H17.5115V5.96094C16.7544 5.96094 16.3758 5.96094 16.0699 6.06212C15.4692 6.26083 14.9979 6.73211 14.7992 7.33286C14.698 7.63875 14.698 8.0173 14.698 8.7744V12.5535C14.698 14.4391 14.698 15.382 14.1122 15.9677C13.5264 16.5535 12.5836 16.5535 10.698 16.5535H9.8557C7.97008 16.5535 7.02727 16.5535 6.44148 15.9677C5.8557 15.382 5.8557 14.4391 5.8557 12.5535V8.7744C5.8557 8.0173 5.8557 7.63875 5.75452 7.33286C5.55581 6.73211 5.08453 6.26083 4.48378 6.06212C4.17789 5.96094 3.79934 5.96094 3.04224 5.96094V5.96094Z" stroke="#BF3737" stroke-linecap="round"/>
<path d="M8.26727 3.51423C8.26727 3.51423 8.66919 2.69922 10.2769 2.69922C11.8846 2.69922 12.2865 3.51403 12.2865 3.51403" stroke="#BF3737" stroke-linecap="round"/>
</svg>
</button>
<button permission="90212" type="button" class="btn-add" onclick="AddToGroupModal(@item.Id)">
افزودن پرسنل
</button>
</div>
</div>
}
</div>
<div class="col-12 col-md-7 p-0 ps-1">
<div class="wrapper list-box bg-white w-100 card-group1">
<div class="Rtable Rtable--5cols Rtable--collapse">
<div class="Rtable-row Rtable-row--head align-items-center d-flex">
<div class="Rtable-cell column-heading">ردیف</div>
<div class="Rtable-cell column-heading">نام پرسنل</div>
<div class="Rtable-cell column-heading">سطح</div>
<div class="Rtable-cell column-heading text-end">عملیات</div>
</div>
<div class="w-100 overflow-auto" id="loadAccountItems">
</div>
</div>
</div>
</div>
</div>
<!-- مودال -->
<div id="MainModal" class="modal fade createNewGroup" aria-labelledby="myModalLabel" data-bs-backdrop="static" aria-hidden="true" tabindex="-1" style="display: none;">
<div class="modal-dialog modal-xl-taskTime modal-dialog-centered">
<div class="modal-content" id="ModalContent">
</div>
</div>
</div>
<!-- مودال -->
@section Script {
<script src="~/AssetsClient/js/jquery-ui.js"></script>
<script src="~/assetsclient/js/site.js?ver=@Version.StyleVersion"></script>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script>
window.onload = function() {
//OpenBootstrapPopup();
};
$('.btnPosition').click(function() {
var positionId = $(this).find('.positionId').val();
loadAjax(positionId)
$(this).addClass('active');
$('.btnPosition').not(this).removeClass('active');
});
function loadAjax(positionId) {
let accountId = $('#btnPosition').val();
var index = 0;
var html = '';
$('#loadAccountItems').html('');
// var searchModel = {};
// searchModel.ContractingPatyId = Number($('#contractingPatyId').val());
$.ajax({
async: false,
contentType: 'charset=utf-8',
dataType: 'json',
type: 'GET',
url: '@Url.Page("./Group", "GroupAccountsAjax")',
data: {
Id: positionId,
},
headers: { "RequestVerificationToken": $('@Html.AntiForgeryToken()').val() },
success: function(response) {
response.accounts.forEach(function(account) {
html += `
<div></div>
<div class="Rtable-row align-items-center position-relative">
<span class="number position-absolute">
${index++}
</span>
<div class="Rtable-cell d-md-block d-none">
<div class="Rtable-cell--heading">
ردیف
</div>
<div class="Rtable-cell--content">
<span class="d-flex justify-content-center">
${index}
</span>
</div>
</div>
<div class="Rtable-cell">
<div class="Rtable-cell--heading">نام پرسنل</div>
<div class="Rtable-cell--content">
${account.fullname}
</div>
</div>
<div class="Rtable-cell">
<div class="Rtable-cell--heading">سطح</div>
<div class="Rtable-cell--content">${account.positionValue}</div>
</div>
<div class="Rtable-cell">
<!-- <div class="Rtable-cell--heading">
</div> -->
<div class="Rtable-cell--content align-items-center d-flex d-md-block text-end">
<button permission="90213" href="" class="btn-delete" onclick="removeMemberConfirm(${account.id},${account.positionId})">
<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-none">حذف</span>
</button>
</div>
</div>
</div>`;
});
$('#loadAccountItems').append(html);
},
failure: function(response) {
console.log(5, response);
}
});
}
$(document).ready(function () {
var positionId = 1;
loadAjax(positionId);
$('.btnPosition:first-child').addClass('active');
});
function CreateGroupModal() {
var goTo = `#showmodal=@Url.Page("/Company/Task/Group", "ShowCreateModal")`;
window.location.href = goTo;
}
//Add To Group Modal
function AddToGroupModal(id) {
var ID = Number(id);
var goTo = `#showmodal=/AdminNew/Company/Task/Group?positionId=${ID}&handler=AccountPosition`;
window.location.href = goTo;
}
function removeConfirm(id) {
swal({
title: "آیا از حذف این گروه اطمینان دارید؟",
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
deleteGroup(id);
}
});
}
function deleteGroup(id) {
var ID = Number(id);
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
url: '@Url.Page("./Group", "RemovePosition")',
headers: { "RequestVerificationToken": $('@Html.AntiForgeryToken()').val() },
data: { positionId: ID },
success: function (response) {
if (response.isSuccedded) {
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
window.location.reload();
}, 1000);
} 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 removeMemberConfirm(memberId ,id) {
swal({
title: "آیا از حذف اطمینان دارید؟",
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
deleteMember(memberId, id);
}
});
}
function deleteMember(memberId, id) {
var ID = Number(id);
var MemberId = Number(memberId);
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
url: '@Url.Page("./Group", "DeleteAccountFromPosition")',
headers: { "RequestVerificationToken": $('@Html.AntiForgeryToken()').val() },
data: { accountIds: MemberId, positionId: ID },
success: function (response) {
if (response.isSuccedded) {
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
window.location.reload();
}, 1000);
} 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);
}
});
}
</script>
}

View File

@@ -0,0 +1,130 @@
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Position;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
{
public class GroupModel : PageModel
{
private readonly IPositionApplication _positionApplication;
private readonly IAccountApplication _accountApplication ;
private readonly IAuthHelper _authHelper;
public GroupModel(IPositionApplication positionApplication, IAccountApplication accountApplication, IAuthHelper authHelper)
{
_positionApplication = positionApplication;
_accountApplication = accountApplication;
_authHelper = authHelper;
}
public List<PositionViewModel> PositionViewModels { get; set; }
public IActionResult OnGet()
{
if (_authHelper.GetPermissions().Any(x=>x==902))
{
PositionViewModels = _positionApplication.GetPositions();
return Page();
}
else
{
return Forbid();
}
}
public IActionResult OnGetGroupAccountsAjax(long id)
{
return new JsonResult(new
{
accounts = _accountApplication.GetAccountsByPositionId(id)
});
}
public IActionResult OnGetShowCreateModal()
{
if (_authHelper.GetPermissions().Any(x=>x==90210))
{
var lastPositionValue = _positionApplication.GetLastPositionValue();
var unusedPositions = _positionApplication.GetUnUsedPositionValues();
var model = new CreatePositionModalViewModel()
{
LastPositionValue = lastPositionValue,
UnUsedPositionValue = unusedPositions
};
return Partial("GroupCreateModal", model);
}
else
{
return Forbid();
}
}
public IActionResult OnPostCreatePosition(CreatePosition command)
{
var res = _positionApplication.Create(command);
return new JsonResult(new
{
isSuccedded=res.IsSuccedded,
message=res.Message,
});
}
public IActionResult OnPostDeleteAccountFromPosition(List<long> accountIds,long positionId)
{
var res= _positionApplication.RemoveAccountListFromPosition(accountIds, positionId);
return new JsonResult(new
{
isSuccedded = res.IsSuccedded,
message = res.Message,
});
}
public IActionResult OnPostRemovePosition(long positionId)
{
var res = _positionApplication.Remove(positionId);
return new JsonResult(new
{
isSuccedded = res.IsSuccedded,
message = res.Message,
});
}
public IActionResult OnGetAccountPosition(long positionId)
{
var accounts = _positionApplication.GetNoPositionAccounts();
var model = new AddAccountToPositionPartialViewModel()
{
Accounts = accounts,
PositionId = positionId
};
return Partial("GroupAddMemberToGroup", model);
}
public IActionResult OnPostAddAccountToPosition(List<long> accounts, long positionId)
{
var res = _positionApplication.SaveAccountPosition(accounts, positionId);
var selfPositionValue = _authHelper.CurrentAccountInfo().PositionValue != null
? _authHelper.CurrentAccountInfo().PositionValue
: 0;
if (res.IsSuccedded&& selfPositionValue < 1)
{
_accountApplication.ReLogin();
}
return new JsonResult(new
{
isSuccedded = res.IsSuccedded,
message = res.Message,
});
}
}
}

View File

@@ -0,0 +1,250 @@
@model AccountManagement.Application.Contracts.Position.AddAccountToPositionPartialViewModel
@using Version = _0_Framework.Application.Version
<script src="~/AssetsClient/js/jquery-ui.js"></script>
<link href="~/assetsclient/css/task-manager-create.css" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
<style>
.modal-content {
/* width: 900px; */
}
.errored {
animation: shake 300ms;
color: #eb3434 !important;
background-color: #fef2f2 !important;
border: 1px solid #eb3434 !important;
border-radius: 7px;
}
/* Start Select2 */
.select2.select2-container .select2-selection {
display: flex !important;
height: 0 !important;
padding: 0px;
}
.select2.select2-container .select2-selection--multiple .select2-selection__rendered {
margin: 0;
}
.select2-container--default .select2-search--inline .select2-search__field {
line-height: 32px;
padding: 0 0;
font-family: 'IRANYekanX';
}
/* End Select2 */
.validTime {
color: #4d7c0f !important;
}
.invalidTime {
color: #b91c1c !important;
}
</style>
<form role="form" method="post" name="create-form" id="create-form" autocomplete="off">
<div class="modal-content" style="height: 450px;">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="createNewGroupLabel">افزودن اعضاء به گروه</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row g-2">
<input type="hidden" asp-for="PositionId" />
@* <div class="col-12">
<div class="from-group" id="select2PositionList">
<select class="form-select select2Position" multiple="multiple" asp-for="Accounts">
@foreach (var item in Model.Accounts)
{
<option value="@item.Id">@item.Fullname</option>
}
</select>
</div>
</div> *@
<div class="col-12">
<div class="d-flex align-items-center justify-content-between mb-3">
<div class="from-group">
<input class="form-check-input selectAll" type="checkbox" name="selectAll" id="selectAll">
<label class="form-check-label" for="selectAll">
انتخاب همه
</label>
</div>
<div class="from-group">
<input type="text" class="form-control" placeholder="جستجو" id="search" onkeyup="searchMember()">
</div>
</div>
</div>
<div class="col-12" style="overflow: auto; height: 230px;" id="PersonnelList">
@foreach (var item in Model.Accounts)
{
<div class="items">
<div class="from-group">
<input class="form-check-input foo" type="checkbox" name="Accounts" id="select-@item.Id" value="@item.Id">
<label class="form-check-label searchItem" for="select-@item.Id">
@item.Fullname
</label>
</div>
</div>
}
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel2" data-bs-dismiss="modal">انصراف</button>
</div>
<div class="col-6 text-start">
<button class="btn-register" id="btn-add">افزودن</button>
</div>
</div>
</div>
</div>
</form>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script>
$(document).ready(function () {
//******************** انتخاب چک باکس ********************
$('.items').click(function() {
var isChecked = $(this).find('input[type="checkbox"]').is(":checked");
if (isChecked) {
$(this).find('input[type="checkbox"]').prop('checked', false);
$(this).removeClass('checked-item');
} else {
$(this).find('input[type="checkbox"]').prop('checked', true);
$(this).addClass('checked-item');
}
});
//******************** انتخاب چک باکس ********************
//******************** انتخاب همه ی چک باکس ها ********************
$(".selectAll").change(function() {
$('input:checkbox').not(this).prop('checked', this.checked);
if ($(this).is(":checked")) {
$('.items').addClass('checked-item');
} else {
$('.items').removeClass('checked-item');
}
});
//******************** انتخاب همه ی چک باکس ها ********************
$('.select2Position').select2({
placeholder: {
text: "انتخاب اعضاء ..."
}
});
$('#btn-add').on('click', function (e) {
e.preventDefault();
var idlist = "";
// if ($('.select2Position').select2('data').length > 0) {
if (($('input:checkbox').is(":checked"))) {
$('.foo').each(function() {
if ($(this).is(":checked")) {
var a = $(this).val();
var b = a + "+";
idlist += b;
}
});
$('#Accounts').val(idlist);
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
url: '@Url.Page("./Group", "AddAccountToPosition")',
headers: { "RequestVerificationToken": $('@Html.AntiForgeryToken()').val() },
data: $('#create-form').serialize(),
success: function (response) {
if (response.isSuccedded) {
$("#groupName").val('');
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
window.location.replace('/AdminNew/Company/Task/Group');
}, 1500);
} 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);
}
});
} else {
$('.alert-msg').show();
$('.alert-msg p').text('لطفا شخصی برای ذخیره انتخاب کنید.');
$("#groupName").addClass('errored');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
$("#groupName").removeClass('errored');
}, 3500);
}
});
});
function searchMember() {
var input, filter, tbody, tr, a, i;
input = document.getElementById("search");
filter = input.value.toUpperCase();
tbody = document.getElementById("PersonnelList");
tr = tbody.getElementsByClassName("items");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByClassName("searchItem")[0];
if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
</script>

View File

@@ -0,0 +1,177 @@
@model AccountManagement.Application.Contracts.Position.CreatePositionModalViewModel
@using Version = _0_Framework.Application.Version
<script src="~/AssetsClient/js/jquery-ui.js"></script>
<link href="~/assetsclient/css/task-manager-create.css" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
<style>
.modal-content {
/* width: 900px; */
}
.errored {
animation: shake 300ms;
color: #eb3434 !important;
background-color: #fef2f2 !important;
border: 1px solid #eb3434 !important;
border-radius: 7px;
}
/* Start Select2 */
.select2.select2-container .select2-selection {
display: flex !important;
height: 0 !important;
padding: 0px;
}
.select2.select2-container .select2-selection--multiple .select2-selection__rendered {
margin: 0;
}
.select2-container--default .select2-search--inline .select2-search__field {
line-height: 32px;
padding: 0 0;
font-family: 'IRANYekanX';
}
/* End Select2 */
.validTime {
color: #4d7c0f !important;
}
.invalidTime {
color: #b91c1c !important;
}
</style>
<form role="form" method="post" name="create-form" id="create-form" autocomplete="off">
<div class="modal-content" style="height: 450px;">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="createNewGroupLabel">ساخت گروه جدید</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row g-2">
<div class="col-12">
<div class="from-group">
<input type="text" class="form-control" name="command.Name" placeholder="عنوان" id="groupName">
</div>
</div>
<div class="col-12">
<div class="from-group" id="select2PositionList">
<select class="form-select" name="command.Value" id="UnUsedPositionValue">
@foreach (var item in Model.UnUsedPositionValue)
{
<option value="@item">سطح @item</option>
}
</select>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel2" data-bs-dismiss="modal">انصراف</button>
</div>
<div class="col-6 text-start">
<button class="btn-register" id="btn-add">افزودن</button>
</div>
</div>
</div>
</div>
</form>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script>
$(document).ready(function () {
$('.select2Position').select2({
placeholder: {
text: "انتخاب سطح ..."
}
});
$('#btn-add').on('click',
function (e) {
e.preventDefault();
var groupName = $("#groupName").val().trim();
if (groupName != '') {
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
url: '@Url.Page("./Group", "CreatePosition")',
headers: { "RequestVerificationToken": $('@Html.AntiForgeryToken()').val() },
data: $('#create-form').serialize(),
success: function (response) {
if (response.isSuccedded) {
$("#groupName").val('');
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
window.location.replace('/AdminNew/Company/Task/Group');
}, 1500);
} 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);
}
});
} else {
$('.alert-msg').show();
$('.alert-msg p').text('لطفا عنوان را وارد نمائید.');
$("#groupName").addClass('errored');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
$("#groupName").removeClass('errored');
}, 3500);
}
});
$('#groupName').on('keyup keypress', function (e) {
if ($('#groupName').val() != '') {
//کلید دمکه اینتر 13
var keyCode = e.keyCode || e.which;
if (keyCode === 13) {
$('#btn-add').click();
}
}
});
});
</script>

View File

@@ -0,0 +1,385 @@
@page
@using Version = _0_Framework.Application.Version
@model ServiceHost.Areas.AdminNew.Pages.Company.Task.IndexModel
@{
var index = 1;
}
@section Styles {
<link href="~/AssetsClient/css/table-style.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/table-responsive.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsclient/css/table-grid.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsclient/css/operation-button.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsclient/css/task-manager-list.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/datetimepicker.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/dropdown.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/filter-search.css?ver=@Version.StyleVersion" rel="stylesheet" />
<!-- sweet alerts -->
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
<link href="~/assetsadminnew/tasks/css/index.css" rel="stylesheet" />
}
<div class="row pb-2">
<div class="col p-0 m-0 d-flex align-items-center justify-content-between">
<div class="col d-flex">
<img src="~/AssetsClient/images/rollcall-history.png" alt="" class="img-fluid me-2" style="width: 45px;" />
<div>
<h4 class="title d-flex align-items-center">مدیریت وظایف</h4>
<div class="title d-flex align-items-center">کارگاه نورداد مهر گستر کاسپین</div>
</div>
</div>
<div>
<a asp-area="Admin" asp-page="/Index" class="back-btn" type="button">
<span>بازگشت</span>
</a>
</div>
</div>
</div>
<button class="btn btn-rounded mb-5 goToTop"> <i class="fa fa-chevron-up" style="font-size: 20px"></i> برو بالا</button>
<input type="hidden" asp-for="SearchModel.PageIndex" id="pageIndex" value="@Model.SearchModel.PageIndex" />
<!-- List Items -->
<div class="row">
<div class="col-12 mb-2" permission="903">
<a asp-page="/Company/Task/Create" class="btn-register text-white" type="button">
<span>وظیفه جدید</span>
</a>
</div>
<div class="col-12 mb-2">
<div class="d-flex w-100">
<button type="button" class="btnTaskList active" id="btnTaskList" permission="9011">لیست وظایف</button>
<button type="button" class="btnTaskRequest mx-2 d-flex align-items-center" id="btnTaskRequest"permission="9012">
لیست درخواست ها
<span class="badge bg-danger rounded-pill mx-1" id="badgeRequestCount">@Model.RequestCount</span>
</button>
</div>
</div>
<div class="col-12 p-0 mb-2 d-none d-md-block">
<div class="search-box card border-0">
<div class="d-grid search-section gap-2">
<div class="d-grid grid-cols-2 gap-2 col-span-2">
<div class=""><input type="text" class="form-control date start-date" asp-for="SearchModel.StartDate" id="StartDate" placeholder="تاریخ شروع"></div>
<div class=""><input type="text" class="form-control date end-date" asp-for="SearchModel.EndDate" id="EndDate" placeholder="تاریخ پایان"></div>
</div>
<div class="col-span-2 md-col-span-3">
<select class="form-select select2Option" aria-label="انتخاب پرسنل ..." asp-for="SearchModel.AccountId" id="AccountId">
<option value="0">پرسنل را انتخاب کنید ...</option>
</select>
</div>
<div class="d-grid grid-cols-1 gap-2 col-span-2">
@* <div class="wrapper-dropdown-normal btn-dropdown">
<span class="selected-display">دارای درخواست مهلت</span>
<svg id="drp-arrow" class="arrow transition-all ml-auto rotate-180" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-normal dropdown-IsTimeRequest boxes">
<li class="item" value-data-normal="">دارای درخواست مهلت</li>
<li class="item" value-data-normal="true">بلی</li>
<li class="item" value-data-normal="false">خیر</li>
</ul>
</div> *@
<input type="hidden" id="IsTimeRequest" asp-for="SearchModel.IsTimeRequest" />
@* <div class="wrapper-dropdown-normal btn-dropdown">
<span class="selected-display">دارای درخواست کنسل</span>
<svg id="drp-arrow" class="arrow transition-all ml-auto rotate-180" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-normal dropdown-IsCancelRequest boxes">
<li class="item" value-data-normal="">دارای درخواست کنسل</li>
<li class="item" value-data-normal="true">بلی</li>
<li class="item" value-data-normal="false">خیر</li>
</ul>
</div> *@
<input type="hidden" id="IsCancelRequest" asp-for="SearchModel.IsCancelRequest" />
@* <div class="wrapper-dropdown-normal btn-dropdown">
<span class="selected-display">کنسل شده</span>
<svg id="drp-arrow" class="arrow transition-all ml-auto rotate-180" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-normal dropdown-IsCanceled boxes">
<li class="item" value-data-normal="">کنسل شده</li>
<li class="item" value-data-normal="true">بلی</li>
<li class="item" value-data-normal="false">خیر</li>
</ul>
</div> *@
<input type="hidden" id="IsCanceled" asp-for="SearchModel.IsCanceled" />
@* <div class="wrapper-dropdown-normal btn-dropdown">
<span class="selected-display">دارای مهلت</span>
<svg id="drp-arrow" class="arrow transition-all ml-auto rotate-180" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-normal dropdown-TimeRequestAccepted boxes">
<li class="item" value-data-normal="">دارای مهلت</li>
<li class="item" value-data-normal="true">بلی</li>
<li class="item" value-data-normal="false">خیر</li>
</ul>
</div> *@
<input type="hidden" id="TimeRequestAccepted" asp-for="SearchModel.TimeRequestAccepted" />
@* <div class="wrapper-dropdown-normal btn-dropdown">
<span class="selected-display">دارای درخواست انجام</span>
<svg id="drp-arrow" class="arrow transition-all ml-auto rotate-180" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-normal dropdown-IsDoneRequest boxes">
<li class="item" value-data-normal="">دارای درخواست انجام</li>
<li class="item" value-data-normal="true">بلی</li>
<li class="item" value-data-normal="false">خیر</li>
</ul>
</div> *@
<input type="hidden" id="IsDoneRequest" asp-for="SearchModel.IsDoneRequest" />
<div class="wrapper-dropdown-normal btn-dropdown">
<span class="selected-display">دارای انجام شده</span>
<svg id="drp-arrow" class="arrow transition-all ml-auto rotate-180" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-normal dropdown-IsDone boxes">
<li class="item" value-data-normal="">دارای انجام شده</li>
<li class="item" value-data-normal="true">بلی</li>
<li class="item" value-data-normal="false">خیر</li>
</ul>
<input type="hidden" id="IsDone" asp-for="SearchModel.IsDone" />
</div>
</div>
<div class="d-flex gap-2 col-span-2">
<button class="btn-search btn-w-size btn-search-click text-nowrap d-flex align-items-center justify-content-center" id="searchBtn" type="submit">
<span>جستجو</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<circle cx="11" cy="11" r="6" stroke="white" />
<path d="M20 20L17 17" stroke="white" stroke-linecap="round" />
</svg>
</button>
<a asp-page="/Company/Employees/Leave" class="btn-clear-filter btn-w-size text-nowrap d-flex align-items-center justify-content-center disable" id="filterRemove">
<span>حذف جستجو</span>
</a>
</div>
</div>
</div>
</div>
<div class="wrapper table-task-manager card p-2" id="divTaskList">
<div class="Rtable Rtable--collapse pt-0" id="tasksAjax" style="">
@* <div class="Rtable-row Rtable-row--head align-items-center d-none">
<div class="Rtable-cell column-heading d-md-block d-none">ردیف</div>
<div class="Rtable-cell column-heading">عملیات</div>
</div>
<div class="w-100" >
</div> *@
@* @foreach (var task in Model.TaskViewModels)
{
<div class="Rtable-row align-items-center position-relative tm-@task.Color">
<div class="Rtable-cell d-md-block d-flex width1">
<div class="Rtable-cell--content">
<span class="d-flex justify-content-center">
@(index++)
</span>
</div>
</div>
@foreach (var assign in task.AssignList)
{
if (assign.AssignViewModels.Count > 0)
{
<div class="Rtable-cell d-md-block d-none width2">
@foreach (var item in assign.AssignViewModels)
{
<div class="Rtable-cell--content">@item.AssignedName</div>
}
</div>
}
else
{
<div class="Rtable-cell d-md-block d-none width2">
<div class="Rtable-cell--content">-</div>
</div>
}
}
<div class="Rtable-cell d-md-block d-none width6">
<div class="Rtable-cell--content ">@task.EndTaskDateFA</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--content ">@task.ContractingPartyName</div>
</div>
<div class="Rtable-cell d-md-block d-flex width8">
@if (task.Description!=null)
{
<div class="Rtable-cell--content DesLimit">@Html.Raw(task.Description)</div>
}
else
{
<div class="Rtable-cell--content">ندارد</div>
}
</div>
<div class="Rtable-cell width9">
<div class="Rtable-cell--content align-items-center d-flex justify-content-end">
<button class="btn-taskmanager-edit position-relative 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="M12.0433 6.49955L12.0214 6.52145L5.53808 13.0047C5.52706 13.0158 5.51612 13.0267 5.50525 13.0375C5.34278 13.1996 5.19895 13.3432 5.09758 13.5222L5.5266 13.7651L5.09758 13.5222C4.99622 13.7012 4.94714 13.8984 4.89171 14.1211C4.88801 14.136 4.88427 14.151 4.88049 14.1662L4.30029 16.4869L4.78351 16.6077L4.30029 16.4869C4.29808 16.4958 4.29585 16.5047 4.29361 16.5136C4.25437 16.6703 4.21246 16.8377 4.19871 16.9782C4.18357 17.1329 4.1871 17.394 4.39651 17.6034C4.60592 17.8128 4.86698 17.8163 5.02171 17.8012C5.16225 17.7875 5.32958 17.7456 5.48627 17.7063C5.49521 17.7041 5.50411 17.7018 5.51297 17.6996L7.83376 17.1194C7.84888 17.1156 7.86388 17.1119 7.87878 17.1082C8.10151 17.0528 8.29868 17.0037 8.47772 16.9023C8.65675 16.801 8.80027 16.6571 8.9624 16.4947C8.97324 16.4838 8.98416 16.4729 8.99519 16.4618L15.4785 9.97855L15.5004 9.95666C15.796 9.6611 16.0507 9.40638 16.2296 9.17534C16.4208 8.9284 16.5695 8.65435 16.5843 8.31531C16.5862 8.27179 16.5862 8.22821 16.5843 8.18469C16.5695 7.84565 16.4208 7.5716 16.2296 7.32466C16.0507 7.09362 15.796 6.8389 15.5004 6.54334L15.4785 6.52145L15.4566 6.49954C15.161 6.20396 14.9063 5.94922 14.6753 5.77034C14.4283 5.57917 14.1543 5.43041 13.8152 5.41564C13.7717 5.41374 13.7281 5.41374 13.6846 5.41564C13.3456 5.43041 13.0715 5.57917 12.8246 5.77034C12.5935 5.94922 12.3388 6.20396 12.0433 6.49955Z"/>
<path d="M11.4583 6.87484L14.2083 5.0415L16.9583 7.7915L15.1249 10.5415L11.4583 6.87484Z"/>
</svg>
<span class="mx-1 d-md-none d-flex">ویرایش</span>
</button>
<button href="" class="btn-taskmanager-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 class="btn-taskmanager-more 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="tm-@task.Color-operation operation-div w-100">
<div class="operations-btns">
<div class="row p-0">
<div class="col-md-12 col-12 p-1">
<div class="d-flex">
@foreach(var assign in task.AssignViewModels)
{
<div class="Rtable-cell d-md-block d-none width2">
<div class="Rtable-cell--content">@assign.AssignedName</div>
</div>
}
</div>
<div class="d-flex justify-content-between">
<div class="d-md-none d-block width7">
<div class="Rtable-cell--content ">@task.ContractingPartyName</div>
</div>
<div class="d-md-none d-block width6">
<div class="Rtable-cell--content ">@task.EndTaskDateFA</div>
</div>
</div>
</div>
<div class="col-md-12 col-12 text-end p-1">
<div class="d-flex sub-buttons">
<button type="button" class="btn4" data-bs-toggle="modal" data-bs-target="#assignTo">ارجاع</button>
<button type="button" class="btn1" data-bs-toggle="modal" data-bs-target="#taskTime">مهلت برای روز خاص 1</button>
<button type="button" class="btn2">قابل انجام نیست</button>
<button type="button" class="btn3">انجام شد</button>
</div>
</div>
<div class="col-md-12 col-12 p-1">
<div class="d-flex justify-content-between">
<button class="btn-taskmanager-edit position-relative w-100 mx-1 d-md-none d-flex justify-content-center">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M12.0433 6.49955L12.0214 6.52145L5.53808 13.0047C5.52706 13.0158 5.51612 13.0267 5.50525 13.0375C5.34278 13.1996 5.19895 13.3432 5.09758 13.5222L5.5266 13.7651L5.09758 13.5222C4.99622 13.7012 4.94714 13.8984 4.89171 14.1211C4.88801 14.136 4.88427 14.151 4.88049 14.1662L4.30029 16.4869L4.78351 16.6077L4.30029 16.4869C4.29808 16.4958 4.29585 16.5047 4.29361 16.5136C4.25437 16.6703 4.21246 16.8377 4.19871 16.9782C4.18357 17.1329 4.1871 17.394 4.39651 17.6034C4.60592 17.8128 4.86698 17.8163 5.02171 17.8012C5.16225 17.7875 5.32958 17.7456 5.48627 17.7063C5.49521 17.7041 5.50411 17.7018 5.51297 17.6996L7.83376 17.1194C7.84888 17.1156 7.86388 17.1119 7.87878 17.1082C8.10151 17.0528 8.29868 17.0037 8.47772 16.9023C8.65675 16.801 8.80027 16.6571 8.9624 16.4947C8.97324 16.4838 8.98416 16.4729 8.99519 16.4618L15.4785 9.97855L15.5004 9.95666C15.796 9.6611 16.0507 9.40638 16.2296 9.17534C16.4208 8.9284 16.5695 8.65435 16.5843 8.31531C16.5862 8.27179 16.5862 8.22821 16.5843 8.18469C16.5695 7.84565 16.4208 7.5716 16.2296 7.32466C16.0507 7.09362 15.796 6.8389 15.5004 6.54334L15.4785 6.52145L15.4566 6.49954C15.161 6.20396 14.9063 5.94922 14.6753 5.77034C14.4283 5.57917 14.1543 5.43041 13.8152 5.41564C13.7717 5.41374 13.7281 5.41374 13.6846 5.41564C13.3456 5.43041 13.0715 5.57917 12.8246 5.77034C12.5935 5.94922 12.3388 6.20396 12.0433 6.49955Z"/>
<path d="M11.4583 6.87484L14.2083 5.0415L16.9583 7.7915L15.1249 10.5415L11.4583 6.87484Z"/>
</svg>
<span class="mx-1 d-flex">ویرایش</span>
</button>
<button class="btn-taskmanager-delete w-100 mx-1 d-md-none d-flex justify-content-center">
<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-flex">حذف</span>
</button>
</div>
</div>
</div>
</div>
</div>
} *@
</div>
</div>
<div class="wrapper table-task-manager card p-2" id="divTaskRequest" style="display:none">
<div class="Rtable Rtable--collapse " id="taskRequestsAjax">
</div>
</div>
</div>
<!-- End List Items -->
<!-- مودال -->
<div class="modal fade assignTo" id="MainModal" tabindex="-1" data-bs-backdrop="static" aria-labelledby="assignToLabel" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-xl-taskTime modal-dialog-centered">
<div class="w-100" id="ModalContent">
</div>
</div>
</div>
<!-- مودال -->
@section Script {
<script src="~/assetsclient/js/site.js?ver=@Version.StyleVersion"></script>
<script src="~/AssetsClient/js/dropdown.js?ver=@Version.StyleVersion"></script>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var loadMoreAjax = "@Url.Page("./Index", "TaskPagination")";
var loadRequestCountAjax = "@Url.Page("./Index", "RequestCount")";
var removeAjax="@Url.Page("./Index", "RemoveTask")";
var employeeListAjax="@Url.Page("./Index", "EmployeeList")";
</script>
<script src="~/assetsadminnew/tasks/js/index.js"></script>
}

View File

@@ -0,0 +1,625 @@
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
using AccountManagement.Application.Contracts.Assign;
using AccountManagement.Application.Contracts.Position;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Domain.MediaAgg;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Contract;
using CompanyManagment.App.Contracts.Leave;
using CompanyManagment.App.Contracts.Workshop;
using CompanyManagment.Application;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using static System.Runtime.InteropServices.JavaScript.JSType;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace ServiceHost.Areas.AdminNew.Pages.Company.Task
{
public class IndexModel : PageModel
{
private readonly ITaskApplication _taskApplication;
private readonly IAuthHelper _authHelper;
private readonly IAccountApplication _accountApplication;
private readonly IPositionApplication _positionApplication;
private readonly IWebHostEnvironment _environment;
public IndexModel(ITaskApplication taskApplication, IAuthHelper authHelper,
IAccountApplication accountApplication, IPositionApplication positionApplication,
IWebHostEnvironment environment)
{
_taskApplication = taskApplication;
_authHelper = authHelper;
_accountApplication = accountApplication;
_positionApplication = positionApplication;
_environment = environment;
}
public List<TaskViewModel> TaskViewModels { get; set; }
public TaskSearchModel SearchModel { get; set; }
public int RequestCount { get; set; }
public IActionResult OnGet(TaskSearchModel searchModel)
{
if (_authHelper.GetPermissions().Any(x => x == 901))
{
//var serach = new TaskSearchModel();
searchModel.PageIndex = 0;
SearchModel = searchModel;
RequestCount = _taskApplication.GetRequestedTasksCount();
return Page();
}
else
{
return Forbid();
}
}
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)
{
var searchModel = new TaskSearchModel()
{
IsDone = isDone,
IsDoneRequest = isDoneRequest,
IsCancelRequest = isCancelRequest,
AccountId = accountId,
EndDate = endDate,
IsCanceled = isCanceled,
IsTimeRequest = isTimeRequest,
PageIndex = pageIndex,
StartDate = startDate,
TimeRequestAccepted = timeRequestAccepted,
TypeOfTicket = type
};
var taskList = new List<TaskViewModel>();
taskList = searchModel.TypeOfTicket == "request"
? _taskApplication.GetAllRequestedTasks(searchModel)
: _taskApplication.GetTasks(searchModel);
return new JsonResult(new
{
pageIndex = taskList.Count,
taskList = taskList,
positions = _positionApplication.GetLowerPosition()
});
}
public IActionResult OnGetRequestCount()
{
var requestCount = _taskApplication.GetRequestedTasksCount();
return new JsonResult(new
{
isSuccess = true,
result = requestCount
});
}
// برای ارجاع دادن
public IActionResult OnPostCreateAssign(OperationModalViewModel command)
{
if (_authHelper.GetPermissions().Any(x => x == 90110))
{
var assign = new CreateAssign()
{
AssignerPositionValue = (int)_authHelper.CurrentAccountInfo().PositionValue,
AssignedId = command.CreateAssign.AssignedId,
AssignerId = _authHelper.CurrentAccountId(),
TaskId = command.TaskId
};
var res = _taskApplication.CreateAssign(assign);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
else
{
return Forbid();
}
}
// برای مهلت زمانی
public IActionResult OnPostCreateTimeRequest(OperationModalViewModel command)
{
if (_authHelper.GetPermissions().Any(x => x == 90111))
{
var requestTime = new CreateTaskTimeRequest()
{
Description = command.CreateTaskTimeRequest.Description,
RequestTime = command.CreateTaskTimeRequest.RequestTime,
TaskId = command.TaskId
};
var res = _taskApplication.CreateRequestTime(requestTime);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
else
{
return Forbid();
}
}
// برای تایید درخواست مهلت
public IActionResult OnPostAcceptTimeRequest(long id)
{
var res = _taskApplication.AcceptRequestDatetime(id);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
// برای لغو درخواست مهلت
public IActionResult OnPostRejectTimeRequest(long id)
{
var res = _taskApplication.RejectTimeRequest(id);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
// برای درخواست انصراف
public IActionResult OnPostCreateCancelRequest(OperationModalViewModel command)
{
var requestCancel = new CreateTaskCancel()
{
Description = command.CreateTaskCancel.Description,
TaskId = command.TaskId
};
var res = _taskApplication.CreateCancelRequest(requestCancel);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
// برای تایید انصراف
public IActionResult OnPostAcceptCancel(long id)
{
var res = _taskApplication.AcceptCancelRequest(id);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
// برای لغو انصراف
public IActionResult OnPostRejectCancel(long id)
{
var res = _taskApplication.RejectCancelRequest(id);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
// برای انجام تسک
public IActionResult OnPostComplete(OperationModalViewModel command)
{
var completeTask = new CompleteTaskViewModel()
{
Description = command.CompleteTaskViewModel.Description,
Id = command.TaskId
};
var res = _taskApplication.CreateCompleteTaskRequest(completeTask);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
public IActionResult OnPostAcceptComplete(long id)
{
var res = _taskApplication.AcceptCompleteRequest(id);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
public IActionResult OnPostRejectComplete(long id)
{
var res = _taskApplication.RejectCompleteRequest(id);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
// برای باز کردن مودال عملیات تسک
public IActionResult OnGetAssignTo(long taskId, string type)
{
if (_authHelper.GetPermissions().Any(x => x == 90110))
{
var model = new OperationModalViewModel()
{
TaskId = taskId,
Type = type,
Accounts = _accountApplication.AccountsForAssign(taskId)
};
return Partial("OperationModal", model);
}
else
{
return Forbid();
}
}
// برای باز کردن مودال عملیات درخواست تسک
public IActionResult OnGetOperationRequestTask(long taskId, string type)
{
var model = new OperationModalViewModel()
{
ModalTaskRequest = _taskApplication.GetRequestDetails(taskId),
TaskId = taskId,
Type = type,
Accounts = _accountApplication.AccountsForAssign(taskId)
};
return Partial("OperationRequestModal", model);
}
// برای باز کردن مودال جزئیات تسک مثل عنوان، تاریخ، توضیحات و ...
public IActionResult OnGetDetailsTask(long taskId)
{
if (_authHelper.GetPermissions().Any(x => x == 90113))
{
var model = _taskApplication.GetDetails(taskId);
return Partial("DetailsModal", model);
}
else
{
return Forbid();
}
}
#region Show and Download Files
public IActionResult OnGetGetFile(string filePath, long id)
{
if (string.IsNullOrEmpty(filePath))
{
return NotFound();
}
if (!System.IO.File.Exists(filePath))
{
return NotFound();
}
var contentType = GetContentTypeImage(Path.GetExtension(filePath));
if (string.IsNullOrWhiteSpace(contentType))
{
byte[] fileContent = System.IO.File.ReadAllBytes(filePath);
var extension = GetContentType(Path.GetExtension(filePath));
return File(fileContent, extension, $"Task_{id}{Path.GetExtension(filePath)}");
}
else
{
return PhysicalFile(filePath, contentType);
}
}
public IActionResult OnGetShowVoice(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
return NotFound();
}
if (!System.IO.File.Exists(filePath))
{
return NotFound();
}
byte[] voiceContent = System.IO.File.ReadAllBytes(filePath);
return File(voiceContent, "audio/ogg", $"Task_voice.ogg");
}
public IActionResult OnGetShowPicture(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
return NotFound();
}
if (!System.IO.File.Exists(filePath))
{
return NotFound();
}
var contentType = GetContentTypeImage(Path.GetExtension(filePath));
return PhysicalFile(filePath, contentType);
}
private string GetContentTypeImage(string extension)
{
if (!extension.StartsWith("."))
{
extension = "." + extension;
}
return extension.ToLower() switch
{
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".gif" => "image/gif",
".bmp" => "image/bmp",
".svg" => "image/svg+xml",
".ico" => "image/x-icon",
_ => "",
};
}
public static string GetContentType(string extension)
{
// Ensure the extension starts with a dot
if (!extension.StartsWith("."))
{
extension = "." + extension;
}
// Use switch expression to return the appropriate content type
return extension.ToLower() switch
{
".txt" => "text/plain",
".htm" => "text/html",
".html" => "text/html",
".css" => "text/css",
".js" => "application/javascript",
".json" => "application/json",
".xml" => "application/xml",
".pdf" => "application/pdf",
".zip" => "application/zip",
".rar" => "application/x-rar-compressed",
".tar" => "application/x-tar",
".mp3" => "audio/mpeg",
".wav" => "audio/wav",
".mp4" => "video/mp4",
".avi" => "video/x-msvideo",
".doc" => "application/msword",
".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".xls" => "application/vnd.ms-excel",
".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".ppt" => "application/vnd.ms-powerpoint",
".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
_ => "application/octet-stream",
};
}
#endregion
public IActionResult OnPostRemoveTask(long taskId)
{
if (_authHelper.GetPermissions().Any(x => x == 90115))
{
var res = _taskApplication.RemoveTask(taskId);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
else
{
return Forbid();
}
}
// برای تغییر تاریخ درخواست تسک
public IActionResult OnPostChangeTime(string time, long taskId)
{
var res = _taskApplication.ChangeRequestTimeAndAccept(time, taskId);
return new JsonResult(new
{
isSuccess = res.IsSuccedded,
message = res.Message,
});
}
public IActionResult OnGetEditTask(long taskId)
{
if (_authHelper.GetPermissions().Any(x => x == 90114))
{
var model = new EditTaskPartialViewModel()
{
Id = _authHelper.CurrentAccountId(),
AccountList = _accountApplication.GetAccountLowerPositionvalue().Select(x => new AccountViewModel()
{
Id = x.Id,
Fullname = x.Fullname
}).ToList(),
EditTask = _taskApplication.GetDetails(taskId)
};
return Partial("Edit", model);
}
else
{
return Forbid();
}
//var index = 1;
//var medias = model.EditTask.medias.Where(x => x.Category == "فایل").ToList();
//foreach (var media in medias)
//{
// switch (index)
// {
// case 1:
// using (var stream = System.IO.File.OpenRead(media.Path))
// {
// model.EditTask.Document1 = new FormFile(stream, 0, stream.Length, $"{taskId}_1",
// Path.GetFileName(stream.Name));
// }
// break;
// case 2:
// using (var stream = System.IO.File.OpenRead(media.Path))
// {
// model.EditTask.Document2 = new FormFile(stream, 0, stream.Length, $"{taskId}_2",
// Path.GetFileName(stream.Name));
// }
// break;
// case 3:
// using (var stream = System.IO.File.OpenRead(media.Path))
// {
// model.EditTask.Document3 = new FormFile(stream, 0, stream.Length, $"{taskId}_3",
// Path.GetFileName(stream.Name));
// }
// break;
// case 4:
// using (var stream = System.IO.File.OpenRead(media.Path))
// {
// model.EditTask.Document4 = new FormFile(stream, 0, stream.Length, $"{taskId}_4",
// Path.GetFileName(stream.Name));
// }
// break;
// case 5:
// using (var stream = System.IO.File.OpenRead(media.Path))
// {
// model.EditTask.Document5 = new FormFile(stream, 0, stream.Length, $"{taskId}_5",
// Path.GetFileName(stream.Name));
// }
// break;
// case 6:
// using (var stream = System.IO.File.OpenRead(media.Path))
// {
// model.EditTask.Document6 = new FormFile(stream, 0, stream.Length, $"{taskId}_6",
// Path.GetFileName(stream.Name));
// }
// break;
// }
// index++;
//}
//var voice = model.EditTask.medias.FirstOrDefault(x => x.Category == "صوت");
//if (voice != null)
//{
// using (var stream = System.IO.File.OpenRead(voice.Path))
// {
// model.EditTask.Voice = new FormFile(stream, 0, stream.Length, $"{taskId}_v",
// Path.GetFileName(stream.Name));
// }
//}
}
public IActionResult OnPostEditSaveTask(EditTaskPartialViewModel command)
{
var editCommand = new EditTask()
{
CompleteDescription = command.EditTask.CompleteDescription,
ContractingPartyName = command.EditTask.ContractingPartyName,
Description = command.EditTask.Description,
Document1 = command.EditTask.Document1,
Document2 = command.EditTask.Document2,
Document3 = command.EditTask.Document3,
Document4 = command.EditTask.Document4,
Document5 = command.EditTask.Document5,
Document6 = command.EditTask.Document6,
Voice = command.EditTask.Voice,
EndTaskDate = command.EditTask.EndTaskDate,
EndTaskTime = command.EditTask.EndTaskTime,
Id = command.EditTask.Id,
ReceiverId = command.EditTask.ReceiverId,
IsDone = command.EditTask.IsDone,
PositionId = command.EditTask.PositionId,
SenderId = command.EditTask.SenderId,
Title = command.EditTask.Title,
medias = command.EditTask.medias,
DeletedFileIds = command.EditTask.DeletedFileIds,
};
var result = _taskApplication.Edit(editCommand);
var res = result.IsSuccedded;
return new JsonResult(new
{
isSuccess = res,
message = result.Message,
});
}
public IActionResult OnGetEmployeeList()
{
var result = _accountApplication.GetAccountLowerPositionvalue();
return new JsonResult(new { result=result });
}
}
}

View File

@@ -0,0 +1,248 @@
@model AccountManagement.Application.Contracts.Task.OperationModalViewModel
@using Version = _0_Framework.Application.Version
@{
<link href="~/assetsclient/css/task-manager-create.css" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
}
<style>
.select2.select2-container .select2-selection {
display: flex !important;
height: 0 !important;
padding: 0px;
}
.select2.select2-container .select2-selection--multiple .select2-selection__rendered {
margin: 0;
}
.select2-container--default .select2-search--inline .select2-search__field {
line-height: 32px;
padding: 0 0;
font-family: 'IRANYekanX';
}
</style>
@{
switch (Model.Type)
{
case "assign":
<form asp-page="./Index" asp-page-handler="CreateAssign" id="employee" autocomplete="off"
method="post"
data-ajax="true"
data-callback=""
data-action="Refresh">
<div class="modal-content tm-create">
<input asp-for="TaskId" hidden />
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="assignToLabel">ارجاع دادن وظیفه</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="from-group">
<select class="form-select select2Member" multiple="multiple" asp-for="CreateAssign.AssignedId">
@foreach (var item in Model.Accounts)
{
<option value="@item.Id">@item.Fullname</option>
}
</select>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel2" data-bs-dismiss="modal">انصراف</button>
</div>
<div class="col-6 text-start">
<button id="save" type="button" class="btn-register text-white">ثبت</button>
<button style="display: none;" type="submit" id="saveFinaly"></button>
</div>
</div>
</div>
</div>
</form>
break;
case "request_time":
<form asp-page="./Index" asp-page-handler="CreateTimeRequest" id="employee" autocomplete="off"
method="post"
data-ajax="true"
data-callback=""
data-action="Refresh">
<div class="modal-content tm-create">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="assignToLabel">شرح درخواست مهلت</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="col-12">
<input asp-for="TaskId" hidden />
<div class="from-group">
<input asp-for="CreateTaskTimeRequest.RequestTime" type="text" id="EndTaskDate" class="form-control text-center date" placeholder="تاریخ">
</div>
<div class="row my-2">
<div class="col-4 pe-0">
<input type="radio" class="tm-rad" name="btnradio" id="today" autocomplete="off" checked>
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="today" style="border-radius: 2; margin:0 2px">امروز</label>
</div>
<div class="col-4 p-0">
<input type="radio" class="tm-rad" name="btnradio" id="tommorow" autocomplete="off">
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="tommorow" style="border-radius: 2; margin:0 2px">فردا</label>
</div>
<div class="col-4 ps-0">
<input type="radio" class="tm-rad" name="btnradio" id="two-day-later" autocomplete="off">
<label class="btn btn-outline-primary d-flex justify-content-center radio-btn" for="two-day-later" style="border-radius: 2; margin:0 2px">پس فردا</label>
</div>
</div>
</div>
<div class="col-12">
<div class="from-group">
<textarea asp-for="CreateTaskTimeRequest.Description" class="tm-textarea p-2" rows="10" placeholder="توضیحات ..."></textarea>
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel2" data-bs-dismiss="modal">انصراف</button>
</div>
<div class="col-6 text-start">
<button id="save" class="btn-register text-white">ثبت</button>
<button style="display: none;" type="submit" id="saveFinaly"></button>
</div>
</div>
</div>
</div>
</form>
break;
case "canceled":
<form asp-page="./Index" asp-page-handler="CreateCancelRequest" id="employee" autocomplete="off"
method="post"
data-ajax="true"
data-callback=""
data-action="Refresh">
<div class="modal-content tm-create">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="assignToLabel">شرح درخواست انصراف</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<input asp-for="TaskId" hidden/>
<div class="col-12">
<div class="from-group">
<textarea asp-for="CreateTaskCancel.Description" class="tm-textarea p-2" rows="10" placeholder="توضیحات ..."></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel2" data-bs-dismiss="modal">انصراف</button>
</div>
<div class="col-6 text-start">
<button id="save" class="btn-register text-white">ثبت</button>
<button style="display: none;" type="submit" id="saveFinaly"></button>
</div>
</div>
</div>
</div>
</form>
break;
case "completed":
<form asp-page="./Index" asp-page-handler="Complete" id="employee" autocomplete="off"
method="post"
data-ajax="true"
data-callback=""
data-action="Refresh">
<div class="modal-content tm-create">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="assignToLabel">شرح تکمیل وظیفه</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<input asp-for="TaskId" hidden/>
<div class="col-12">
<div class="from-group">
<textarea asp-for="CompleteTaskViewModel.Description" class="tm-textarea p-2" rows="10" placeholder="توضیحات ..."></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel2" data-bs-dismiss="modal">انصراف</button>
</div>
<div class="col-6 text-start">
<button id="save" class="btn-register text-white">ثبت</button>
<button style="display: none;" type="submit" id="saveFinaly"></button>
</div>
</div>
</div>
</div>
</form>
break;
}
}
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsadminnew/tasks/js/OperationModal.js"></script>

View File

@@ -0,0 +1,168 @@
@model AccountManagement.Application.Contracts.Task.OperationModalViewModel
@using Version = _0_Framework.Application.Version
@{
<link href="~/assetsclient/css/task-manager-create.css" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@Version.StyleVersion" rel="stylesheet" />
<link href="~/assetsadminnew/tasks/css/operationrequestmodal.css" rel="stylesheet" />
}
@{
<input type="hidden" value="@Model.TaskId" id="TaskId" />
switch (Model.Type)
{
case "request_time":
<div class="modal-content tm-create">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="assignToLabel">جزئیات درخواست مهلت</h5>
</div>
<div class="modal-body detailTask">
<div class="container-fluid">
<div class="row mb-1">
<div class="col-12 col-sm-4 text-end">
<div class="detailTitle">تاریخ درخواست شده: </div>
</div>
<div class="col-12 col-sm-8 border rounded">
<div class="detailTitleText">@Model.ModalTaskRequest.RequestTaskDate</div>
</div>
</div>
<div class="row mb-1">
<div class="col-12 col-sm-4 text-end">
<div class="detailTitle"> توضیحات درخواست: </div>
</div>
<div class="col-12 col-sm-8 border rounded p-2 overflow-auto">
<p class="">@Html.Raw(Model.ModalTaskRequest.TimeRequestDescription)</p>
</div>
</div>
</div>
</div>
<div class="modal-footer d-block">
<div class="row">
<div class="col-4">
<button permission="90122" type="button" class="btn-reject" id="saveRejectTimeRequest">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
<path d="M18 6L6 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M6 6L18 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</button>
<button permission="90122" type="button" class="btn-accept" id="saveAcceptTimeRequest">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
<path d="M5 14L8.23309 16.4248C8.66178 16.7463 9.26772 16.6728 9.60705 16.2581L18 6" stroke-width="2" stroke-linecap="round" />
</svg>
</button>
</div>
<div class="col-8" permission="90123">
<div class="d-flex align-items-center justify-content-end">
<label class="label-time-request" for="checkActiveDate">تغییر تاریخ</label>
<input type="checkbox" class="form-check-custom mx-1" id="checkActiveDate" />
<input type="text" class="form-control mx-1 date disable" value="" id="inputChangeDate" disabled />
<button id="saveChangeTimeRequest" type="button" class="btn-change-date disable" disabled>ثبت</button>
</div>
</div>
</div>
</div>
</div>
break;
case "cancel_request":
<div class="modal-content tm-create">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="assignToLabel">درخواست انصراف وظیفه</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="row">
<div class="col-12 col-sm-4 text-end">
<div class="detailTitle"> توضیحات درخواست: </div>
</div>
<div class="col-12 col-sm-8 border rounded p-2 overflow-auto">
<p class="">@Html.Raw(Model.ModalTaskRequest.CancelDescription)</p>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer d-block">
<div class="row">
<div class="col-12">
<button permission="90122" type="button" class="btn-reject" id="saveRejectCancelRequest">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
<path d="M18 6L6 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M6 6L18 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</button>
<button permission="90122" type="button" class="btn-accept" id="saveAcceptCancelRequest">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
<path d="M5 14L8.23309 16.4248C8.66178 16.7463 9.26772 16.6728 9.60705 16.2581L18 6" stroke-width="2" stroke-linecap="round" />
</svg>
</button>
</div>
</div>
</div>
</div>
break;
case "complete_request":
<div class="modal-content tm-create">
<div class="modal-header d-block text-center">
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
<h5 class="modal-title" id="assignToLabel">درخواست تائید وظیفه</h5>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-12 col-sm-4 text-end">
<div class="detailTitle"> توضیحات درخواست: </div>
</div>
<div class="col-12 col-sm-8 border rounded p-2 overflow-auto">
<p class="">@Html.Raw(Model.ModalTaskRequest.IsDoneDescription)</p>
</div>
</div>
</div>
</div>
<div class="modal-footer d-block">
<div class="row">
<div class="col-12">
<button permission="90122" type="button" class="btn-reject" id="saveRejectCompleteRequest">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
<path d="M18 6L6 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M6 6L18 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</button>
<button permission="90122" type="button" class="btn-accept" id="saveAcceptCompleteRequest">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
<path d="M5 14L8.23309 16.4248C8.66178 16.7463 9.26772 16.6728 9.60705 16.2581L18 6" stroke-width="2" stroke-linecap="round" />
</svg>
</button>
</div>
</div>
</div>
</div>
break;
}
}
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script>
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")';
</script>
<script src="~/assetsadminnew/tasks/js/operationrequestmodal.js"></script>

View File

@@ -0,0 +1,258 @@
@page
@model ServiceHost.Areas.AdminNew.Pages.IndexModel
@{
<style>
/********************* Start Tile *********************/
.tiles {
display: grid;
grid-template-columns: repeat(3, 1fr);
-moz-column-gap: 1rem;
column-gap: 1rem;
row-gap: 1rem;
margin-top: 1.25rem;
}
@@media (max-width: 700px) {
.tiles {
grid-template-columns: repeat(1, 1fr);
}
}
.tile {
padding: 1rem;
border-radius: 8px;
background-color: #e3ffa8;
color: #000000;
display: flex;
flex-direction: column;
justify-content: space-between;
position: relative;
transition: 0.25s ease;
}
.tile:hover {
transform: translateY(-5px);
}
.tile:focus-within {
box-shadow: 0 0 0 2px #1f1f1f, 0 0 0 4px #e3ffa8;
box-shadow: 0 0 0 2px #1f1f1f, 0 0 0 4px #e3ffa8;
}
.tile:nth-child(2) {
background-color: #45ffbc;
}
.tile:nth-child(2):focus-within {
box-shadow: 0 0 0 2px #1f1f1f, 0 0 0 4px #45ffbc;
}
.tile:nth-child(3) {
background-color: #bdbbb7;
}
.tile:nth-child(3):focus-within {
box-shadow: 0 0 0 2px #1f1f1f, 0 0 0 4px #bdbbb7;
}
.tile a {
text-decoration: none;
display: flex;
align-items: center;
justify-content: space-between;
font-weight: 600;
}
.tile a .icon-button {
color: inherit;
border-color: inherit;
}
.tile a .icon-button:hover, .tile a .icon-button:focus {
background-color: transparent;
}
.tile a .icon-button:hover i, .tile a .icon-button:focus i {
transform: none;
}
.tile a:focus {
box-shadow: none;
}
.tile a:after {
content: "";
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.tile-header {
display: flex;
align-items: center;
}
.tile-header svg {
width: 70px;
}
.tile-header h3 {
display: flex;
flex-direction: column;
line-height: 1.375;
margin-left: 0.5rem;
}
.tile-header h3 span:first-child {
font-weight: 600;
font-size: 25px;
color: #212121;
}
.tile-header h3 span:last-child {
font-size: 14px;
font-weight: 400;
color: #334155;
}
/********************* End Tile *********************/
/********************* Start List Card *********************/
.list-titles {
margin-top: 3px;
margin-right: 17px;
}
.list-main {
background: linear-gradient(270deg, rgba(255, 255, 255, 0.28), rgb(42, 46, 50) 52%);
padding: 1px;
border-radius: 18px;
margin-top: 17px;
width: 380px;
animation-name: Stocks;
}
.sub-list {
display: flex;
background: rgb(42, 46, 50);
border-radius: 18px;
padding: 16px;
color: white;
position: relative;
}
/********************* End List *********************/
</style>
}
<div class="row">
<div class="col-12">
<div class="tiles">
<article class="tile">
<div class="tile-header">
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.5 9.5H7.69294C7.25267 9.5 7.03254 9.5 6.82538 9.54973C6.64172 9.59383 6.46614 9.66656 6.30509 9.76525C6.12344 9.87656 5.96778 10.0322 5.65647 10.3435L4.34353 11.6565C4.03222 11.9678 3.87656 12.1234 3.76525 12.3051C3.66656 12.4661 3.59383 12.6417 3.54973 12.8254C3.5 13.0325 3.5 13.2527 3.5 13.6929V17.62C3.5 18.6281 3.5 19.1321 3.69619 19.5172C3.86876 19.8559 4.14413 20.1312 4.48282 20.3038C4.86786 20.5 5.37191 20.5 6.38 20.5H17.62C18.6281 20.5 19.1321 20.5 19.5172 20.3038C19.8559 20.1312 20.1312 19.8559 20.3038 19.5172C20.5 19.1321 20.5 18.6281 20.5 17.62V13.6929C20.5 13.2527 20.5 13.0325 20.4503 12.8254C20.4062 12.6417 20.3334 12.4661 20.2348 12.3051C20.1234 12.1234 19.9678 11.9678 19.6565 11.6565L18.3435 10.3435C18.0322 10.0322 17.8766 9.87656 17.6949 9.76525C17.5339 9.66656 17.3583 9.59383 17.1746 9.54973C16.9675 9.5 16.7473 9.5 16.3071 9.5H15.5" stroke="#222222" />
<path d="M20.5 14.5H17.9415C17.2458 14.5 16.8979 14.5 16.636 14.6888C16.3742 14.8775 16.2642 15.2075 16.0442 15.8675L15.9558 16.1325C15.7358 16.7925 15.6258 17.1225 15.364 17.3112C15.1021 17.5 14.7542 17.5 14.0585 17.5H9.94152C9.2458 17.5 8.89794 17.5 8.63605 17.3112C8.37416 17.1225 8.26416 16.7925 8.04415 16.1325L7.95585 15.8675C7.73584 15.2075 7.62584 14.8775 7.36395 14.6888C7.10206 14.5 6.7542 14.5 6.05848 14.5H3.5" stroke="#222222" />
<circle cx="12" cy="8" r="3.5" stroke="#222222" />
</svg>
<h3>
<span>کارگاه</span>
<span>لیست کارگاه ، ثبت و ویرایش کارگاه</span>
</h3>
</div>
<a asp-area="Admin" asp-page="/Company/Workshops/Index">
<span>رفتن به صفحه کارگاه</span>
<span class="icon-button">
<svg width="9" height="14" viewBox="0 0 9 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 1L2 7L8 13" stroke="#33363F" stroke-width="2" stroke-linecap="round" />
</svg>
</span>
</a>
</article>
<article class="tile">
<div class="tile-header">
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.5 15.5H17.9415C17.2458 15.5 16.8979 15.5 16.636 15.6888C16.3742 15.8775 16.2642 16.2075 16.0442 16.8675L15.9558 17.1325C15.7358 17.7925 15.6258 18.1225 15.364 18.3112C15.1021 18.5 14.7542 18.5 14.0585 18.5H9.94152C9.2458 18.5 8.89794 18.5 8.63605 18.3112C8.37416 18.1225 8.26416 17.7925 8.04415 17.1325L7.95585 16.8675C7.73584 16.2075 7.62584 15.8775 7.36395 15.6888C7.10206 15.5 6.7542 15.5 6.05848 15.5H3.5M16.1667 16.5H7.83333" stroke="#222222" />
<path d="M20.5 11.5H17.9415C17.2458 11.5 16.8979 11.5 16.636 11.6888C16.3742 11.8775 16.2642 12.2075 16.0442 12.8675L15.9558 13.1325C15.7358 13.7925 15.6258 14.1225 15.364 14.3112C15.1021 14.5 14.7542 14.5 14.0585 14.5H9.94152C9.2458 14.5 8.89794 14.5 8.63605 14.3112C8.37416 14.1225 8.26416 13.7925 8.04415 13.1325L7.95585 12.8675C7.73584 12.2075 7.62584 11.8775 7.36395 11.6888C7.10206 11.5 6.7542 11.5 6.05848 11.5H3.5M16.1667 12.5H7.83333" stroke="#222222" />
<path d="M17.5 12V5.66274C17.5 5.41815 17.5 5.29586 17.4724 5.18077C17.4479 5.07873 17.4075 4.98119 17.3526 4.89172C17.2908 4.7908 17.2043 4.70432 17.0314 4.53137L14.9686 2.46863C14.7957 2.29568 14.7092 2.2092 14.6083 2.14736C14.5188 2.09253 14.4213 2.05213 14.3192 2.02763C14.2041 2 14.0818 2 13.8373 2H8.9C8.05992 2 7.63988 2 7.31901 2.16349C7.03677 2.3073 6.8073 2.53677 6.66349 2.81901C6.5 3.13988 6.5 3.55992 6.5 4.4V12" stroke="#222222" />
<path d="M13.5 2L13.5 4.4C13.5 4.96005 13.5 5.24008 13.609 5.45399C13.7049 5.64215 13.8578 5.79513 14.046 5.89101C14.2599 6 14.5399 6 15.1 6L17.5 6" stroke="#222222" />
<path d="M6.5 6.5L4.34353 8.65647C4.03222 8.96778 3.87656 9.12344 3.76525 9.30509C3.66656 9.46614 3.59383 9.64172 3.54973 9.82538C3.5 10.0325 3.5 10.2527 3.5 10.6929V18.62C3.5 19.6281 3.5 20.1321 3.69619 20.5172C3.86876 20.8559 4.14413 21.1312 4.48282 21.3038C4.86786 21.5 5.37191 21.5 6.38 21.5H17.62C18.6281 21.5 19.1321 21.5 19.5172 21.3038C19.8559 21.1312 20.1312 20.8559 20.3038 20.5172C20.5 20.1321 20.5 19.6281 20.5 18.62V10.6929C20.5 10.2527 20.5 10.0325 20.4503 9.82538C20.4062 9.64172 20.3334 9.46614 20.2348 9.30509C20.1234 9.12344 19.9678 8.96778 19.6565 8.65647L17.5 6.5" stroke="#222222" />
</svg>
<h3>
<span>قرارداد</span>
<span>لیست قرارداد ، ثبت و ویرایش قرارداد</span>
</h3>
</div>
<a asp-area="Admin" asp-page="/Company/Contracts/Index">
<span>رفتن به صفحه قرارداد</span>
<span class="icon-button">
<svg width="9" height="14" viewBox="0 0 9 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 1L2 7L8 13" stroke="#33363F" stroke-width="2" stroke-linecap="round" />
</svg>
</span>
</a>
</article>
<article class="tile">
<div class="tile-header">
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 2.5V2.5C18.6514 2.5 18.977 2.5 19.2413 2.58331C19.8014 2.75991 20.2401 3.19863 20.4167 3.75873C20.5 4.02295 20.5 4.34864 20.5 5V16.62C20.5 17.6281 20.5 18.1321 20.3038 18.5172C20.1312 18.8559 19.8559 19.1312 19.5172 19.3038C19.1321 19.5 18.6281 19.5 17.62 19.5H6.38C5.37191 19.5 4.86786 19.5 4.48282 19.3038C4.14413 19.1312 3.86876 18.8559 3.69619 18.5172C3.5 18.1321 3.5 17.6281 3.5 16.62V5C3.5 4.34864 3.5 4.02295 3.58331 3.75873C3.75991 3.19863 4.19863 2.75991 4.75873 2.58331C5.02295 2.5 5.34864 2.5 6 2.5V2.5" stroke="#222222" />
<path d="M20.5 12.5H17.9415C17.2458 12.5 16.8979 12.5 16.636 12.6888C16.3742 12.8775 16.2642 13.2075 16.0442 13.8675L15.9558 14.1325C15.7358 14.7925 15.6258 15.1225 15.364 15.3112C15.1021 15.5 14.7542 15.5 14.0585 15.5H9.94152C9.2458 15.5 8.89794 15.5 8.63605 15.3112C8.37416 15.1225 8.26416 14.7925 8.04415 14.1325L7.95585 13.8675C7.73584 13.2075 7.62584 12.8775 7.36395 12.6888C7.10206 12.5 6.7542 12.5 6.05848 12.5H3.5M16.1667 13.5H7.83333" stroke="#222222" />
<path d="M20.5 7.5H17.9415C17.2458 7.5 16.8979 7.5 16.636 7.68876C16.3742 7.87752 16.2642 8.20753 16.0442 8.86754L15.9558 9.13246C15.7358 9.79247 15.6258 10.1225 15.364 10.3112C15.1021 10.5 14.7542 10.5 14.0585 10.5H9.94152C9.2458 10.5 8.89794 10.5 8.63605 10.3112C8.37416 10.1225 8.26416 9.79247 8.04415 9.13246L7.95585 8.86754C7.73584 8.20753 7.62584 7.87752 7.36395 7.68876C7.10206 7.5 6.7542 7.5 6.05848 7.5H3.5M16.1667 8.5H7.83333" stroke="#222222" />
<path d="M18.5 2.5H17.9415C17.2458 2.5 16.8979 2.5 16.636 2.68876C16.3742 2.87752 16.2642 3.20753 16.0442 3.86754L15.9558 4.13246C15.7358 4.79247 15.6258 5.12248 15.364 5.31124C15.1021 5.5 14.7542 5.5 14.0585 5.5H9.94152C9.2458 5.5 8.89794 5.5 8.63605 5.31124C8.37416 5.12248 8.26416 4.79247 8.04415 4.13246L7.95585 3.86754C7.73584 3.20753 7.62584 2.87752 7.36395 2.68876C7.10206 2.5 6.7542 2.5 6.05848 2.5H5.5M16.1667 3.5H7.83333" stroke="#222222" />
</svg>
<h3>
<span>فیش حقوقی</span>
<span>لیست فیش حقوقی ، ثبت و ویرایش فیش حقوقی</span>
</h3>
</div>
<a asp-area="Admin" asp-page="/Company/Checkouts/Index">
<span>رفتن به صفحه فیش حقوقی</span>
<span class="icon-button">
<svg width="9" height="14" viewBox="0 0 9 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 1L2 7L8 13" stroke="#33363F" stroke-width="2" stroke-linecap="round" />
</svg>
</span>
</a>
</article>
</div>
</div>
@if (@Model.DbBackupList.Count > 0)
{
<div class="col-4 mt-4" permission="2">
<div class="list-card">
<div class="title-element">لیست بکاپ های دیتابیس</div>
@foreach (var item in @Model.DbBackupList)
{
<div class="list-main" onclick="window.location.href='@Url.Page("./Index", "DownloadFile", new { path = @item.FullPath, fileName = @item.FileName })'">
<div class="sub-list">
<div class="list-titles">@item.FileName</div>
</div>
</div>
}
</div>
</div>
}
@if (@Model.InsuranceBackupList.Count > 0)
{
<div class="col-4 mt-4" permission="2">
<div class="list-card">
<div class="title-element">لیست بکاپ های بیمه</div>
@foreach (var item in @Model.InsuranceBackupList)
{
<div class="list-main" onclick="window.location.href='@Url.Page("./Index", "DownloadFile", new { path = @item.FullPath, fileName = @item.FileName })'">
<div class="sub-list">
<div class="list-titles">@item.FileName</div>
</div>
</div>
}
</div>
</div>
}
</div>

View File

@@ -0,0 +1,53 @@
using _0_Framework.Application;
using backService;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace ServiceHost.Areas.AdminNew.Pages
{
public class IndexModel : PageModel
{
private readonly IConfiguration _configuration;
public List<BackupViewModel> DbBackupList { get; set; }
public List<BackupViewModel> InsuranceBackupList { get; set; }
public IndexModel(IWebHostEnvironment webHostEnvironment, IConfiguration configuration)
{
_configuration = configuration;
}
public void OnGet()
{
#region DbBackupLoad
string? dbZipPath = _configuration["BackupOptions:DbBackupZipPath"];
string[] dbBackups = Directory.GetFiles(dbZipPath);
DbBackupList = dbBackups.Select(x => new BackupViewModel()
{
FileName = Path.GetFileName(x),
FullPath = x,
CreationDate = Path.GetFileName(x).ExtractTimeFromDbbackup(),
}).OrderByDescending(x => x.CreationDate).ToList();
#endregion
#region InsurancBackupLoad
string? insuranceZipPath = _configuration["BackupOptions:InsuranceListZipPath"];
string[] insuranceBackups = Directory.GetFiles(insuranceZipPath);
InsuranceBackupList = insuranceBackups.Select(x => new BackupViewModel()
{
FileName = Path.GetFileName(x),
FullPath = x,
CreationDate = Path.GetFileName(x).ExtractTimeFromInsurancebackup(),
}).OrderByDescending(x => x.CreationDate).ToList();
#endregion
}
public IActionResult OnGetDownloadFile(string path, string fileName)
{
byte[] fileContent = System.IO.File.ReadAllBytes(path);
return File(fileContent, "application/zip", fileName);
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,225 @@
@using Microsoft.AspNetCore.Razor.Language.Intermediate
@using Version = _0_Framework.Application.Version
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Coderthemes">
<title> گزارشگیر @ViewData["Title"]</title>
<link rel="icon" type="image/x-icon" href="~/AssetsClient/images/favicon.ico">
<link href="~/AssetsClient/css/bootstrap.rtl.min.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/libs/intro.js/introjs-rtl.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/libs/intro.js/introjs.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/introjs-custom.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/style.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/responsive.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/responsive-modal.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/validation-style.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/libs/font-awesome/css/font-awesome.min.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/material-design-iconic-font.min.css?ver=@Version.AdminVersion" rel="stylesheet" />
<link href="~/AssetsClient/libs/select2/css/select2.min.css" rel="stylesheet" />
<script src="~/AssetsClient/js/jquery-3.7.1.min.js"></script>
@RenderSection("Styles", false)
</head>
<body>
<div id="overlay" class="d-lg-none"></div>
<partial name="_Menu" />
<partial name="_header" />
<div class="p-2 content-container">
<div class="container-fluid">
@RenderBody()
</div>
</div>
<partial name="_validationAlert" />
<script src="~/AssetsClient/js/bootstrap.bundle.min.js"></script>
<script src="~/AssetsClient/libs/intro.js/intro.js"></script>
<script src="~/AssetsClient/libs/select2/js/select2.js"></script>
<script src="~/AssetsClient/libs/select2/js/i18n/fa.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/js/datevalidation.js"></script>
<script src="~/AdminTheme/assets/js/jquery.nicescroll.js" type="text/javascript"></script>
<script src="~/AdminTheme/assets/js/jquery.scrollTo.min.js"></script>
<script src="~/AdminTheme/assets/jquery-sparkline/jquery.sparkline.min.js"></script>
<script src="~/AdminTheme/assets/jquery-detectmobile/detect.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script src="~/AdminTheme/assets/notifications/notify.min.js"></script>
<script src="~/AdminTheme/assets/notifications/notify-metro.js"></script>
<script src="~/AdminTheme/assets/notifications/notifications.js"></script>
@* <script src="~/assetsclient/js/smooth-scrollbar.js"></script> *@
<script>
$('#MainModal').on('hidden.bs.modal', function () {
$("#ModalContent").html("")
$("#printSection").html("")
});
var url = window.location.href.split('?')[0];
var url2 = window.location.href.split('#')[0];
$('.selectLi').filter(function () {
if (this.href == url || this.href == url2) {
$(this).parent().addClass('active');
};
});
function tutorialIntro() {
localStorage.removeItem("hasCompletedDashboardTour");
localStorage.removeItem("hasCompletedWorkShopTour");
localStorage.removeItem("cardContractIntro");
localStorage.removeItem("hasCompletedEmployeesTour");
localStorage.removeItem("hasCompletedEmployeesLeaveTour");
localStorage.removeItem("hasCompletedEmployeesLeaveListTour");
}
$(document).ready(function () {
if ($(window).width() < 992) {
$(".sidebar-navigation").toggleClass("small")
// $(".main-wrapper").toggleClass("small");
$(".sidebar").toggleClass("active-sidebar-navigation");
$(".header-container").toggleClass("main-wrapper ");
$(".header-container").toggleClass("small");
$(".content-container").toggleClass("small");
// $(".content-container").toggleClass("");
}
if ($(window).width() > 992) {
$('#overlay').toggleClass("overlay");
}
});
$(".toggle").click(function () {
$(".sidebar-navigation").toggleClass("small")
// $(".main-wrapper").toggleClass("small");
$(".sidebar").toggleClass("active-sidebar-navigation");
$(".header-container").toggleClass("main-wrapper ");
$(".header-container").toggleClass("small");
$(".content-container").toggleClass("small");
// $(".content-container").toggleClass("");
$('#overlay').toggleClass("overlay");
});
$("#close-sidemenu-mobile").click(function () {
$(".sidebar-navigation").toggleClass("small")
$(".sidebar").toggleClass("active-sidebar-navigation");
$(".header-container").toggleClass("main-wrapper ");
$(".header-container").toggleClass("small");
$(".content-container").toggleClass("small");
$('#overlay').toggleClass("overlay");
});
$("#overlay").click(function () {
$(".sidebar-navigation").toggleClass("small")
$(".sidebar").toggleClass("active-sidebar-navigation");
$(".header-container").toggleClass("main-wrapper ");
$(".header-container").toggleClass("small");
$(".content-container").toggleClass("small");
$('#overlay').toggleClass("overlay");
});
//******************** بستن مودال خطا ********************
$(document).on('click', '#closeAlert', function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
clearTimeout();
});
//******************** بستن مودال خطا ********************
$(document).on("click", function (event) {
var target = $(event.target);
if (!target.closest(".dropdown-menu").length
&& !target.is(".dropdown-menu")
&& !target.is(".user-details .user-info .title")
) {
$(".dropdown").removeClass("open");
}
});
function openSideBar() {
var screenWidth = $(window).width();
var navActive = $('.navigation-right').hasClass('active');
var myWrapperEnlarged = $('#myWrapper').hasClass('enlarged');
if (screenWidth < 600) {
$(".navigation-right").removeClass('active');
$("#myWrapper").removeClass('enlarged');
} else if (navActive && myWrapperEnlarged) {
$(".navigation-right").removeClass('active');
$("#myWrapper").removeClass('enlarged');
} else {
$(".navigation-right").addClass('active');
$("#myWrapper").addClass('enlarged');
}
}
function openSettings() {
let dropdown = $(".user-details .user-info .dropdown");
dropdown.toggleClass("open");
}
function checkUrl() {
var url = window.location.href.split('?')[0];
$('.aMenu').filter(function () {
var id = $(this).attr("id");
if (this.href == url || (id == "regiteremployer" && url.indexOf("/Employers/") > -1)) {
$(".activeTab").removeClass('activeTab');
$(this).parent("li").addClass('activeTab');
};
});
}
// $(document).ready(function () {
// var Scrollbar1 = window.Scrollbar;
// Scrollbar1.init(document.querySelector('#ModelDivScrollbar'), {
// alwaysShowTracks: true,
// });
// });
if ($('.sidebar-navigation').not('small')) {
$(".open-submenu").click(function () {
$(this).find('.ul-open-submenu').slideToggle();
})
} else {
}
</script>
@RenderSection("Script", false)
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

View File

@@ -0,0 +1,45 @@
<!-- پیغام خطا -->
<div class="alert-msg" style="display:none">
<div class="d-flex align-items-center justify-content-between">
<div class="px-1">
<h4 class="alert-msg-heading">خطا</h4>
<p class="m-0"></p>
</div>
<button class="bg-transparent btn-alert-danger" id="closeAlert">
<svg width="40" height="40" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" rx="16" fill="#D3D3D3" />
<mask id="mask0_1503_13337" maskUnits="userSpaceOnUse" x="4" y="4" width="24" height="24">
<rect x="4" y="4" width="24" height="24" fill="#D9D9D9" />
</mask>
<g mask="url(#mask0_1503_13337)">
<path d="M12.4 21L16 17.4L19.6 21L21 19.6L17.4 16L21 12.4L19.6 11L16 14.6L12.4 11L11 12.4L14.6 16L11 19.6L12.4 21ZM16 26C14.6167 26 13.3167 25.7373 12.1 25.212C10.8833 24.6873 9.825 23.975 8.925 23.075C8.025 22.175 7.31267 21.1167 6.788 19.9C6.26267 18.6833 6 17.3833 6 16C6 14.6167 6.26267 13.3167 6.788 12.1C7.31267 10.8833 8.025 9.825 8.925 8.925C9.825 8.025 10.8833 7.31233 12.1 6.787C13.3167 6.26233 14.6167 6 16 6C17.3833 6 18.6833 6.26233 19.9 6.787C21.1167 7.31233 22.175 8.025 23.075 8.925C23.975 9.825 24.6873 10.8833 25.212 12.1C25.7373 13.3167 26 14.6167 26 16C26 17.3833 25.7373 18.6833 25.212 19.9C24.6873 21.1167 23.975 22.175 23.075 23.075C22.175 23.975 21.1167 24.6873 19.9 25.212C18.6833 25.7373 17.3833 26 16 26Z" fill="#F04248" />
</g>
</svg>
</button>
</div>
<div class="border-msg position-absolute"></div>
</div>
<!-- پیغام خطا -->
<!-- پیغام موفق -->
<div class="alert-success-msg" style="display:none">
<div class="d-flex align-items-center justify-content-between">
<div class="px-1">
<h4 class="alert-msg-heading">موفق</h4>
<p class="m-0"></p>
</div>
<button class="bg-transparent btn-alert-success" id="closeAlert">
<svg width="40" height="40" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" rx="16" fill="#E5FFEF" />
<mask id="mask0_222_9438" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="4" y="4" width="24" height="24">
<rect x="4" y="4" width="24" height="24" fill="#D9D9D9"/>
</mask>
<g mask="url(#mask0_222_9438)">
<path d="M14.6 20.6L21.65 13.55L20.25 12.15L14.6 17.8L11.75 14.95L10.35 16.35L14.6 20.6ZM16 26C14.6167 26 13.3167 25.7373 12.1 25.212C10.8833 24.6873 9.825 23.975 8.925 23.075C8.025 22.175 7.31267 21.1167 6.788 19.9C6.26267 18.6833 6 17.3833 6 16C6 14.6167 6.26267 13.3167 6.788 12.1C7.31267 10.8833 8.025 9.825 8.925 8.925C9.825 8.025 10.8833 7.31233 12.1 6.787C13.3167 6.26233 14.6167 6 16 6C17.3833 6 18.6833 6.26233 19.9 6.787C21.1167 7.31233 22.175 8.025 23.075 8.925C23.975 9.825 24.6873 10.8833 25.212 12.1C25.7373 13.3167 26 14.6167 26 16C26 17.3833 25.7373 18.6833 25.212 19.9C24.6873 21.1167 23.975 22.175 23.075 23.075C22.175 23.975 21.1167 24.6873 19.9 25.212C18.6833 25.7373 17.3833 26 16 26Z" fill="#00DF80"/>
</g>
</svg>
</button>
</div>
<div class="border-success-msg position-absolute"></div>
</div>
<!-- پیغام موفق -->

View File

@@ -0,0 +1,3 @@
@namespace ServiceHost.Areas.AdminNew.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, ServiceHost

Some files were not shown because too many files have changed in this diff Show More