using GB5Shared.DaprCache;
using GB5Shared.DTO.Framework.Login;
using GB5Shared.GB5Exception;
using GB5Shared.GenerateAutoNumber;
using GB5Shared.QueryExecutor;
using PayRollDAL.CustomeCode.User;
using GB5Shared.DTO.Framework.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GB5Shared.DTO.Framework.AutoNumber;
namespace PayRollBLL.User
{
public class UserBLL : IUserBLL
{
private readonly IQueryExecutor _queryExecutor;
private readonly IUserDAL _UserDAL;
private readonly AutoNumber _autonumber;
///
/// Initializes a new instance of the class.
///
/// The query executor.
/// The user data access layer.
/// The auto number generator.
public UserBLL(IQueryExecutor queryExecutor, IUserDAL IUserDAL, AutoNumber AutoNumber)
{
_queryExecutor = queryExecutor;
_UserDAL = IUserDAL;
_autonumber = AutoNumber;
}
///
/// Saves the user details.
///
/// The user data transfer object.
/// The login data transfer object.
/// Indicates if the user is a new employee.
/// A task that represents the asynchronous save operation. The task result contains a string message indicating the result of the save operation.
public async Task Save(UserDTO UserDTO, LoginDTO LoginDTO, bool IsNewEmployee = false)
{
//IGenericLazyLoadingFrameDAL GenricLazy = null;
//PooledCommonFunctionFrameDAL CommonFunctionDAL = new PooledCommonFunctionFrameDAL();
//IFillFrameDLLEventLogDTO Fill = new FillFrameDLLEventLogDTO();
//IGenericLazyLoadingFrameDAL GenericUserVersion = null;
//IGenericLazyLoadingFrameDAL GenericDals = null;
//EventActionTriggerFrameDAL EventActionTriggerFrameBLL = new EventActionTriggerFrameDAL();
LoginDTO LoggingDTO = new LoginDTO();
CacheKeyGeneration Key = new();
try
{
if (UserDTO.UserPrimaryMail == "" || UserDTO.UserPrimaryMail == null)
{
throw new MethodNotAllowedException("Primary mail must be given..");
}
if (UserDTO.UserPrimaryMobile == "" || UserDTO.UserPrimaryMobile == null)
{
throw new MethodNotAllowedException("Mobile number must be given..");
}
//if (SameTransaction != null)
//{
// RoleCheck = 0;
//}
//if (SameTransaction != null || UserDTO.UserId != 0)
//{
// //Done by Vikash for Redmine Task #40413 on 19 Nov 2023
// //to do by sugesh move to dal
// //if (UserDTO.UserPrimaryMobile != "0")
// //{
// // Sql = UserQB.GET_PRIMARYMOBILE_NUMBER_ALREADY_PRESENT;
// // Sql = Sql.Replace(":primarymobile", UserDTO.UserPrimaryMobile);
// // Sql = Sql.Replace(":userid", UserDTO.UserId.ToString());
// // int Count = GenricLazy.TotalCountSqlSameSession(Sql, LoginDTO);
// // if (Count > 0)
// // {
// // throw new MethodNotAllowedException("Already given office mobile number exists..Can not proceed..");
// // }
// //}
//}
if (UserDTO.UserId != 0)
{
//wait to done by sugesh
//Sql = UserQB.GET_USER_MFA_AVAILABLE;
//Sql = Sql.Replace(":userid", UserDTO.UserId.ToString());
//IList TempUserMFADTOs = GenricLazy.ExceuteSelectQuery(Sql, LoginDTO);
//if (TempUserMFADTOs.Count == 0)
//{
// QRCodeRequired = false;
//}
//else
//{
// if (TempUserMFADTOs[0].UserMFAQRCode == null || TempUserMFADTOs[0].UserMFAQRCode == "")
// {
// QRCodeRequired = true;
// }
// else
// {
// QRCodeRequired = false;
// }
//}
}
#region Done by Vikash on 27th June 2021 Redmine 30770
//if (UserDTO.UserImportLinkToEmployee == 0)//If this 0 then user will be checked to employee
//{
// if (UserDTO.UserId == 0)//Only for Fresh Import
// {
// Sql = UserQB.GET_EMPLOYEE_ID_BASED_ON_USER_CODE;
// Sql = Sql.Replace(":employeecode", UserDTO.UserCode);
// IList EmpRes = GenricLazy.ExceuteSelectQuery(Sql, LoginDTO);
// if (EmpRes.Count == 0)
// {
// //Nothing to do ..No Employee found with given code during User Import
// }
// else if (EmpRes.Count == 1)
// {
// UserDTO.UserId = Convert.ToInt32(EmpRes[0]);
// }
// else
// {
// throw new MethodNotAllowedException("More than one Employee found for given Usercode..");
// }
// }
//}
#endregion
//if (UserDTO.UserPasswordType == 0)//Generated
//{
// if (UserDTO.UserId == 0 || (UserDTO.UserId != 0 && UserDTO.ResetuserPassword == 0))
// {
// string Password = CommonFunctionDAL.RandomGenerateAlphaNumeric(12);// Membership.GeneratePassword(12, 3);
// UserDTO.UserGeneratedPassword = Password;
// UserDTO.UserPassword = CommonFunctionDAL.EncryptPassword(UserDTO.UserCode, Password, "Private Data");
// UserDTO.UserWorkPeriodId = LoginDTO.WorkPeriodId;
// }
//}
//else
//{
// UserDTO.UserWorkPeriodId = LoginDTO.WorkPeriodId;
//}
//Unisoft.FrameworkDAL.Poco.User.User User = CommonFunctionDAL.GenericConversionDToToPoco(UserDTO);
int Initial_Id;
Initial_Id = UserDTO.UserId;
if (Initial_Id == 0)
{
AutoNumberDTO AutoNumberDTO = await _autonumber.GetNumberAsync(1, "EMPLOYEE", LoginDTO);
UserDTO.UserId = AutoNumberDTO.StartNumber;
}
//StandardFields
//User = GenricLazy.StandardFieldAssiging("USER", User, LoginDTO);
//LoggingDTO.Write("Calling User Save Function", FrameworkEnumDTO.LogLevel.INFO, LoginDTO);
//string Josn = CommonFunctionDAL.SerializeJson(UserDTO);
//EventLogDTO EventLogDTO = Fill.FillEventLog("Save User Name" + UserDTO.UserName, "", -1, LoginDTO.UserId, "", "", Josn, LoginDTO.MachineIP, EventTypeIdConstant.SaveUserEventTypeId, -1, -1, -1, -1, -1, LoginDTO);
if (Initial_Id == 0)
{
UserDTO.UserPasswordChangedOn = Convert.ToDateTime("01-Jan-1899");//During Save always password chnaged on 01-Jan-1899 for Bug #37054
//GenricLazy.Save(User, LoginDTO, EventLogDTO);
await _UserDAL.SaveUser(UserDTO, LoginDTO);
return "Details saved successfully.";
}
else
{
UserDTO.UserPasswordChangedOn = Convert.ToDateTime("01-Jan-1899");
await _UserDAL.UpdateUser(UserDTO, LoginDTO);
return "Details updated successfully.";
}
// List AttributesCriteiaDTOs = new List();
// List SectionCriteiaDTOs = new List();
// CriteriaDTO GenericCriteriaDTO = new CriteriaDTO();
// AttributesCriteriaDTO AttributesCriteiaDTO = new AttributesCriteriaDTO();
// List UserPicklistDTOs = new List();
// AttributesCriteiaDTO = new AttributesCriteriaDTO();
// AttributesCriteiaDTO.FieldName = "Id";
// AttributesCriteiaDTO.OperationType = CriteriaDTO.OperationType.Equal;
// AttributesCriteiaDTO.FieldValue = Initial_Id;
// AttributesCriteiaDTO.JoinType = CriteriaDTO.AttributeJoinOperationType.And;
// AttributesCriteiaDTOs.Add(AttributesCriteiaDTO);
// SectionCriteriaDTO SectionCriteiaDTO = new SectionCriteriaDTO();
// SectionCriteiaDTO.AttributesCriteriaList = AttributesCriteiaDTOs;
// SectionCriteiaDTO.OperationType = CriteriaDTO.SectionOperationType.None;
// SectionCriteiaDTOs.Add(SectionCriteiaDTO);
// GenericCriteriaDTO.SectionCriteriaList = SectionCriteiaDTOs;
// UserPicklistDTOs = await _UserDAL.GetUserOnCriteria(GenericCriteriaDTO, LoginDTO);
// if (UserPicklistDTOs.Count > 0)
// {
// //GenericDals = new GenericNhibernateLazyLoadingFrameDAL(LoginDTO);
// Unisoft.FrameworkDAL.Poco.User.User Userss = GenericDals.Get(UserPicklistDTOs[0].Id, LoginDTO);
// User.Version = Userss.Version;
// User.Password = Userss.Password;
// //User.WorkOuId = Userss.WorkOuId; //commanded for redmine 19136
// User.WorkPeriodId = Userss.WorkPeriodId;
// #region For redmine CR 15288
// if (UserDTO.UserPassword != "" && UserDTO.UserPassword != null)
// {
// if (UserDTO.ResetuserPassword == 0)
// {
// User.Password = UserDTO.UserPassword;//Encrypted from Front end itself
// }
// }
// #endregion
// //During Update always password chnaged on As per Logic ..if Login user is updating his/her Password Date chnage will take place
// //If Other user will change then system should Update date as 1899 if different passeword for Redmine 37054 by Vikash on 29 Oct 2022
// if (User.Id == LoginDTO.UserId)
// {
// if (Userss.Password != User.Password)
// {
// User.PasswordChangedOn = DateTime.UtcNow;
// }
// else
// {
// User.PasswordChangedOn = Userss.PasswordChangedOn;
// }
// }
// else
// {
// //Duing Update Bug #37054 by Vikash on 29 Oct 2022
// if (Userss.Password != User.Password)
// {
// User.PasswordChangedOn = Convert.ToDateTime("01-Jan-1899");
// }
// else
// {
// User.PasswordChangedOn = Userss.PasswordChangedOn;
// }
// }
// User.Role.Id = UserDTO.RoleId;
// GenricLazy.SaveOrUpdateGeneric(User, LoginDTO);
// }
// else
// {
// if (UserDTO.UserPasswordType == 0)//Generated
// {
// string Password = CommonFunctionDAL.RandomGenerateAlphaNumeric(12);// Membership.GeneratePassword(12, 3);
// UserDTO.UserGeneratedPassword = Password;
// UserDTO.UserPassword = CommonFunctionDAL.EncryptPassword(UserDTO.UserCode, Password, "Private Data");
// User.Password = UserDTO.UserPassword;
// User.WorkOuId = UserDTO.UserWorkOuId;
// User.WorkPeriodId = UserDTO.UserWorkPeriodId;
// User.Role.Id = UserDTO.RoleId;
// IsNewEmployee = true;
// }
// GenricLazy.Save(User, LoginDTO, EventLogDTO);
// }
//}
//starting of triggers
//if (UserDTO.UserId == 0 || IsNewEmployee == true)
//{
// //Filling UserSave Event
// UserSaveEventDTO UserSaveEventDTO = new UserSaveEventDTO();
// UserSaveEventDTO.UserDTO = UserDTO;
// UserSaveEventDTO.LoginDTO = LoginDTO;
// UserSaveEventDTO.ResponseId = User.Id;
// UserSaveEventDTO.GenericLazy = GenricLazy;
// //starting of Ticket User Save
// string NeedTicketUser = CommonFunctionDAL.ReadValueFromCommonConfig("TicketUserCreate");
// if (NeedTicketUser == "YES")
// {
// EventAggregator EventAggregator = new EventAggregator();
// SaveUserTrigger evt = EventAggregator.GetEvent();
// SaveUserSubscriber SaveUserSubscriber = new SaveUserSubscriber(EventAggregator);
// evt.Publish(UserSaveEventDTO);
// }
// //end of Ticketuser save
// //starting of uservsportlet
// EventAggregator EventAggregatorForUserVsPortlet = new EventAggregator();
// FillUserVsPortletTrigger evtUserVsPortlet = EventAggregatorForUserVsPortlet.GetEvent();
// FillUserVsPortletSubscriber FillUserVsPortletSubscriber = new FillUserVsPortletSubscriber(EventAggregatorForUserVsPortlet);
// evtUserVsPortlet.Publish(UserSaveEventDTO);
// //end
// //event trigger for Mail/SMS
// if (UserDTO.UserPasswordType == 0)//Generated
// {
// UserDTO.UserRegistrationDate = String.Format("{0:MMM dd}", CommonFunctionDAL.ServiceDate(LoginDTO));
// LoggingDTO.Write("EventMailPublisher Called for Mail", FrameworkEnumDTO.LogLevel.INFO, LoginDTO);
// //EventActionTriggerFrameBLL.EventActionTrigger(UserDTO, -1799999522, LoginDTO);//Not Required
// }
// //end
// //end of triggers
//}
//#region Done by Vikash on 27th June 2021 Redmine 30770
////if (UserDTO.UserImportLinkToEmployee == 0)
////{
//// Sql = UserQueryBuilder.GET_USER_ACCESS_RIGHTS;
//// Sql = Sql.Replace(":userid", User.Id.ToString());
//// IList Res = GenricLazy.ExceuteSelectQuery(Sql, LoginDTO);
//// if (Res.Count == 0)
//// {
//// AutoNumberDTO AutoNumber = GenricLazy.GetNumber(1, "USERACCESSRIGHTS", LoginDTO);
//// Sql = UserQueryBuilder.INSERT_USER_ACCESS_RIGHTS;
//// Sql = Sql.Replace(":autoid", AutoNumber.StartNumber.ToString());
//// Sql = Sql.Replace(":userid", User.Id.ToString());
//// Sql = Sql.Replace(":ouid", User.WorkOuId.ToString());
//// GenricLazy.ExceuteQuery(Sql, LoginDTO);
//// }
////}
//#endregion
////Done by Vikash on 26 Aug 2022 for MFA
//if (UserDTO.UserMFAUserSetting == 1)//0 Not Required 1 Required and Only During Save This will Generate
//{
// if (QRCodeRequired == true)//only No QR Code need to generate
// {
// GenricLazy.SessionFlush();
// GenerateAndUpdateMicrosoftMFA(User.Id, User.Code, UserDTO.UserMFAUserSetting, LoginDTO, GenricLazy);
// }
//}
//if (SameTransaction == null)
//{
// GenricLazy.Commit();
// if (Initial_Id == 0)
// {
// CommonFunctionDAL.PostEventTrigger(UserDTO, -1799999982, LoginDTO);
// }
// else
// {
// if (UserDTO.UserGeneratedPassword != "")
// {
// CommonFunctionDAL.PostEventTrigger(UserDTO, -1799999982, LoginDTO);
// }
// }
//}
//return User.Id;
}
catch (Exception)
{
throw;
}
finally
{
LoggingDTO = null;
}
}
}
}