CompanyBaseServerFunctions.cs
5.53 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Parties.CompanyBase;
namespace Sungero.Parties.Server
{
partial class CompanyBaseFunctions
{
/// <summary>
/// Заполнить реквизиты контрагента из сервиса.
/// </summary>
/// <param name="specifiedPSRN">ОГРН выбранной организации.</param>
/// <returns>Статус запроса, список представлений организаций, список контактов.</returns>
[Remote]
public Structures.CompanyBase.FoundCompanies FillFromService(string specifiedPSRN)
{
var url = Functions.Module.GetCompanyDataServiceURL();
if (string.IsNullOrEmpty(url))
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorNotFound, null, null, 0);
// Указать ОГРН выбранного контрагента.
var psrn = _obj.PSRN;
if (!string.IsNullOrWhiteSpace(specifiedPSRN))
psrn = specifiedPSRN;
// Запрос в сервис.
var searchResult = Sungero.CompanyData.Client.Search(psrn, _obj.TIN, _obj.Name, url);
switch (searchResult.StatusCode)
{
case HttpStatusCode.OK:
break;
case HttpStatusCode.Unauthorized:
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorUnauthorized, null, null, 0);
case HttpStatusCode.Forbidden:
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorForbidden, null, null, 0);
case (HttpStatusCode)429:
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorTooManyRequests, null, null, 0);
case HttpStatusCode.ServiceUnavailable:
case HttpStatusCode.BadGateway:
case HttpStatusCode.NotFound:
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorNotFound, null, null, 0);
case HttpStatusCode.PaymentRequired:
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorNoLicense, null, null, 0);
default:
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorInService, null, null, 0);
}
Logger.DebugFormat("{0} counterparties found in service", searchResult.Count.ToString());
// Ничего не нашли.
if (searchResult.Count < 1)
{
// Пустая структура, чтобы можно было отделить результат, когда ничего не найдено, от случая, когда сервис вернул ошибку.
var emptyListOfCompanies = new List<Structures.CompanyBase.CompanyDisplayValue>();
return Structures.CompanyBase.FoundCompanies.Create(CompanyBases.Resources.ErrorCompanyNotFoundInService, emptyListOfCompanies, null, 0);
}
// Подготовить ответ.
var result = Structures.CompanyBase.FoundCompanies.Create();
result.CompanyDisplayValues = searchResult.Companies
.Select(r =>
{
var dialogText = string.IsNullOrWhiteSpace(r.Kpp)
? CompanyBases.Resources.CompanySelectDialogTextFormat(r.ShortName, r.Inn)
: CompanyBases.Resources.CompanySelectDialogTextWithTRRCFormat(r.ShortName, r.Inn, r.Kpp);
return Structures.CompanyBase.CompanyDisplayValue.Create(dialogText, r.Ogrn);
})
.ToList();
result.Amount = searchResult.Total;
// Нашли ровно один. Сразу заполняем реквизиты.
if (searchResult.Count == 1)
{
var company = searchResult.Companies.First();
_obj.Name = company.ShortName;
_obj.LegalName = company.LegalName;
_obj.PSRN = company.Ogrn;
_obj.TIN = company.Inn;
_obj.TRRC = company.Kpp;
_obj.NCEO = company.Okpo;
_obj.NCEA = Functions.CompanyBase.GetFormatOkved(company);
_obj.LegalAddress = company.Address;
_obj.Region = Commons.PublicFunctions.Region.GetRegionFromAddress(company.Address);
_obj.City = Commons.PublicFunctions.City.GetCityFromAddress(company.Address);
if (!Equals(company.State, Constants.CompanyBase.ActiveCounterpartyStateInService))
{
if (string.IsNullOrEmpty(_obj.Note))
_obj.Note = company.State;
else if (!_obj.Note.Contains(company.State))
_obj.Note = string.Format("{0}\r\n{1}", _obj.Note, company.State);
}
result.FoundContacts = company.Managers
.Select(t => Structures.CompanyBase.FoundContact.Create(t.FullName, t.JobTitle, t.Phone))
.ToList();
}
return result;
}
/// <summary>
/// Сформировать строку с ОКВЭД.
/// </summary>
/// <param name="company">Компания с сервиса.</param>
/// <returns>Список ОКВЭД организации.</returns>
public static string GetFormatOkved(CompanyData.CompaniesDTO.CompanyDTO company)
{
if (company.AdditionalOkveds == null || !company.AdditionalOkveds.Any())
return company.MainOkved.Code;
var separator = "; ";
var okveds = new List<string>() { company.MainOkved.Code };
okveds.AddRange(company.AdditionalOkveds.Select(x => x.Code).Take(6));
return string.Join(separator, okveds.ToArray());
}
}
}