public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            if (_filter.Active || _filter.Closed)
            {
                query = query.Where(r => _filter.Active && r.Status == Status.Active ||
                                    _filter.Closed && r.Status == Status.Closed);
            }

            if (_filter.Department != null)
            {
                if (!_filter.IncludeSubdepartments)
                {
                    query = query.Where(r => Equals(r.Department, _filter.Department));
                }
                else
                {
                    var subDepartmentIds = PublicFunctions.Department.Remote.GetSubordinateDepartmentIds(_filter.Department);
                    query = query.Where(r => Equals(r.Department, _filter.Department) ||
                                        subDepartmentIds.Contains(r.Department.Id));
                }
            }

            if (_filter.BusinessUnit != null)
            {
                var allBusinessUnitDepartments = Functions.BusinessUnit.GetAllDepartments(_filter.BusinessUnit);
                query = query.Where(r => allBusinessUnitDepartments.Contains(r.Department));
            }

            return(query);
        }
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            if (_filter.Active || _filter.Closed)
            {
                query = query.Where(r => _filter.Active && r.Status == Status.Active ||
                                    _filter.Closed && r.Status == Status.Closed);
            }

            if (_filter.Recipient != null)
            {
                var ids            = Users.OwnRecipientIdsFor(_filter.Recipient).ToList();
                var headRecipients = PublicFunctions.Module.GetHeadRecipientsByEmployee(_filter.Recipient.Id);
                ids.AddRange(headRecipients);
                query = query.Where(q => q.Recipients.Any(r => ids.Contains(r.Recipient.Id)));
            }

            if (_filter.VisibleMember != null)
            {
                var ids            = Users.OwnRecipientIdsFor(_filter.VisibleMember).ToList();
                var headRecipients = PublicFunctions.Module.GetHeadRecipientsByEmployee(_filter.VisibleMember.Id);
                ids.AddRange(headRecipients);
                query = query.Where(q => q.VisibleMembers.Any(r => ids.Contains(r.Recipient.Id)) && !q.ExcludedMembers.Any(r => ids.Contains(r.Recipient.Id)));
            }

            return(query);
        }
Exemple #3
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            if (_filter.Active || _filter.Closed)
            {
                query = query.Where(r => _filter.Active && r.Status == Status.Active ||
                                    _filter.Closed && r.Status == Status.Closed);
            }

            if (_filter.JobTitle != null)
            {
                query = query.Where(r => Equals(r.JobTitle, _filter.JobTitle));
            }

            if (_filter.Department != null)
            {
                var employees = Departments.GetAllUsersInGroup(_filter.Department).ToList();
                query = query.Where(r => employees.Contains(r));
            }

            if (_filter.BusinessUnit != null)
            {
                var employees = Company.BusinessUnits.GetAllUsersInGroup(_filter.BusinessUnit).ToList();
                query = query.Where(r => employees.Contains(r));
            }

            return(query);
        }
Exemple #4
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            if (_filter.Active || _filter.Closed)
            {
                query = query.Where(r => _filter.Active && r.Status == Status.Active || _filter.Closed && r.Status == Status.Closed);
            }

            if (_filter.BusinessUnit != null)
            {
                query = query.Where(r => !r.BusinessUnits.Any() || r.BusinessUnits.Any(u => Equals(u.BusinessUnit, _filter.BusinessUnit)));
            }

            if (_filter.Department != null)
            {
                query = query.Where(r => !r.Departments.Any() || r.Departments.Any(u => Equals(u.Department, _filter.Department)));
            }

            if (_filter.DocumentKind != null)
            {
                query = query.Where(r => !r.DocumentKinds.Any() || r.DocumentKinds.Any(u => Equals(u.DocumentKind, _filter.DocumentKind)));
            }

            return(query);
        }
