/// <summary> /// Получить дубли организации. /// </summary> /// <param name="excludeClosed">Исключить закрытые записи.</param> /// <returns>Дубли организации.</returns> public override List <ICounterparty> GetDuplicates(bool excludeClosed) { // TODO Dmitriev_IA: На 53202, 69259 добавить поиск по имени. // По умолчанию для CompanyBase ищем по ИНН/КПП. return(Functions.Module.Remote.GetDuplicateCounterparties(_obj.TIN, _obj.TRRC, string.Empty, _obj.Id, excludeClosed) .Where(x => CompanyBases.Is(x)) .ToList()); }
public override void Created(Sungero.Domain.CreatedEventArgs e) { ICompanyBase company; if (CallContext.CalledFrom(CompanyBases.Info)) { company = CompanyBases.Get(CallContext.GetCallerEntityId(CompanyBases.Info)); _obj.Company = company; } if (Contacts.Info.Properties.Company.TryGetFilter(out company)) { _obj.Company = company; } }
/// <summary> /// Получить дубли контрагентов. /// </summary> /// <param name="counterparties">Контрагенты, среди которых будет осуществляться поиск дублей.</param> /// <param name="tin">ИНН.</param> /// <param name="trrc">КПП.</param> /// <param name="name">Наименование контрагента.</param> /// <param name="excludeClosed">Признак необходимости исключить закрытые записи.</param> /// <returns>Список дублей контрагентов.</returns> private static List <ICounterparty> GetDuplicateCounterparties(IQueryable <ICounterparty> counterparties, string tin, string trrc, string name, bool excludeClosed) { var searchByName = !string.IsNullOrWhiteSpace(name); var searchByTin = !string.IsNullOrWhiteSpace(tin); var searchByTrrc = !string.IsNullOrWhiteSpace(trrc); if (!searchByName && !searchByTin) { return(new List <ICounterparty>()); } var duplicates = new List <ICounterparty>(); // Отфильтровать закрытые сущности. if (excludeClosed) { counterparties = counterparties.Where(x => x.Status != Sungero.CoreEntities.DatabookEntry.Status.Closed); } // Поиск по ИНН, если ИНН передан. if (searchByTin) { var counterpartiesByTin = counterparties.Where(x => x.TIN == tin); // Поиск по КПП, если КПП передан. if (searchByTrrc) { // Поиск по КПП или пустому КПП. Контрагент с пустым КПП также является потенциальным дублем. var companies = counterpartiesByTin.Where(c => CompanyBases.Is(c)).Select(c => CompanyBases.As(c)); duplicates = companies.Where(x => x.TRRC == trrc || x.TRRC == null || x.TRRC.Trim() == string.Empty).ToList <ICounterparty>(); // Поиск по Имени с пустыми ИНН и КПП, если ничего не найдено раньше. if (duplicates.Count == 0 && searchByName) { companies = counterparties.Where(x => CompanyBases.Is(x)).Select(x => CompanyBases.As(x)); duplicates = companies.Where(x => (x.TIN == null || x.TIN.Trim() == string.Empty) && (x.TRRC == null || x.TRRC.Trim() == string.Empty) && string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase)).ToList <ICounterparty>(); } } else { // Поиск по Имени с пустыми ИНН, если задано Имя, но по ИНН ничего не найдено. if (counterpartiesByTin.Count() == 0 && searchByName) { var counterpartiesByName = counterparties.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase)); duplicates = counterpartiesByName.Where(x => x.TIN == null || x.TIN.Trim() == string.Empty).ToList(); } else { duplicates = counterpartiesByTin.ToList(); } } } // Поиск по Имени, если задано только Имя. if (searchByName && !searchByTin) { duplicates = counterparties.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase)).ToList(); } return(duplicates); }