/// <summary> /// Сохранение сущности в RX. /// </summary> /// <param name="shift">Сдвиг по горизонтали в XLSX документе. Необходим для обработки документов, составленных из элементов разных сущностей.</param> /// <param name="logger">Логировщик.</param> /// <returns>Число запрашиваемых параметров.</returns> public override IEnumerable <Structures.ExceptionsStruct> SaveToRX(NLog.Logger logger, bool supplementEntity, int shift = 0) { var exceptionList = new List <Structures.ExceptionsStruct>(); using (var session = new Session()) { var name = this.Parameters[shift + 0].Trim(); if (string.IsNullOrEmpty(name)) { var message = string.Format("Не заполнено поле \"Наименование\"."); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } var shortName = this.Parameters[shift + 1].Trim(); var headOffice = BusinessLogic.GetDepartment(session, this.Parameters[shift + 2].Trim(), exceptionList, logger); if (!string.IsNullOrEmpty(this.Parameters[shift + 2].Trim()) && headOffice == null) { headOffice = BusinessLogic.CreateDepartment(session, this.Parameters[shift + 2].Trim(), exceptionList, logger); //var message = string.Format("Не найдено Головное подразделение \"{1}\". Наименование подразделения: \"{0}\". ", name, this.Parameters[shift + 2].Trim()); //exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); //logger.Warn(message); } var businessUnit = BusinessLogic.GetBusinessUnit(session, this.Parameters[shift + 3].Trim(), exceptionList, logger); if (!string.IsNullOrEmpty(this.Parameters[shift + 3].Trim()) && businessUnit == null) { var message = string.Format("Не найдена НОР \"{1}\". Наименование подразделения: \"{0}\". ", name, this.Parameters[shift + 3].Trim()); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); logger.Warn(message); } var code = this.Parameters[shift + 4].Trim(); var manager = BusinessLogic.GetEmployee(session, this.Parameters[shift + 5].Trim(), exceptionList, logger); if (!string.IsNullOrEmpty(this.Parameters[shift + 5].Trim()) && manager == null) { var message = string.Format("Не найден Руководитель \"{1}\". Наименование подразделения: \"{0}\". ", name, this.Parameters[shift + 5].Trim()); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); logger.Warn(message); } var phone = this.Parameters[shift + 6].Trim(); var note = this.Parameters[shift + 7].Trim(); try { // Проверка кода подразделения. var resultCodeDepartment = BusinessLogic.CheckCodeDepartmentLength(code); if (!string.IsNullOrEmpty(resultCodeDepartment)) { var message = string.Format("Компания не может быть импортирована. Некорректный код подразделения. Наименование: \"{0}\", ИНН: {1}. {2}", name, code, resultCodeDepartment); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } var departments = Enumerable.ToList(session.GetAll <Sungero.Company.IDepartment>().Where(x => x.Name == name)); var department = (Enumerable.FirstOrDefault <Sungero.Company.IDepartment>(departments)); if (department == null) { department = session.Create <Sungero.Company.IDepartment>(); } department.Name = name; department.ShortName = shortName; department.Code = code; department.BusinessUnit = businessUnit; department.HeadOffice = headOffice; department.Manager = manager; department.Phone = phone; department.Note = note; department.Save(); } catch (Exception ex) { exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = "Error", Message = ex.Message }); return(exceptionList); } session.SubmitChanges(); } return(exceptionList); }
/// <summary> /// Сохранение сущности в RX. /// </summary> /// <param name="shift">Сдвиг по горизонтали в XLSX документе. Необходим для обработки документов, составленных из элементов разных сущностей.</param> /// <param name="logger">Логировщик.</param> /// <returns>Число запрашиваемых параметров.</returns> public override IEnumerable <Structures.ExceptionsStruct> SaveToRX(NLog.Logger logger, bool supplementEntity, int shift = 0) { var exceptionList = new List <Structures.ExceptionsStruct>(); exceptionList.AddRange(base.SaveToRX(logger, supplementEntity, 2)); using (var session = new Session()) { var lastName = this.Parameters[shift + 2].Trim(); if (string.IsNullOrEmpty(lastName)) { var message = string.Format("Не заполнено поле \"Фамилия\"."); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } var firstName = this.Parameters[shift + 3].Trim(); if (string.IsNullOrEmpty(firstName)) { var message = string.Format("Не заполнено поле \"Имя\"."); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } var middleName = this.Parameters[shift + 4].Trim(); var person = BusinessLogic.GetPerson(session, lastName, firstName, middleName, exceptionList, logger); if (person == null) { var message = string.Format("Не удалось создать персону \"{0} {1} {2}\".", lastName, firstName, middleName); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } var name = person.Name; var department = BusinessLogic.GetDepartment(session, this.Parameters[shift + 0].Trim(), exceptionList, logger); if (department == null && !string.IsNullOrEmpty(this.Parameters[shift + 0].Trim())) { department = BusinessLogic.CreateDepartment(session, this.Parameters[shift + 0].Trim(), exceptionList, logger); //var message = string.Format("Не на найдено подразделение \"{0}\".", this.Parameters[shift + 0].Trim()); //exceptionList.Add(new Structures.ExceptionsStruct {ErrorType = Constants.ErrorTypes.Error, Message = message}); //logger.Error(message); //return exceptionList; } var jobTitle = BusinessLogic.GetJobTitle(session, this.Parameters[shift + 1].Trim(), exceptionList, logger); if (jobTitle == null && !string.IsNullOrEmpty(this.Parameters[shift + 1].Trim())) { jobTitle = BusinessLogic.CreateJobTitle(session, this.Parameters[shift + 1].Trim(), exceptionList, logger); } var email = this.Parameters[shift + 14].Trim(); var phone = this.Parameters[shift + 13].Trim(); var note = this.Parameters[shift + 18].Trim(); try { var employees = Enumerable.ToList(session.GetAll <Sungero.Company.IEmployee>().Where(x => x.Name == name)); var employee = (Enumerable.FirstOrDefault <Sungero.Company.IEmployee>(employees)); if (employee != null) { var message = string.Format("Сотрудник не может быть импортирован. Найден дубль \"{0}\".", name); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } employee = session.Create <Sungero.Company.IEmployee>(); employee.Name = name; employee.Person = person; employee.Department = department; employee.JobTitle = jobTitle; employee.Email = email; employee.Phone = phone; employee.Note = note; employee.NeedNotifyExpiredAssignments = false; employee.NeedNotifyNewAssignments = false; employee.Save(); } catch (Exception ex) { exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = "Error", Message = ex.Message }); return(exceptionList); } session.SubmitChanges(); } return(exceptionList); }