Exemple #5
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            if (_filter.Active || _filter.Closed)
            {
                query = query.Where(r => _filter.Active && r.Status == Status.Active ||
                                    _filter.Closed && r.Status == Status.Closed);
            }

            if (_filter.BusinessUnit != null)
            {
                query = query.Where(b =>
                                    (BusinessUnitBoxes.Is(b) && Equals(BusinessUnitBoxes.As(b).BusinessUnit, _filter.BusinessUnit)) ||
                                    (DepartmentBoxes.Is(b) && Equals(DepartmentBoxes.As(b).RootBox.BusinessUnit, _filter.BusinessUnit)));
            }

            if (_filter.ExchangeService != null)
            {
                query = query.Where(b =>
                                    (BusinessUnitBoxes.Is(b) && Equals(BusinessUnitBoxes.As(b).ExchangeService, _filter.ExchangeService)) ||
                                    (DepartmentBoxes.Is(b) && Equals(DepartmentBoxes.As(b).RootBox.ExchangeService, _filter.ExchangeService)));
            }

            return(query);
        }
        public virtual IQueryable <Sungero.Docflow.IDocumentKind> KindFiltering(IQueryable <Sungero.Docflow.IDocumentKind> query,
                                                                                Sungero.Domain.FilteringEventArgs e)
        {
            var kinds = Functions.DocumentKind.GetAvailableDocumentKinds(typeof(T));

            return(query.Where(d => d.Status == CoreEntities.DatabookEntry.Status.Active &&
                               d.DocumentType.DocumentFlow == DocumentType.DocumentFlow.Inner && kinds.Contains(d)));
        }
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            if (_filter.Active || _filter.Closed)
            {
                query = query.Where(s => (_filter.Active && s.Status == CoreEntities.DatabookEntry.Status.Active) ||
                                    (_filter.Closed && s.Status == CoreEntities.DatabookEntry.Status.Closed));
            }

            if (_filter.DocumentKind != null)
            {
                query = query.Where(s => !s.DocumentKinds.Any() || s.DocumentKinds.Any(k => Equals(k.DocumentKind, _filter.DocumentKind)));
            }

            if (_filter.Today)
            {
                query = query.Where(s => (!s.ValidFrom.HasValue || s.ValidFrom.Value <= Calendar.UserToday) &&
                                    (!s.ValidTill.HasValue || s.ValidTill.Value >= Calendar.UserToday));
            }
            if (_filter.Period)
            {
                if (_filter.DateRangeFrom.HasValue)
                {
                    query = query.Where(s => !s.ValidTill.HasValue || s.ValidTill.Value >= _filter.DateRangeFrom.Value);
                }
                if (_filter.DateRangeTo.HasValue)
                {
                    query = query.Where(s => !s.ValidFrom.HasValue || s.ValidFrom.Value <= _filter.DateRangeTo.Value);
                }
            }

            if (_filter.Recipient != null)
            {
                var ids = Recipients.OwnRecipientIdsFor(_filter.Recipient).ToList();
                query = query.Where(s => ids.Contains(s.Recipient.Id));
            }

            if (_filter.Incoming || _filter.Outgoing || _filter.Inner || _filter.Contracts)
            {
                query = query.Where(s => (s.DocumentFlow == SignatureSetting.DocumentFlow.Incoming && _filter.Incoming) ||
                                    (s.DocumentFlow == SignatureSetting.DocumentFlow.Outgoing && _filter.Outgoing) ||
                                    (s.DocumentFlow == SignatureSetting.DocumentFlow.Inner && _filter.Inner) ||
                                    (s.DocumentFlow == SignatureSetting.DocumentFlow.Contracts && _filter.Contracts) ||
                                    s.DocumentFlow == SignatureSetting.DocumentFlow.All);
            }

            return(query);
        }
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            // Фильтр по виду документа.
            if (_filter.Kind != null)
            {
                query = query.Where(d => Equals(d.DocumentKind, _filter.Kind));
            }

            // Фильтр по статусу.
            if (_filter.Active || _filter.Obsolete || _filter.InWork)
            {
                query = query.Where(l => _filter.Active && l.LifeCycleState == OfficialDocument.LifeCycleState.Active ||
                                    _filter.InWork && l.LifeCycleState == OfficialDocument.LifeCycleState.Draft ||
                                    _filter.Obsolete && l.LifeCycleState == OfficialDocument.LifeCycleState.Obsolete);
            }

            // Фильтр по интервалу времени.
            var periodBegin = Calendar.UserToday.AddDays(-7);
            var periodEnd   = Calendar.UserToday.EndOfDay();

            if (_filter.CurrentYear)
            {
                periodBegin = Calendar.UserToday.BeginningOfYear();
            }

            if (_filter.LastYear)
            {
                var lastYear = Calendar.UserToday.AddYears(-1);
                periodBegin = lastYear.BeginningOfYear();
                periodEnd   = lastYear.EndOfYear();
            }

            if (_filter.Manual)
            {
                periodBegin = _filter.RangeOfDateFrom ?? Calendar.SqlMinValue;
                periodEnd   = _filter.RangeOfDateTo ?? Calendar.SqlMaxValue;
            }
            var serverPeriodBegin = Equals(Calendar.SqlMinValue, periodBegin) ? periodBegin : Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(periodBegin);
            var serverPeriodEnd   = Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd : periodEnd.EndOfDay().FromUserTime();
            var clientPeriodEnd   = !Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd.AddDays(1) : Calendar.SqlMaxValue;

            query = query.Where(j => (j.DocumentDate.Between(serverPeriodBegin, serverPeriodEnd) ||
                                      j.DocumentDate == periodBegin) && j.DocumentDate != clientPeriodEnd);

            return(query);
        }
 public override IQueryable<T> Filtering(IQueryable<T> query, Sungero.Domain.FilteringEventArgs e)
 {      
   #region Фильтры
   
   if (_filter == null)
     return query;
   
   // Состояние.
   if ((_filter.DraftState || _filter.ActiveState || _filter.ObsoleteState) &&
       !(_filter.DraftState && _filter.ActiveState && _filter.ObsoleteState))
   {
     query = query.Where(c => (_filter.DraftState && c.LifeCycleState == AccountingDocumentBase.LifeCycleState.Draft) ||
                         (_filter.ActiveState && c.LifeCycleState == AccountingDocumentBase.LifeCycleState.Active) ||
                         (_filter.ObsoleteState && c.LifeCycleState == AccountingDocumentBase.LifeCycleState.Obsolete));
   }
   
   // Фильтр "Наша организация".
   if (_filter.BusinessUnit != null)
     query = query.Where(c => Equals(c.BusinessUnit, _filter.BusinessUnit));
   
   // Фильтр "Подразделение".
   if (_filter.Department != null)
     query = query.Where(c => Equals(c.Department, _filter.Department));
   
   // Фильтр "Кому выдана".
   if (_filter.Performer != null)
     query = query.Where(c => Equals(c.IssuedTo, _filter.Performer));
   
   // Период.
   if (_filter.Today)
     query = query.Where(c => (!c.RegistrationDate.HasValue || c.RegistrationDate <= Calendar.UserToday) &&
                         (!c.ValidTill.HasValue || c.ValidTill >= Calendar.UserToday));
   
   if (_filter.ManualPeriodPOA)
   {
     if (_filter.DateRangeFrom.HasValue)
       query = query.Where(c => !c.ValidTill.HasValue || c.ValidTill >= _filter.DateRangeFrom);
     if (_filter.DateRangeTo.HasValue)
       query = query.Where(c => !c.RegistrationDate.HasValue || c.RegistrationDate <= _filter.DateRangeTo);
   }
   
   #endregion
   
   return query;
 }
