CompanyBaseHandlers.cs
6.15 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Parties.CompanyBase;
namespace Sungero.Parties
{
partial class CompanyBaseCreatingFromServerHandler
{
public override void CreatingFrom(Sungero.Domain.CreatingFromEventArgs e)
{
base.CreatingFrom(e);
e.Without(_info.Properties.IsCardReadOnly);
// Если организация создана как копия НОР, то ее нельзя редактировать.
// При копировании такой организации комментарий в новую переноситься не должен.
if (_source.IsCardReadOnly == true)
e.Without(_info.Properties.Note);
}
}
partial class CompanyBaseHeadCompanyPropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> HeadCompanyFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
return query.Where(comp => !Equals(comp, _obj))
.Where(comp => comp.HeadCompany == null || !Equals(comp.HeadCompany, _obj));
}
}
partial class CompanyBaseServerHandlers
{
public override void AfterDelete(Sungero.Domain.AfterDeleteEventArgs e)
{
base.AfterDelete(e);
// Удаление из индекса Elasticsearch, если он сконфигурирован.
if (Commons.PublicFunctions.Module.IsElasticsearchConfigured())
Commons.PublicFunctions.Module.CreateRemoveEntityFromIndexAsyncHandler(CompanyBases.Info.Name, _obj.Id);
}
public override void AfterSave(Sungero.Domain.AfterSaveEventArgs e)
{
#region Создание контактов, пришедших с сервиса заполнения по ОГРН/ИНН
var foundContacts = string.Empty;
var companyContacts = Contacts.GetAll(contact => Equals(_obj, contact.Company));
var hasActiveCompanyContacts = companyContacts.Any(contact => contact.Status == Contact.Status.Active);
var hasContactsFromService = e.Params.TryGetValue(Constants.CompanyBase.FindedContactsInServiceParamName, out foundContacts) &&
!string.IsNullOrWhiteSpace(foundContacts);
if (!hasActiveCompanyContacts && hasContactsFromService && Contacts.AccessRights.CanCreate())
{
var contacts = foundContacts.Split(';');
foreach (var contact in contacts)
{
var contactInfo = contact.Split('|');
var name = contactInfo[0];
var jobTitle = contactInfo.Length > 1 ? contactInfo[1] : string.Empty;
var phone = contactInfo.Length > 2 ? contactInfo[2] : string.Empty;
var contactsExist = companyContacts.Any(cont => cont.Name.ToLower() == name.ToLower());
if (string.IsNullOrWhiteSpace(name) || contactsExist)
continue;
var companyContact = Contacts.Create();
companyContact.Name = name;
companyContact.JobTitle = jobTitle;
companyContact.Phone = phone;
}
}
e.Params.Remove(Constants.CompanyBase.FindedContactsInServiceParamName);
#endregion
base.AfterSave(e);
// Запуск индексации, если Elasticsearch сконфигурирован и изменились индексируемые поля.
if (Commons.PublicFunctions.Module.IsElasticsearchConfigured() && e.Params.Contains(Sungero.Commons.PublicConstants.Module.IsIndexedEntityInsertedParamKey))
{
var allowCreateRecord = false;
e.Params.TryGetValue(Sungero.Commons.PublicConstants.Module.IsIndexedEntityInsertedParamKey, out allowCreateRecord);
e.Params.Remove(Sungero.Commons.PublicConstants.Module.IsIndexedEntityInsertedParamKey);
Sungero.Commons.PublicFunctions.Module.CreateIndexEntityAsyncHandler(CompanyBases.Info.Name, _obj.Id, Functions.CompanyBase.GetIndexingJson(_obj), allowCreateRecord);
}
}
public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
{
if (!string.IsNullOrEmpty(_obj.PSRN))
{
var newPsrn = _obj.PSRN.Trim();
if (!_obj.PSRN.Equals(newPsrn, StringComparison.InvariantCultureIgnoreCase))
_obj.PSRN = newPsrn;
}
if (!string.IsNullOrEmpty(_obj.TRRC))
{
var newTrrc = _obj.TRRC.Trim();
if (!_obj.TRRC.Equals(newTrrc, StringComparison.InvariantCultureIgnoreCase))
_obj.TRRC = newTrrc;
}
#region Проверить циклические ссылки в подчиненных организациях
if (_obj.State.Properties.HeadCompany.IsChanged && _obj.HeadCompany != null)
{
var headCompany = _obj.HeadCompany;
while (headCompany != null)
{
if (Equals(headCompany, _obj))
{
e.AddError(_obj.Info.Properties.HeadCompany, CompanyBases.Resources.HeadCompanyCyclicReference, _obj.Info.Properties.HeadCompany);
break;
}
headCompany = headCompany.HeadCompany;
}
}
#endregion
base.BeforeSave(e);
// Выставить параметр необходимости индексации сущности, при изменении индексируемых полей.
var props = _obj.State.Properties;
if (props.LegalName.IsChanged || props.Name.IsChanged || props.HeadCompany.IsChanged || props.TIN.IsChanged || props.TRRC.IsChanged || props.PSRN.IsChanged ||
props.Homepage.IsChanged || props.Phones.IsChanged || props.LegalAddress.IsChanged || props.Status.IsChanged || props.Email.IsChanged)
e.Params.AddOrUpdate(Sungero.Commons.PublicConstants.Module.IsIndexedEntityInsertedParamKey, _obj.State.IsInserted);
}
public override void BeforeDelete(Sungero.Domain.BeforeDeleteEventArgs e)
{
// Запретить удаление организации в случае, если она зависит от нашей организации.
if (_obj.IsCardReadOnly ?? false)
e.AddError(CompanyBases.Resources.ErrorCantDeleteDependentCompany);
base.BeforeDelete(e);
}
}
}