2022-03-15 18:00:53 +00:00
|
|
|
// (c) Copyright Ascensio System SIA 2010-2022
|
|
|
|
//
|
|
|
|
// This program is a free software product.
|
|
|
|
// You can redistribute it and/or modify it under the terms
|
|
|
|
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
|
|
|
|
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
|
|
|
|
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
|
|
|
|
// any third-party rights.
|
|
|
|
//
|
|
|
|
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
|
|
|
|
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
|
|
|
|
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
|
|
//
|
|
|
|
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
|
|
|
|
//
|
|
|
|
// The interactive user interfaces in modified source and object code versions of the Program must
|
|
|
|
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
|
|
|
|
//
|
|
|
|
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
|
|
|
|
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
|
|
|
|
// trademark law for use of our trademarks.
|
|
|
|
//
|
|
|
|
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
|
|
|
|
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
|
|
|
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
2020-06-03 15:04:14 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
namespace ASC.Data.Reassigns;
|
|
|
|
|
|
|
|
[Transient]
|
|
|
|
public class ReassignProgressItem : DistributedTaskProgress
|
2021-05-13 08:23:44 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
public Guid FromUser { get; private set; }
|
|
|
|
public Guid ToUser { get; private set; }
|
2020-09-30 10:54:49 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
|
|
|
private readonly IDictionary<string, StringValues> _httpHeaders;
|
2022-04-14 19:23:57 +00:00
|
|
|
private readonly int _tenantId;
|
|
|
|
private readonly Guid _currentUserId;
|
|
|
|
private readonly bool _deleteProfile;
|
2020-09-30 10:54:49 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
//private readonly IFileStorageService _docService;
|
|
|
|
//private readonly ProjectsReassign _projectsReassign;
|
2020-09-30 10:54:49 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
public ReassignProgressItem(
|
|
|
|
IServiceScopeFactory serviceScopeFactory,
|
2022-03-24 11:57:39 +00:00
|
|
|
IDictionary<string, StringValues> httpHeaders,
|
|
|
|
int tenantId, Guid fromUserId, Guid toUserId, Guid currentUserId, bool deleteProfile)
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
_serviceScopeFactory = serviceScopeFactory;
|
2022-04-14 19:42:15 +00:00
|
|
|
_httpHeaders = httpHeaders;
|
2022-02-10 08:44:59 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
//_docService = Web.Files.Classes.Global.FileStorageService;
|
|
|
|
//_projectsReassign = new ProjectsReassign();
|
|
|
|
|
|
|
|
_tenantId = tenantId;
|
|
|
|
FromUser = fromUserId;
|
|
|
|
ToUser = toUserId;
|
|
|
|
_currentUserId = currentUserId;
|
|
|
|
_deleteProfile = deleteProfile;
|
|
|
|
|
|
|
|
//_docService = Web.Files.Classes.Global.FileStorageService;
|
|
|
|
//_projectsReassign = new ProjectsReassign();
|
|
|
|
|
|
|
|
Id = QueueWorkerReassign.GetProgressItemId(tenantId, fromUserId);
|
|
|
|
Status = DistributedTaskStatus.Created;
|
|
|
|
Exception = null;
|
|
|
|
Percentage = 0;
|
|
|
|
IsCompleted = false;
|
|
|
|
}
|
|
|
|
|
2022-10-27 11:14:41 +00:00
|
|
|
protected override async Task DoJob()
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
using var scope = _serviceScopeFactory.CreateScope();
|
|
|
|
var scopeClass = scope.ServiceProvider.GetService<ReassignProgressItemScope>();
|
2022-04-14 19:42:15 +00:00
|
|
|
var queueWorkerRemove = scope.ServiceProvider.GetService<QueueWorkerRemove>();
|
2022-03-17 15:13:38 +00:00
|
|
|
var (tenantManager, coreBaseSettings, messageService, studioNotifyService, securityContext, userManager, userPhotoManager, displayUserSettingsHelper, messageTarget, options) = scopeClass;
|
2022-04-26 17:53:48 +00:00
|
|
|
var logger = options.CreateLogger("ASC.Web");
|
2022-03-17 15:13:38 +00:00
|
|
|
tenantManager.SetCurrentTenant(_tenantId);
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Percentage = 0;
|
|
|
|
Status = DistributedTaskStatus.Running;
|
|
|
|
|
|
|
|
securityContext.AuthenticateMeWithoutCookie(_currentUserId);
|
|
|
|
|
2022-04-28 09:15:33 +00:00
|
|
|
logger.LogInformation("reassignment of data from {fromUser} to {toUser}", FromUser, ToUser);
|
2022-03-17 15:13:38 +00:00
|
|
|
|
2022-04-25 18:02:18 +00:00
|
|
|
logger.LogInformation("reassignment of data from documents");
|
2022-03-17 15:13:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
//_docService.ReassignStorage(_fromUserId, _toUserId);
|
|
|
|
Percentage = 33;
|
|
|
|
PublishChanges();
|
|
|
|
|
2022-04-25 18:02:18 +00:00
|
|
|
logger.LogInformation("reassignment of data from projects");
|
2022-03-17 15:13:38 +00:00
|
|
|
|
|
|
|
//_projectsReassign.Reassign(_fromUserId, _toUserId);
|
|
|
|
Percentage = 66;
|
|
|
|
PublishChanges();
|
|
|
|
|
|
|
|
if (!coreBaseSettings.CustomMode)
|
2022-02-10 08:42:03 +00:00
|
|
|
{
|
2022-04-25 18:02:18 +00:00
|
|
|
logger.LogInformation("reassignment of data from crm");
|
2022-03-17 15:13:38 +00:00
|
|
|
|
|
|
|
//using (var scope = DIHelper.Resolve(_tenantId))
|
|
|
|
//{
|
|
|
|
// var crmDaoFactory = scope.Resolve<CrmDaoFactory>();
|
|
|
|
// crmDaoFactory.ContactDao.ReassignContactsResponsible(_fromUserId, _toUserId);
|
|
|
|
// crmDaoFactory.DealDao.ReassignDealsResponsible(_fromUserId, _toUserId);
|
|
|
|
// crmDaoFactory.TaskDao.ReassignTasksResponsible(_fromUserId, _toUserId);
|
|
|
|
// crmDaoFactory.CasesDao.ReassignCasesResponsible(_fromUserId, _toUserId);
|
|
|
|
//}
|
|
|
|
Percentage = 99;
|
|
|
|
PublishChanges();
|
2022-02-10 08:42:03 +00:00
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
|
|
|
|
SendSuccessNotify(userManager, studioNotifyService, messageService, messageTarget, displayUserSettingsHelper);
|
|
|
|
|
|
|
|
Percentage = 100;
|
|
|
|
Status = DistributedTaskStatus.Completed;
|
|
|
|
|
|
|
|
if (_deleteProfile)
|
2022-02-10 08:42:03 +00:00
|
|
|
{
|
2022-10-27 10:49:42 +00:00
|
|
|
await DeleteUserProfile(userManager, userPhotoManager, messageService, messageTarget, displayUserSettingsHelper, queueWorkerRemove);
|
2022-02-10 08:42:03 +00:00
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
2022-05-20 15:24:41 +00:00
|
|
|
logger.ErrorReassignProgressItem(ex);
|
2022-03-17 15:13:38 +00:00
|
|
|
Status = DistributedTaskStatus.Failted;
|
|
|
|
Exception = ex;
|
|
|
|
SendErrorNotify(userManager, studioNotifyService, ex.Message);
|
|
|
|
}
|
|
|
|
finally
|
|
|
|
{
|
2022-04-25 18:02:18 +00:00
|
|
|
logger.LogInformation("data reassignment is complete");
|
2022-03-17 15:13:38 +00:00
|
|
|
IsCompleted = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
PublishChanges();
|
|
|
|
}
|
|
|
|
|
|
|
|
public object Clone()
|
|
|
|
{
|
|
|
|
return MemberwiseClone();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void SendSuccessNotify(UserManager userManager, StudioNotifyService studioNotifyService, MessageService messageService, MessageTarget messageTarget, DisplayUserSettingsHelper displayUserSettingsHelper)
|
2020-08-24 18:41:06 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
var fromUser = userManager.GetUsers(FromUser);
|
|
|
|
var toUser = userManager.GetUsers(ToUser);
|
|
|
|
|
|
|
|
studioNotifyService.SendMsgReassignsCompleted(_currentUserId, fromUser, toUser);
|
|
|
|
|
|
|
|
var fromUserName = fromUser.DisplayUserName(false, displayUserSettingsHelper);
|
|
|
|
var toUserName = toUser.DisplayUserName(false, displayUserSettingsHelper);
|
|
|
|
|
|
|
|
if (_httpHeaders != null)
|
2020-07-29 21:57:58 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
messageService.Send(_httpHeaders, MessageAction.UserDataReassigns, messageTarget.Create(FromUser), new[] { fromUserName, toUserName });
|
2020-08-24 18:41:06 +00:00
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
messageService.Send(MessageAction.UserDataReassigns, messageTarget.Create(FromUser), fromUserName, toUserName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void SendErrorNotify(UserManager userManager, StudioNotifyService studioNotifyService, string errorMessage)
|
|
|
|
{
|
|
|
|
var fromUser = userManager.GetUsers(FromUser);
|
|
|
|
var toUser = userManager.GetUsers(ToUser);
|
|
|
|
|
|
|
|
studioNotifyService.SendMsgReassignsFailed(_currentUserId, fromUser, toUser, errorMessage);
|
|
|
|
}
|
|
|
|
|
2022-10-27 10:49:42 +00:00
|
|
|
private async Task DeleteUserProfile(UserManager userManager, UserPhotoManager userPhotoManager, MessageService messageService, MessageTarget messageTarget, DisplayUserSettingsHelper displayUserSettingsHelper, QueueWorkerRemove queueWorkerRemove)
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
var user = userManager.GetUsers(FromUser);
|
|
|
|
var userName = user.DisplayUserName(false, displayUserSettingsHelper);
|
|
|
|
|
2022-10-27 10:49:42 +00:00
|
|
|
await userPhotoManager.RemovePhoto(user.Id);
|
2022-10-27 11:06:37 +00:00
|
|
|
await userManager.DeleteUser(user.Id);
|
2022-04-14 19:42:15 +00:00
|
|
|
queueWorkerRemove.Start(_tenantId, user, _currentUserId, false);
|
2020-08-31 08:18:07 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
if (_httpHeaders != null)
|
2020-08-31 08:18:07 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
messageService.Send(_httpHeaders, MessageAction.UserDeleted, messageTarget.Create(FromUser), new[] { userName });
|
2020-08-31 08:18:07 +00:00
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
else
|
2020-08-07 15:42:58 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
messageService.Send(MessageAction.UserDeleted, messageTarget.Create(FromUser), userName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
[Scope]
|
|
|
|
public class ReassignProgressItemScope
|
|
|
|
{
|
|
|
|
private readonly TenantManager _tenantManager;
|
|
|
|
private readonly CoreBaseSettings _coreBaseSettings;
|
|
|
|
private readonly MessageService _messageService;
|
|
|
|
private readonly StudioNotifyService _studioNotifyService;
|
|
|
|
private readonly SecurityContext _securityContext;
|
|
|
|
private readonly UserManager _userManager;
|
|
|
|
private readonly UserPhotoManager _userPhotoManager;
|
|
|
|
private readonly DisplayUserSettingsHelper _displayUserSettingsHelper;
|
|
|
|
private readonly MessageTarget _messageTarget;
|
2022-04-26 17:53:48 +00:00
|
|
|
private readonly ILoggerProvider _options;
|
2022-03-17 15:13:38 +00:00
|
|
|
|
|
|
|
public ReassignProgressItemScope(TenantManager tenantManager,
|
|
|
|
CoreBaseSettings coreBaseSettings,
|
|
|
|
MessageService messageService,
|
|
|
|
StudioNotifyService studioNotifyService,
|
|
|
|
SecurityContext securityContext,
|
|
|
|
UserManager userManager,
|
|
|
|
UserPhotoManager userPhotoManager,
|
|
|
|
DisplayUserSettingsHelper displayUserSettingsHelper,
|
|
|
|
MessageTarget messageTarget,
|
2022-04-26 17:53:48 +00:00
|
|
|
ILoggerProvider options)
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
_tenantManager = tenantManager;
|
|
|
|
_coreBaseSettings = coreBaseSettings;
|
|
|
|
_messageService = messageService;
|
|
|
|
_studioNotifyService = studioNotifyService;
|
|
|
|
_securityContext = securityContext;
|
|
|
|
_userManager = userManager;
|
|
|
|
_userPhotoManager = userPhotoManager;
|
|
|
|
_displayUserSettingsHelper = displayUserSettingsHelper;
|
|
|
|
_messageTarget = messageTarget;
|
|
|
|
_options = options;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Deconstruct(out TenantManager tenantManager,
|
|
|
|
out CoreBaseSettings coreBaseSettings,
|
|
|
|
out MessageService messageService,
|
|
|
|
out StudioNotifyService studioNotifyService,
|
|
|
|
out SecurityContext securityContext,
|
|
|
|
out UserManager userManager,
|
|
|
|
out UserPhotoManager userPhotoManager,
|
|
|
|
out DisplayUserSettingsHelper displayUserSettingsHelper,
|
|
|
|
out MessageTarget messageTarget,
|
2022-04-26 17:53:48 +00:00
|
|
|
out ILoggerProvider optionsMonitor)
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
tenantManager = _tenantManager;
|
|
|
|
coreBaseSettings = _coreBaseSettings;
|
|
|
|
messageService = _messageService;
|
|
|
|
studioNotifyService = _studioNotifyService;
|
|
|
|
securityContext = _securityContext;
|
|
|
|
userManager = _userManager;
|
|
|
|
userPhotoManager = _userPhotoManager;
|
|
|
|
displayUserSettingsHelper = _displayUserSettingsHelper;
|
|
|
|
messageTarget = _messageTarget;
|
|
|
|
optionsMonitor = _options;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class ReassignProgressItemExtension
|
|
|
|
{
|
|
|
|
public static void Register(DIHelper services)
|
|
|
|
{
|
|
|
|
services.TryAdd<ReassignProgressItemScope>();
|
|
|
|
}
|
2019-06-21 10:42:16 +00:00
|
|
|
}
|