Exemple #10
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            // Фильтр при создании документа из шаблона.
            if (_createFromTemplateContext != null)
            {
                // Фильтр по состоянию.
                query = query.Where(d => d.Status == Status.Active);

                // Фильтр по критериям.
                if (Docflow.OfficialDocuments.Is(_createFromTemplateContext))
                {
                    var document = Docflow.OfficialDocuments.As(_createFromTemplateContext);
                    query = FilterTemplatesByCriteria(query,
                                                      document,
                                                      document.DocumentKind,
                                                      document.BusinessUnit,
                                                      document.Department,
                                                      true);
                }
            }
            else if (_filter != null)
            {
                // Фильтр в списке.
                // Фильтр по состоянию.
                if (_filter.Active != _filter.Closed)
                {
                    query = query.Where(d => _filter.Active && d.Status == Status.Active ||
                                        _filter.Closed && d.Status == Status.Closed);
                }

                // Фильтр по критериям.
                query = FilterTemplatesByCriteria(query,
                                                  null,
                                                  _filter.DocumentKind,
                                                  _filter.BusinessUnit,
                                                  _filter.Department,
                                                  false);
            }

            return(query);
        }
Exemple #11
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter != null)
            {
                if (_filter.Company || _filter.Person || _filter.Bank)
                {
                    query = query.Where(x => (_filter.Company && Companies.Is(x)) ||
                                        (_filter.Person && People.Is(x)) ||
                                        (_filter.Bank && Banks.Is(x)));
                }

                if (_filter.Responsible != null)
                {
                    query = query.Where(x => Counterparties.Is(x) && Equals(_filter.Responsible, Counterparties.As(x).Responsible));
                }
            }

            // Исключение системного контрагента - "По списку рассылки".
            var distributionListCounterparty = Parties.PublicFunctions.Counterparty.Remote.GetDistributionListCounterparty();

            return(query.Where(x => !Equals(x, distributionListCounterparty)));
        }
        public virtual IQueryable <Sungero.Docflow.IDocumentKind> DocumentKindFiltering(IQueryable <Sungero.Docflow.IDocumentKind> query, Sungero.Domain.FilteringEventArgs e)
        {
            // При вызове во внутренних документах, не выводим Не нумеруемые виды документов.
            if (this.IsInternalDocumentBase())
            {
                query = query.Where(d => d.NumberingType != DocumentKind.NumberingType.NotNumerable && d.DocumentType.IsRegistrationAllowed == true);

                // TODO Zamerov: явно убираем приложения.
                var guid = Server.Addendum.ClassTypeGuid.ToString();
                query = query.Where(d => d.DocumentType.DocumentTypeGuid != guid);

                // Убираем документы контрагента.
                var сounterpartyDocumentTypeGuid = Sungero.Docflow.Server.CounterpartyDocument.ClassTypeGuid.ToString();
                query = query.Where(d => d.DocumentType.DocumentTypeGuid != сounterpartyDocumentTypeGuid);
            }

            var kinds = Functions.DocumentKind.GetAvailableDocumentKinds(typeof(T));

            return(query.Where(d => d.Status == CoreEntities.DatabookEntry.Status.Active &&
                               d.DocumentType.DocumentFlow == DocumentType.DocumentFlow.Inner && kinds.Contains(d)));
        }
 public virtual IQueryable <Sungero.Company.IDepartment> DepartmentFiltering(IQueryable <Sungero.Company.IDepartment> query, Sungero.Domain.FilteringEventArgs e)
 {
     return(query);
 }
Exemple #14
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(query);
            }

            // Фильтр по состоянию.
            if (_filter.Planing || _filter.CreateDocument || _filter.ExecuteActionItems || _filter.Concluded)
            {
                var minutes = Minuteses.GetAll(d => d.Meeting != null);

                query = query.Where(x => (_filter.Planing && x.DateTime >= Calendar.Now && x.Status == Meeting.Status.Active) ||
                                    (_filter.CreateDocument && !minutes.Any(m => Equals(m.Meeting, x)) && x.DateTime < Calendar.Now) ||
                                    (_filter.ExecuteActionItems && minutes.Any(m => Equals(m.Meeting, x) && m.ExecutionState == Docflow.OfficialDocument.ExecutionState.OnExecution)) ||
                                    (_filter.Concluded && x.DateTime < Calendar.Now));
            }

            // Фильтр по участникам
            var currentEmployee = Company.Employees.Current;

            if (_filter.My && currentEmployee != null)
            {
                var employeeIds = Company.Employees.OwnRecipientIds;
                query = query.Where(x => Equals(x.President, currentEmployee) ||
                                    Equals(x.Secretary, currentEmployee) ||
                                    x.Members.Any(m => employeeIds.Contains(m.Member.Id)));
            }

            if (_filter.ShowEmployee)
            {
                var employee = _filter.Employee;
                if (employee != null)
                {
                    var employeeIds = Company.Employees.OwnRecipientIdsFor(employee);
                    query = query.Where(x => Equals(x.President, employee) ||
                                        Equals(x.Secretary, employee) ||
                                        x.Members.Any(m => employeeIds.Contains(m.Member.Id)));
                }
            }

            // Фильтр по дате проведения.
            DateTime?periodBegin = null;
            DateTime?periodEnd   = null;

            if (_filter.CurrentWeek)
            {
                periodBegin = Calendar.UserToday.BeginningOfWeek();
                periodEnd   = Calendar.UserToday.EndOfWeek();
            }

            if (_filter.CurrentMounth)
            {
                periodBegin = Calendar.UserToday.BeginningOfMonth();
                periodEnd   = Calendar.UserToday.EndOfMonth();
            }

            if (_filter.ShowPeriod)
            {
                if (_filter.DateRangeFrom.HasValue)
                {
                    periodBegin = _filter.DateRangeFrom.Value;
                }
                if (_filter.DateRangeTo.HasValue)
                {
                    periodEnd = _filter.DateRangeTo.Value;
                }
            }

            if (periodBegin != null)
            {
                periodBegin = Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(periodBegin.Value);
                query       = query.Where(x => x.DateTime >= periodBegin);
            }
            if (periodEnd != null)
            {
                periodEnd = periodEnd.Value.EndOfDay().FromUserTime();
                query     = query.Where(x => x.DateTime <= periodEnd);
            }

            return(query);
        }
