CaseFileHandlers.cs
5.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.CaseFile;
namespace Sungero.Docflow
{
partial class CaseFileRegistrationGroupPropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> RegistrationGroupFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
var clerks = Functions.DocumentRegister.GetClerks();
if (clerks == null)
return query;
var allRecipientIds = Recipients.AllRecipientIds;
if (allRecipientIds.Contains(clerks.Id))
query = query.Where(g => g.RecipientLinks.Any(l => allRecipientIds.Contains(l.Member.Id)));
return query;
}
}
partial class CaseFileFilteringServerHandler<T>
{
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;
}
}
partial class CaseFileServerHandlers
{
public override void Created(Sungero.Domain.CreatedEventArgs e)
{
// Заполнить свойство "переходящее" по умолчанию.
_obj.LongTerm = false;
if (_obj.BusinessUnit == null)
_obj.BusinessUnit = Functions.Module.GetDefaultBusinessUnit(Company.Employees.Current);
}
public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
{
// Проверить правильность заполнения дат.
if (_obj.StartDate > _obj.EndDate)
{
e.AddError(_obj.Info.Properties.StartDate, CaseFiles.Resources.WrongPeriod, new[] { _obj.Info.Properties.StartDate, _obj.Info.Properties.EndDate });
e.AddError(_obj.Info.Properties.EndDate, CaseFiles.Resources.WrongPeriod, new[] { _obj.Info.Properties.StartDate, _obj.Info.Properties.EndDate });
}
// Проверить уникальность индекса в рамках нашей организации и периода.
if (!Functions.CaseFile.CheckIndexForUniqueness(_obj))
e.AddError(CaseFiles.Resources.IndexIsNotUnique);
// Проверить индекс на пробелы, если свойство изменено.
if (!string.IsNullOrEmpty(_obj.Index))
{
// При изменении индекса e.AddError сбрасывается.
var indexIsChanged = _obj.State.Properties.Index.IsChanged;
_obj.Index = _obj.Index.Trim();
if (indexIsChanged && Regex.IsMatch(_obj.Index, @"\s"))
e.AddError(_obj.Info.Properties.Index, Docflow.CaseFiles.Resources.NoSpacesInIndex);
}
_obj.Name = string.Format("{0}. {1}", _obj.Index, _obj.Title);
}
}
}