BusinessUnitSharedFunctions.cs
4.98 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Company.BusinessUnit;
using Sungero.Core;
using Sungero.CoreEntities;
namespace Sungero.Company.Shared
{
partial class BusinessUnitFunctions
{
/// <summary>
/// Получить текст ошибки о наличии дублей.
/// </summary>
/// <returns>Текст ошибки.</returns>
public virtual string GetCounterpartyDuplicatesErrorText()
{
if (!string.IsNullOrWhiteSpace(_obj.TIN) && _obj.Status == Sungero.CoreEntities.DatabookEntry.Status.Active)
{
int? companyId = null;
if (_obj.Company != null)
companyId = _obj.Company.Id;
var duplicateBusinessUnit = Functions.BusinessUnit.Remote.GetDuplicateBusinessUnit(_obj);
if (duplicateBusinessUnit.Any())
{
var firstDuplicate = duplicateBusinessUnit.First();
var duplicateTypeInNominative = Parties.PublicFunctions.Counterparty.GetTypeDisplayValue(firstDuplicate, CommonLibrary.DeclensionCase.Nominative);
var errorText = string.IsNullOrWhiteSpace(_obj.TRRC)
? Parties.Counterparties.Resources.TinDuplicateFormat(duplicateTypeInNominative.ToLower(), firstDuplicate)
: Parties.CompanyBases.Resources.TinTrrcDuplicateFormat(duplicateTypeInNominative.ToLower(), firstDuplicate);
return errorText;
}
return Parties.PublicFunctions.Counterparty.GetCounterpartyWithSameTinWarning(_obj.TIN, _obj.TRRC, companyId);
}
return string.Empty;
}
/// <summary>
/// Проверка введенного ИНН по количеству символов.
/// </summary>
/// <param name="tin">ИНН.</param>
/// <returns>Пустая строка, если длина ИНН в порядке.
/// Иначе текст ошибки.</returns>
public virtual string CheckTinLength(string tin)
{
return System.Text.RegularExpressions.Regex.IsMatch(tin, @"(^\d{10}$)|(^\d{12}$)") ? string.Empty : Parties.CompanyBases.Resources.IncorrectTinLength;
}
/// <summary>
/// Проверка введенного ОГРН по количеству символов.
/// </summary>
/// <param name="psrn">ОГРН.</param>
/// <returns>Пустая строка, если длина ОГРН в порядке.
/// Иначе текст ошибки.</returns>
public virtual string CheckPsrnLength(string psrn)
{
if (string.IsNullOrWhiteSpace(psrn))
return string.Empty;
psrn = psrn.Trim();
return System.Text.RegularExpressions.Regex.IsMatch(psrn, @"(^\d{13}$)|(^\d{15}$)") ? string.Empty : Parties.CompanyBases.Resources.IncorrecPsrnLength;
}
/// <summary>
/// Проверка введенного ОКПО по количеству символов.
/// </summary>
/// <param name="nceo">ОКПО.</param>
/// <returns>Пустая строка, если длина ОКПО в порядке.
/// Иначе текст ошибки.</returns>
public virtual string CheckNceoLength(string nceo)
{
if (string.IsNullOrWhiteSpace(nceo))
return string.Empty;
nceo = nceo.Trim();
return System.Text.RegularExpressions.Regex.IsMatch(nceo, @"(^\d{8}$)|(^\d{10}$)|(^\d{14}$)") ? string.Empty : Parties.CompanyBases.Resources.IncorrecNceoLength;
}
/// <summary>
/// Проверка контрольной суммы ИНН. Вызывается из CheckTinSum.
/// </summary>
/// <param name="tin">Строка ИНН. Передавать ИНН длиной 10-12 символов.</param>
/// <param name="coefficients">Массив коэффициентов для умножения.</param>
/// <returns>True, если контрольная сумма сошлась.</returns>
private static bool CheckTinSum(string tin, int[] coefficients)
{
var sum = 0;
for (var i = 0; i < coefficients.Count(); i++)
sum += (int)char.GetNumericValue(tin[i]) * coefficients[i];
sum = (sum % 11) % 10;
return sum == (int)char.GetNumericValue(tin[coefficients.Count()]);
}
/// <summary>
/// Проверка контрольной суммы ИНН.
/// </summary>
/// <param name="tin">ИНН.</param>
/// <returns>True, если контрольная сумма сошлась.</returns>
/// <remarks>Информация по ссылке: http://ru.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика.</remarks>
private bool CheckTinSum(string tin)
{
var coefficient10 = new int[] { 2, 4, 10, 3, 5, 9, 4, 6, 8 };
var coefficient11 = new int[] { 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
var coefficient12 = new int[] { 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
return tin.Length == 10 ? CheckTinSum(tin, coefficient10) : (CheckTinSum(tin, coefficient11) && CheckTinSum(tin, coefficient12));
}
}
}