Exemple #15
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            query = base.Filtering(query, e);

            #region Фильтры

            if (_filter == null)
            {
                return(query);
            }

            // Исключаем входящие счета из финархива, но только если это визуальный список с панелью фильтрации.
            var documents = query.Where(d => !Contracts.IncomingInvoices.Is(d));

            // Состояние.
            if ((_filter.DraftState || _filter.ActiveState || _filter.ObsoleteState) &&
                !(_filter.DraftState && _filter.ActiveState && _filter.ObsoleteState))
            {
                documents = documents.Where(x => (_filter.DraftState && x.LifeCycleState == AccountingDocumentBase.LifeCycleState.Draft) ||
                                            (_filter.ActiveState && x.LifeCycleState == AccountingDocumentBase.LifeCycleState.Active) ||
                                            (_filter.ObsoleteState && x.LifeCycleState == AccountingDocumentBase.LifeCycleState.Obsolete));
            }

            // Фильтр "Период".
            var beginDate = Calendar.UserToday.BeginningOfMonth();
            var endDate   = Calendar.UserToday.EndOfMonth();

            if (_filter.PreviousMonth)
            {
                beginDate = Calendar.UserToday.AddMonths(-1).BeginningOfMonth();
                endDate   = Calendar.UserToday.AddMonths(-1).EndOfMonth();
            }
            if (_filter.CurrentQuarter)
            {
                beginDate = Functions.AccountingDocumentBase.BeginningOfQuarter(Calendar.UserToday);
                endDate   = Functions.AccountingDocumentBase.EndOfQuarter(Calendar.UserToday);
            }
            if (_filter.PreviousQuarter)
            {
                beginDate = Functions.AccountingDocumentBase.BeginningOfQuarter(Calendar.UserToday.AddMonths(-3));
                endDate   = Functions.AccountingDocumentBase.EndOfQuarter(Calendar.UserToday.AddMonths(-3));
            }

            if (_filter.ManualPeriod)
            {
                beginDate = _filter.DateRangeFrom ?? Calendar.SqlMinValue;
                endDate   = _filter.DateRangeTo ?? Calendar.SqlMaxValue;
            }

            var serverPeriodBegin = Equals(Calendar.SqlMinValue, beginDate) ? beginDate : Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(beginDate);
            var serverPeriodEnd   = Equals(Calendar.SqlMaxValue, endDate) ? endDate : endDate.EndOfDay().FromUserTime();
            var clientPeriodEnd   = !Equals(Calendar.SqlMaxValue, endDate) ? endDate.AddDays(1) : Calendar.SqlMaxValue;
            documents = documents.Where(j => (j.DocumentDate.Between(serverPeriodBegin, serverPeriodEnd) ||
                                              j.DocumentDate == beginDate) && j.DocumentDate != clientPeriodEnd);

            // Фильтр "Типы документов".
            var documentTypes = new List <string>();
            if (_filter.TaxInvoice)
            {
                documentTypes.Add(Constants.AccountingDocumentBase.IncomingTaxInvoiceGuid);
                documentTypes.Add(Constants.AccountingDocumentBase.OutcomingTaxInvoiceGuid);
            }
            if (_filter.Waybill)
            {
                documentTypes.Add(Constants.AccountingDocumentBase.WaybillInvoiceGuid);
            }
            if (_filter.ContractStatement)
            {
                documentTypes.Add(Constants.AccountingDocumentBase.ContractStatementInvoiceGuid);
            }
            if (_filter.UniversalTransfer)
            {
                documentTypes.Add(Constants.AccountingDocumentBase.UniversalTransferDocumentGuid);
            }

            if (documentTypes.Any())
            {
                documents = documents.Where(c => documentTypes.Contains(c.DocumentKind.DocumentType.DocumentTypeGuid));
            }

            // Фильтр "Наша организация".
            if (_filter.BusinessUnit != null)
            {
                documents = documents.Where(c => Equals(c.BusinessUnit, _filter.BusinessUnit));
            }

            // Фильтр "Подразделение".
            if (_filter.Department != null)
            {
                documents = documents.Where(c => Equals(c.Department, _filter.Department));
            }

            // Фильтр "Контрагенты".
            if (_filter.Counterparty != null)
            {
                documents = documents.Where(c => Equals(c.Counterparty, _filter.Counterparty));
            }

            #endregion

            return(documents);
        }
