Esempio n. 1
0
 /// <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());
 }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        /// <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);
        }