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; } } } }