Exemple #16
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            query = base.Filtering(query, e);

            if (_filter == null)
            {
                return(query);
            }

            // Фильтр по состоянию.
            if (_filter.Active || _filter.Closed || _filter.Closing || _filter.Initiation)
            {
                query = query.Where(x => (_filter.Active && x.Stage == Stage.Execution) ||
                                    (_filter.Closed && x.Stage == Stage.Completed) ||
                                    (_filter.Closing && x.Stage == Stage.Completion) ||
                                    (_filter.Initiation && x.Stage == Stage.Initiation));
            }

            // Фильтр по виду проекта.
            if (_filter.ProjectKind != null)
            {
                query = query.Where(x => Equals(x.ProjectKind, _filter.ProjectKind));
            }

            // Фильтр по руководителю проекта.
            if (_filter.ProjectManager != null)
            {
                query = query.Where(x => Equals(x.Manager, _filter.ProjectManager));
            }

            // Фильтр по ведущему проекту.
            if (_filter.LeadingProject != null)
            {
                query = query.Where(x => Equals(x.LeadingProject, _filter.LeadingProject));
            }

            // Фильтр по внутреннему заказчику.
            if (_filter.InternalCustomer != null)
            {
                query = query.Where(x => Equals(x.InternalCustomer, _filter.InternalCustomer));
            }

            // Фильтр по внешнему заказчику.
            if (_filter.ExternalCustomer != null)
            {
                query = query.Where(x => Equals(x.ExternalCustomer, _filter.ExternalCustomer));
            }

            var today = Calendar.UserToday;

            // Фильтр по дате начала проекта.
            var startDateBeginPeriod = _filter.StartDateRangeFrom ?? Calendar.SqlMinValue;
            var startDateEndPeriod   = _filter.StartDateRangeTo ?? Calendar.SqlMaxValue;

            if (_filter.StartPeriodThisMonth)
            {
                startDateBeginPeriod = today.BeginningOfMonth();
                startDateEndPeriod   = today.EndOfMonth();
            }

            if (_filter.StartPeriodThisMonth || (_filter.StartDateRangeFrom != null || _filter.StartDateRangeTo != null))
            {
                query = query.Where(x => (x.StartDate.Between(startDateBeginPeriod, startDateEndPeriod) && !Equals(x.Stage, Stage.Completed)) ||
                                    (x.ActualStartDate.Between(startDateBeginPeriod, startDateEndPeriod) && Equals(x.Stage, Stage.Completed)));
            }

            // Фильтр по дате окончания проекта.
            var finishDateBeginPeriod = _filter.FinishDateRangeFrom ?? Calendar.SqlMinValue;
            var finishDateEndPeriod   = _filter.FinishDateRangeTo ?? Calendar.SqlMaxValue;

            if (_filter.FinishPeriodThisMonth)
            {
                finishDateBeginPeriod = today.BeginningOfMonth();
                finishDateEndPeriod   = today.EndOfMonth();
            }

            if (_filter.FinishPeriodThisMonth || (_filter.FinishDateRangeFrom != null || _filter.FinishDateRangeTo != null))
            {
                query = query.Where(x => (x.EndDate.Between(finishDateBeginPeriod, finishDateEndPeriod) && !Equals(x.Stage, Stage.Completed)) ||
                                    (x.ActualFinishDate.Between(finishDateBeginPeriod, finishDateEndPeriod) && Equals(x.Stage, Stage.Completed)));
            }

            return(query);
        }
