ContractualDocumentServerFunctions.cs
4.86 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
using System;
using System.Collections.Generic;
using System.Linq;
using CommonLibrary;
using Sungero.Company;
using Sungero.Contracts.ContractualDocument;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow;
using Sungero.Parties;
using DeclensionCase = Sungero.Core.DeclensionCase;
namespace Sungero.Contracts.Server
{
partial class ContractualDocumentFunctions
{
/// <summary>
/// Получить договорной документ игнорируя права доступа.
/// </summary>
/// <param name="documentId">ИД документа.</param>
/// <returns>Договорной документ.</returns>
public static IContractualDocument GetIgnoreAccessRights(int documentId)
{
// HACK Котегов: использование внутренней сессии для обхода прав доступа.
Logger.DebugFormat("GetIgnoreAccessRights: contractId {0}", documentId);
using (var session = new Sungero.Domain.Session())
{
var innerSession = (Sungero.Domain.ISession)session.GetType()
.GetField("InnerSession", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(session);
return ContractualDocuments.As((Sungero.Domain.Shared.IEntity)innerSession.Get(typeof(IContractualDocument), documentId));
}
}
/// <summary>
/// Получить номер регистрации игнорируя права доступа.
/// </summary>
/// <param name="documentId">Договорной документ.</param>
/// <returns>Номер регистрации.</returns>
[Remote(IsPure = true), Public]
public static string GetRegistrationNumberIgnoreAccessRights(int documentId)
{
return Functions.ContractualDocument.GetIgnoreAccessRights(documentId).RegistrationNumber;
}
/// <summary>
/// Получить для договорного документа сумму прописью с валютой.
/// </summary>
/// <param name="contractualDocument">Договорной документ.</param>
/// <returns>Сумма прописью с валютой.</returns>
[Converter("TotalAmountInCurrencyToWords")]
public static string TotalAmountInCurrencyToWords(IContractualDocument contractualDocument)
{
if (contractualDocument.TotalAmount == null || contractualDocument.Currency == null)
return null;
var totalAmount = contractualDocument.TotalAmount.Value;
var integerPart = (long)Math.Truncate(totalAmount);
var fractionalPart = (int)Math.Round((totalAmount - integerPart) * 100);
var contractCurrencyShortName = contractualDocument.Currency.ShortName.Trim();
var currencyName = contractCurrencyShortName.EndsWith(Constants.ContractualDocument.ShortNameEnd) ?
contractCurrencyShortName :
StringUtils.NumberDeclension(integerPart,
contractCurrencyShortName,
Sungero.Core.CaseConverter.ConvertCurrencyNameToTargetDeclension(contractCurrencyShortName, DeclensionCase.Genitive),
Sungero.Core.CaseConverter.ConvertCurrencyNameToTargetDeclension(contractCurrencyShortName.Pluralize(), DeclensionCase.Genitive));
var contractCurrencyFractionName = contractualDocument.Currency.FractionName.Trim();
var currencyFractionalName = contractCurrencyFractionName.EndsWith(Constants.ContractualDocument.ShortNameEnd) ?
contractCurrencyFractionName :
StringUtils.NumberDeclension(fractionalPart,
contractCurrencyFractionName,
Sungero.Core.CaseConverter.ConvertCurrencyNameToTargetDeclension(contractCurrencyFractionName, DeclensionCase.Genitive),
Sungero.Core.CaseConverter.ConvertCurrencyNameToTargetDeclension(contractCurrencyFractionName.Pluralize(), DeclensionCase.Genitive));
return string.Format("{0},{1} {2} ({3} {2} {1} {4})",
integerPart.ToString("N0"), fractionalPart.ToString("D2"), currencyName,
StringUtils.NumberToWords(integerPart).Capitalize(), currencyFractionalName);
}
/// <summary>
/// Проверить, связан ли документ специализированной связью.
/// </summary>
/// <returns>True - если связан, иначе - false.</returns>
[Remote(IsPure = true)]
public override bool HasSpecifiedTypeRelations()
{
var hasSpecifiedTypeRelations = false;
AccessRights.AllowRead(
() =>
{
hasSpecifiedTypeRelations = IncomingInvoices.GetAll().Any(x => Equals(x.Contract, _obj));
});
return base.HasSpecifiedTypeRelations() || hasSpecifiedTypeRelations;
}
}
}