/// <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 = "Error", Message = message }); logger.Error(message); return(exceptionList); } var legalName = this.Parameters[shift + 1].Trim(); var counterparty = BusinessLogic.GetConterparty(session, this.Parameters[shift + 2].Trim(), exceptionList, logger); if (!string.IsNullOrEmpty(this.Parameters[shift + 2].Trim()) && counterparty == null) { counterparty = BusinessLogic.CreateConterparty(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 headCompany = Sungero.Parties.Companies.As(counterparty); var nonresident = this.Parameters[shift + 3] == "Да" ? true : false; var tin = this.Parameters[shift + 4].Trim(); var trrc = this.Parameters[shift + 5].Trim(); var psrn = this.Parameters[shift + 6].Trim(); var nceo = this.Parameters[shift + 7].Trim(); var ncea = this.Parameters[shift + 8].Trim(); var city = BusinessLogic.GetCity(session, this.Parameters[shift + 9].Trim(), exceptionList, logger); if (!string.IsNullOrEmpty(this.Parameters[shift + 9].Trim()) && city == null) { var message = string.Format("Не найден Населенный пункт \"{1}\". Наименование организации: \"{0}\". ", name, this.Parameters[shift + 9].Trim()); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); logger.Warn(message); } var region = BusinessLogic.GetRegion(session, this.Parameters[shift + 10].Trim(), exceptionList, logger); if (!string.IsNullOrEmpty(this.Parameters[shift + 10].Trim()) && region == null) { var message = string.Format("Не найден Регион \"{1}\". Наименование организации: \"{0}\". ", name, this.Parameters[shift + 10].Trim()); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); logger.Warn(message); } var legalAdress = this.Parameters[shift + 11].Trim(); var postalAdress = this.Parameters[shift + 12].Trim(); var phones = this.Parameters[shift + 13].Trim(); var email = this.Parameters[shift + 14].Trim(); var homepage = this.Parameters[shift + 15].Trim(); var note = this.Parameters[shift + 16].Trim(); var account = this.Parameters[shift + 17].Trim(); var bank = BusinessLogic.GetBank(session, this.Parameters[shift + 18].Trim(), exceptionList, logger); if (!string.IsNullOrEmpty(this.Parameters[shift + 18]) && bank == null) { var message = string.Format("Не найден Банк \"{1}\". Наименование организации: \"{0}\". ", name, this.Parameters[shift + 18].Trim()); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); logger.Warn(message); } try { // Проверка ИНН. var resultTIN = Sungero.Parties.PublicFunctions.Counterparty.CheckTin(tin, true); if (!string.IsNullOrEmpty(resultTIN)) { var message = string.Format("Компания не может быть импортирована. Некорректный ИНН. Наименование: \"{0}\", ИНН: {1}. {2}", name, tin, resultTIN); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } // Проверка КПП. var resultTRRC = BusinessLogic.CheckTrrcLength(trrc); if (!string.IsNullOrEmpty(resultTRRC)) { var message = string.Format("Компания не может быть импортирована. Некорректный КПП. Наименование: \"{0}\", КПП: {1}. {2}", name, trrc, resultTRRC); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } // Проверка ОГРН. var resultPSRN = BusinessLogic.CheckPsrnLength(psrn); if (!string.IsNullOrEmpty(resultPSRN)) { var message = string.Format("Компания не может быть импортирована. Некорректный ОГРН. Наименование: \"{0}\", ОГРН: {1}. {2}", name, psrn, resultPSRN); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } var companies = Enumerable.ToList(session.GetAll <Sungero.Parties.ICompany>().Where(x => x.Name == name || (!string.IsNullOrEmpty(tin) && x.TIN == tin && !string.IsNullOrEmpty(trrc) && x.TRRC == trrc) || !string.IsNullOrEmpty(psrn) && x.PSRN == psrn)); var company = (Enumerable.FirstOrDefault <Sungero.Parties.ICompany>(companies)); if (company != null) { if (!supplementEntity) { var message = string.Format("Компания не может быть импортирована. Найден дубль по реквизитам Наименование: \"{0}\", ИНН: {1} + КПП {2}, ОГРН: {3}.", name, tin, trrc, psrn); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = message }); logger.Error(message); return(exceptionList); } } else { company = session.Create <Sungero.Parties.ICompany>(); } company.Name = name; company.LegalName = legalName; company.HeadCompany = headCompany; company.Nonresident = nonresident; company.TIN = tin; company.TRRC = trrc; company.PSRN = psrn; company.NCEO = nceo; company.NCEA = ncea; company.City = city; company.Region = region; company.LegalAddress = legalAdress; company.PostalAddress = postalAdress; company.Phones = phones; company.Email = email; company.Homepage = homepage; company.Note = note; company.Account = account; company.Bank = bank; company.Save(); } catch (Exception ex) { Console.WriteLine(ex.Message); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Error, Message = ex.Message }); return(exceptionList); } session.SubmitChanges(); } return(exceptionList); }