Exemple #17
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            // Вернуть нефильтрованный список, если нет фильтра. Он будет использоваться во всех Get() и GetAll().
            var filter = _filter;

            if (filter == null)
            {
                return(query);
            }

            e.DisableCheckRights = true;

            // Не показывать не стартованные поручения.
            query = query.Where(l => l.Status != Sungero.Workflow.Task.Status.Draft);

            // Не показывать составные поручения (только подзадачи).
            query = query.Where(j => j.IsCompoundActionItem == false);

            // Фильтр по статусу.
            var statuses = new List <Enumeration>();

            if (filter.OnExecution)
            {
                statuses.Add(ExecutionState.OnExecution);
                statuses.Add(ExecutionState.OnControl);
                statuses.Add(ExecutionState.OnRework);
            }

            if (filter.Executed)
            {
                statuses.Add(ExecutionState.Executed);
                statuses.Add(ExecutionState.Aborted);
            }

            if (statuses.Any())
            {
                query = query.Where(q => q.ExecutionState != null && statuses.Contains(q.ExecutionState.Value));
            }

            // Фильтры "Поручения где я", "По сотруднику".
            var currentUser = Users.Current;

            // Сформировать списки пользователей для фильтрации.
            var authors     = new List <IUser>();
            var assignees   = new List <IUser>();
            var supervisors = new List <IUser>();

            if (filter.Author != null)
            {
                authors.Add(filter.Author);
            }
            if (filter.Assignee != null)
            {
                assignees.Add(filter.Assignee);
            }
            if (filter.Supervisor != null)
            {
                supervisors.Add(filter.Supervisor);
            }

            // Наложить фильтр по всем замещениям, если не указаны фильтры по текущему или выбранному сотруднику.
            if (!Docflow.PublicFunctions.Module.Remote.IsAdministratorOrAdvisor())
            {
                var allSubstitutes = Substitutions.ActiveSubstitutedUsers.ToList();
                allSubstitutes.Add(Users.Current);
                query = query.Where(j => allSubstitutes.Contains(j.AssignedBy) || allSubstitutes.Contains(j.Assignee) ||
                                    j.CoAssignees.Any(p => allSubstitutes.Contains(p.Assignee)) ||
                                    allSubstitutes.Contains(j.Supervisor) || allSubstitutes.Contains(j.StartedBy) ||
                                    j.ActionItemObservers.Any(o => Recipients.AllRecipientIds.Contains(o.Observer.Id)));
            }

            query = query.Where(j => (!authors.Any() || authors.Contains(j.AssignedBy)) &&
                                (!assignees.Any() || assignees.Contains(j.Assignee) || j.CoAssignees.Any(p => assignees.Contains(p.Assignee))) &&
                                (!supervisors.Any() || supervisors.Contains(j.Supervisor)));

            // Фильтр по соблюдению сроков.
            var now      = Calendar.Now;
            var today    = Calendar.UserToday;
            var tomorrow = today.AddDays(1);

            if (filter.Overdue)
            {
                query = query.Where(j => j.Status != Workflow.Task.Status.Aborted &&
                                    ((j.ActualDate == null && j.Deadline < now && j.Deadline != today && j.Deadline != tomorrow) ||
                                     (j.ActualDate != null && j.ActualDate > j.Deadline)));
            }
            // Фильтр по плановому сроку.
            if (filter.LastMonth)
            {
                var lastMonthBeginDate         = today.AddDays(-30);
                var lastMonthBeginDateNextDay  = lastMonthBeginDate.AddDays(1);
                var lastMonthBeginDateWithTime = Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(lastMonthBeginDate);

                query = query.Where(j => ((j.Deadline >= lastMonthBeginDateWithTime && j.Deadline < now) ||
                                          j.Deadline == lastMonthBeginDate || j.Deadline == lastMonthBeginDateNextDay || j.Deadline == today) &&
                                    j.Deadline != tomorrow);
            }

            if (filter.ManualPeriod)
            {
                if (filter.DateRangeFrom != null)
                {
                    var dateRangeFromNextDay = filter.DateRangeFrom.Value.AddDays(1);
                    var dateFromWithTime     = Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(filter.DateRangeFrom.Value);
                    query = query.Where(j => j.Deadline >= dateFromWithTime ||
                                        j.Deadline == filter.DateRangeFrom.Value || j.Deadline == dateRangeFromNextDay);
                }
                if (filter.DateRangeTo != null)
                {
                    var dateRangeNextDay = filter.DateRangeTo.Value.AddDays(1);
                    var dateTo           = filter.DateRangeTo.Value.EndOfDay().FromUserTime();
                    query = query.Where(j => (j.Deadline < dateTo || j.Deadline == filter.DateRangeTo.Value) &&
                                        j.Deadline != dateRangeNextDay);
                }
            }

            return(query);
        }
Exemple #18
0
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            var clerks = Functions.DocumentRegister.GetClerks();

            if (clerks != null)
            {
                var allRecipientIds = Recipients.AllRecipientIds;
                if (allRecipientIds.Contains(clerks.Id))
                {
                    query = query.Where(f => f.RegistrationGroup == RegistrationGroups.Null || f.RegistrationGroup.RecipientLinks.Any(l => allRecipientIds.Contains(l.Member.Id)));
                }
            }

            var filter = _filter;

            if (filter == null)
            {
                return(query);
            }

            // Фильтр по состоянию.
            if (filter.Active || filter.Closed)
            {
                query = query.Where(f => (filter.Active && f.Status.Value == CoreEntities.DatabookEntry.Status.Active) ||
                                    (filter.Closed && f.Status.Value == CoreEntities.DatabookEntry.Status.Closed));
            }

            // Фильтр по НОР.
            if (filter.BusinessUnit != null)
            {
                var departmentIds = Company.PublicFunctions.BusinessUnit.Remote.GetAllDepartmentIds(filter.BusinessUnit);
                query = query.Where(f => f.BusinessUnit != null && Equals(f.BusinessUnit, filter.BusinessUnit) ||
                                    f.BusinessUnit == null && f.Department != null && departmentIds.Contains(f.Department.Id));
            }

            // Фильтр по подразделению.
            if (filter.Department != null)
            {
                query = query.Where(f => f.Department == filter.Department);
            }

            // Фильтр по признаку "Переходящее".
            if (filter.Transient)
            {
                query = query.Where(f => f.LongTerm.HasValue && f.LongTerm.Value);
            }

            var currentYear = Calendar.UserToday.Year;

            // Фильтр по текущему году.
            if (filter.CurrentYear)
            {
                query = query.Where(f => f.StartDate.Value.Year <= currentYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= currentYear));
            }

            // Фильтр по предыдущему году.
            var previousYear = currentYear - 1;

            if (filter.PreviousYear)
            {
                query = query.Where(f => f.StartDate.Value.Year <= previousYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= previousYear));
            }

            // Фильтр по следующему году.
            var nextYear = currentYear + 1;

            if (filter.NextYear)
            {
                query = query.Where(f => f.StartDate.Value.Year <= nextYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= nextYear));
            }

            // Фильтр по диапазону лет.
            if (filter.ManualPeriod)
            {
                if (filter.DateRangeTo != null)
                {
                    query = query.Where(f => f.StartDate.Value.Year <= filter.DateRangeTo.Value.Year);
                }
                if (filter.DateRangeFrom != null)
                {
                    query = query.Where(f => !f.EndDate.HasValue || f.EndDate.Value.Year >= filter.DateRangeFrom.Value.Year);
                }
            }

            return(query);
        }
Exemple #19
0
 public virtual IQueryable <Sungero.Company.IJobTitle> JobTitleFiltering(IQueryable <Sungero.Company.IJobTitle> query, Sungero.Domain.FilteringEventArgs e)
 {
     return(query.Where(r => Equals(r.Status, Status.Active)));
 }
 public virtual IQueryable <Sungero.Docflow.IDocumentRegister> DocumentRegisterFiltering(IQueryable <Sungero.Docflow.IDocumentRegister> query, Sungero.Domain.FilteringEventArgs e)
 {
     return(Functions.DocumentRegister.GetAvailableDocumentRegisters(DocumentRegister.DocumentFlow.Inner));
 }
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            query = base.Filtering(query, e);

            if (_filter == null)
            {
                return(query);
            }

            // Фильтр по журналу регистрации.
            if (_filter.DocumentRegister != null)
            {
                query = query.Where(d => Equals(d.DocumentRegister, _filter.DocumentRegister));
            }

            // Фильтр по виду документа.
            if (_filter.DocumentKind != null)
            {
                query = query.Where(d => Equals(d.DocumentKind, _filter.DocumentKind));
            }

            // Фильтр по статусу. Если все галочки включены, то нет смысла добавлять фильтр.
            if (_filter.Registered != _filter.NotRegistered)
            {
                query = query
                        .Where(d => _filter.Registered && d.RegistrationState == OfficialDocument.RegistrationState.Registered ||
                               _filter.NotRegistered && d.RegistrationState == OfficialDocument.RegistrationState.NotRegistered);
            }

            // Фильтр по контрагенту.
            if (_filter.Counterparty != null)
            {
                query = query.Where(d => Equals(d.Correspondent, _filter.Counterparty));
            }

            // Фильтр "Подразделение".
            if (_filter.Department != null)
            {
                query = query.Where(c => Equals(c.Department, _filter.Department));
            }

            // Фильтр по интервалу времени
            var periodBegin = Calendar.UserToday.AddDays(-7);
            var periodEnd   = Calendar.UserToday.EndOfDay();

            if (_filter.LastWeek)
            {
                periodBegin = Calendar.UserToday.AddDays(-7);
            }

            if (_filter.LastMonth)
            {
                periodBegin = Calendar.UserToday.AddDays(-30);
            }

            if (_filter.Last90Days)
            {
                periodBegin = Calendar.UserToday.AddDays(-90);
            }

            if (_filter.ManualPeriod)
            {
                periodBegin = _filter.DateRangeFrom ?? Calendar.SqlMinValue;
                periodEnd   = _filter.DateRangeTo ?? Calendar.SqlMaxValue;
            }

            var serverPeriodBegin = Equals(Calendar.SqlMinValue, periodBegin) ? periodBegin : Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(periodBegin);
            var serverPeriodEnd   = Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd : periodEnd.EndOfDay().FromUserTime();
            var clientPeriodEnd   = !Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd.AddDays(1) : Calendar.SqlMaxValue;

            query = query.Where(j => (j.DocumentDate.Between(serverPeriodBegin, serverPeriodEnd) ||
                                      j.DocumentDate == periodBegin) && j.DocumentDate != clientPeriodEnd);

            return(query);
        }
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            query = base.Filtering(query, e);

            if (_filter == null)
            {
                return(query);
            }

            // При вызове во внутренних документах с панелью фильтрации, не выводим Не нумеруемые документы.
            if (this.IsInternalDocumentBase())
            {
                query = query.Where(d => d.DocumentKind.NumberingType != DocumentKind.NumberingType.NotNumerable);

                // TODO Zamerov: явно убираем приложения.
                var guid = Server.Addendum.ClassTypeGuid.ToString();
                query = query.Where(d => d.DocumentKind.DocumentType.DocumentTypeGuid != guid);
            }

            // При вызове во внутренних документах не выводим документы по контрагенту.
            if (this.IsInternalDocumentBase())
            {
                query = query.Where(d => !CounterpartyDocuments.Is(d));
            }

            // Фильтр по журналу регистрации.
            if (_filter.DocumentRegister != null)
            {
                query = query.Where(d => Equals(d.DocumentRegister, _filter.DocumentRegister));
            }

            // Фильтр по виду документа.
            if (_filter.DocumentKind != null)
            {
                query = query.Where(d => Equals(d.DocumentKind, _filter.DocumentKind));
            }

            // Фильтр по статусу. Если все галочки включены, то нет смысла добавлять фильтр.
            if ((_filter.Registered || _filter.Reserved || _filter.NotRegistered) &&
                !(_filter.Registered && _filter.Reserved && _filter.NotRegistered))
            {
                query = query.Where(l => _filter.Registered && l.RegistrationState == OfficialDocument.RegistrationState.Registered ||
                                    _filter.Reserved && l.RegistrationState == OfficialDocument.RegistrationState.Reserved ||
                                    _filter.NotRegistered && l.RegistrationState == OfficialDocument.RegistrationState.NotRegistered);
            }

            // Фильтр по нашей организации.
            if (_filter.BusinessUnit != null)
            {
                query = query.Where(d => Equals(d.BusinessUnit, _filter.BusinessUnit));
            }

            // Фильтр "Подразделение".
            if (_filter.Department != null)
            {
                query = query.Where(c => Equals(c.Department, _filter.Department));
            }

            // Фильтр по интервалу времени
            var periodBegin = Calendar.UserToday.AddDays(-7);
            var periodEnd   = Calendar.UserToday.EndOfDay();

            if (_filter.LastWeek)
            {
                periodBegin = Calendar.UserToday.AddDays(-7);
            }

            if (_filter.LastMonth)
            {
                periodBegin = Calendar.UserToday.AddDays(-30);
            }

            if (_filter.Last90Days)
            {
                periodBegin = Calendar.UserToday.AddDays(-90);
            }

            if (_filter.ManualPeriod)
            {
                periodBegin = _filter.DateRangeFrom ?? Calendar.SqlMinValue;
                periodEnd   = _filter.DateRangeTo ?? Calendar.SqlMaxValue;
            }

            var serverPeriodBegin = Equals(Calendar.SqlMinValue, periodBegin) ? periodBegin : Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(periodBegin);
            var serverPeriodEnd   = Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd : periodEnd.EndOfDay().FromUserTime();
            var clientPeriodEnd   = !Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd.AddDays(1) : Calendar.SqlMaxValue;

            query = query.Where(j => (j.DocumentDate.Between(serverPeriodBegin, serverPeriodEnd) ||
                                      j.DocumentDate == periodBegin) && j.DocumentDate != clientPeriodEnd);

            return(query);
        }
Exemple #23
0
 public virtual IQueryable <Sungero.Company.IBusinessUnit> BusinessUnitFiltering(IQueryable <Sungero.Company.IBusinessUnit> query, Sungero.Domain.FilteringEventArgs e)
 {
     return(query.Where(r => Equals(r.Status, Status.Active)));
 }
 public virtual IQueryable <Sungero.CoreEntities.IRecipient> VisibleMemberFiltering(IQueryable <Sungero.CoreEntities.IRecipient> query, Sungero.Domain.FilteringEventArgs e)
 {
     e.DisableUiFiltering = true;
     return(Functions.Module.ExcludeSystemRecipients(query, false));
 }
 public virtual IQueryable <Sungero.Docflow.IDocumentKind> DocumentKindFiltering(IQueryable <Sungero.Docflow.IDocumentKind> query, Sungero.Domain.FilteringEventArgs e)
 {
     return(query.Where(k => k.Status == CoreEntities.DatabookEntry.Status.Active &&
                        k.DocumentType.DocumentFlow == DocumentType.DocumentFlow.Incoming &&
                        k.DocumentType.IsRegistrationAllowed == true));
 }
Exemple #26
0
        /// <summary>
        /// Фильтрация списка входящих счетов.
        /// </summary>
        /// <param name="query">Фильтруемый список счетов.</param>
        /// <param name="e">Аргументы события фильтрации.</param>
        /// <returns>Список счетов с примененными фильтрами.</returns>
        public override IQueryable <T> Filtering(IQueryable <T> query, Sungero.Domain.FilteringEventArgs e)
        {
            if (_filter == null)
            {
                return(base.Filtering(query, e));
            }

            // Состояние.
            if ((_filter.Draft || _filter.OnApproval || _filter.PayAccepted || _filter.PayRejected || _filter.PayComplete) &&
                !(_filter.Draft && _filter.OnApproval && _filter.PayAccepted && _filter.PayRejected && _filter.PayComplete))
            {
                query = query.Where(x => (_filter.Draft && x.LifeCycleState == IncomingInvoice.LifeCycleState.Draft && x.InternalApprovalState == null) ||
                                    (_filter.OnApproval && x.LifeCycleState != IncomingInvoice.LifeCycleState.Obsolete &&
                                     (x.InternalApprovalState == Docflow.OfficialDocument.InternalApprovalState.PendingSign ||
                                      x.InternalApprovalState == Docflow.OfficialDocument.InternalApprovalState.OnRework ||
                                      x.InternalApprovalState == Docflow.OfficialDocument.InternalApprovalState.OnApproval)) ||
                                    (_filter.PayAccepted && x.LifeCycleState == IncomingInvoice.LifeCycleState.Active) ||
                                    (_filter.PayRejected && x.LifeCycleState == IncomingInvoice.LifeCycleState.Obsolete) ||
                                    (_filter.PayComplete && x.LifeCycleState == IncomingInvoice.LifeCycleState.Paid));
            }

            // Контрагент.
            if (_filter.Counterparty != null)
            {
                query = query.Where(x => Equals(x.Counterparty, _filter.Counterparty));
            }

            // НОР.
            if (_filter.BusinessUnit != null)
            {
                query = query.Where(x => Equals(x.BusinessUnit, _filter.BusinessUnit));
            }

            // Подразделение.
            if (_filter.Department != null)
            {
                query = query.Where(x => Equals(x.Department, _filter.Department));
            }

            // Дата.
            var beginDate = Calendar.UserToday.AddDays(-30);
            var endDate   = Calendar.UserToday;

            if (_filter.Last7daysInvoice)
            {
                beginDate = Calendar.UserToday.AddDays(-7);
            }

            if (_filter.ManualPeriodInvoice)
            {
                beginDate = _filter.DateRangeInvoiceFrom ?? Calendar.SqlMinValue;
                endDate   = _filter.DateRangeInvoiceTo ?? Calendar.SqlMaxValue;
            }

            var serverPeriodBegin = Equals(Calendar.SqlMinValue, beginDate) ? beginDate : Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(beginDate);
            var serverPeriodEnd   = Equals(Calendar.SqlMaxValue, endDate) ? endDate : endDate.EndOfDay().FromUserTime();
            var clientPeriodEnd   = !Equals(Calendar.SqlMaxValue, endDate) ? endDate.AddDays(1) : Calendar.SqlMaxValue;

            query = query.Where(j => (j.DocumentDate.Between(serverPeriodBegin, serverPeriodEnd) ||
                                      j.DocumentDate == beginDate) && j.DocumentDate != clientPeriodEnd);

            return(query);
        }
 public virtual IQueryable <Sungero.Company.IEmployee> RecipientFiltering(IQueryable <Sungero.Company.IEmployee> query, Sungero.Domain.FilteringEventArgs e)
 {
     e.DisableUiFiltering = true;
     return(query);
 }