πŸ’° IEE ECM | Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Π”ΠΈΠ°Π΄ΠΎΠΊ

Настройка ΠΈ администрированиС

Настройка ΠΈ администрированиС

Настройка ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ приобрСсти Ρƒ "Π‘ΠšΠ‘ ΠšΠΎΠ½Ρ‚ΡƒΡ€" API ΠΊΠ»ΡŽΡ‡. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ†Π΅Π½Ρ‚Π°Ρ… ΠΈ условиях ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ здСсь: ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚Π°Ρ€ΠΈΡ„Π°Ρ… Π”ΠΈΠ°Π΄ΠΎΠΊ

image-1630996581790.png

ПослС приобрСтСния API ΠΊΠ»ΡŽΡ‡Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ использован для Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ порядкС ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π°, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅:

image-1630996832610.png

Π”Π°Π»Π΅Π΅ Π² ELMA Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΉΡ‚ΠΈ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ АдминистрированиС ➜ Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ:

image-1630996968905.png

Π‘Π»ΠΎΠΊ Настройки ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π”ΠΈΠ°Π΄ΠΎΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСрвису:

image-1630997115968.png

Если ΡƒΠΊΠ°Π·Π°Π½ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ API ΠΊΠ»ΡŽΡ‡. Π»ΠΈΠ±ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π»ΠΎΠ³ΠΈΠ½/ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ статус:

image-1630997247119.png

Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ API ΠΊΠ»ΡŽΡ‡, Ρ‚ΠΎ интСграция считаСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ (Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ статус Π½Π΅ выводится):

image-1630997323927.png

Для измСнСния настроСк Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния элСмСнтов Π±Π»ΠΎΠΊΠ° ΠΈ ввСсти ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ API ΠΊΠ»ΡŽΡ‡Π°, Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅:

image-1630997431607.png

Настройка ΠΈ администрированиС

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡΠΌΠΈ Π”ΠΈΠ°Π΄ΠΎΠΊΠ°

TODO

Настройка ΠΈ администрированиС

Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π°Ρ€Ρ…ΠΈΠ²Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π”ΠΈΠ°Π΄ΠΎΠΊΠ°

TODO

Настройка ΠΈ администрированиС

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅

TODO

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ (CRM)

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ связи с Π”ΠΈΠ°Π΄ΠΎΠΊΠΎΠΌ

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ (CRM)

Π’ΠΊΠ»Π°Π΄ΠΊΠ° Π”ΠΈΠ°Π΄ΠΎΠΊ Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ΠΎΠ²

ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π”ΠΈΠ°Π΄ΠΎΠΊΠΎΠΌ ΠΈ установлСнной связи с сСрвисом Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π° появляСтся Π²ΠΊΠ»Π°Π΄ΠΊΠ° Π”ΠΈΠ°Π΄ΠΎΠΊ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ:

  1. ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Π­Π”Πž со статусами.
  2. Бтатус ΠΎΠ±ΠΌΠ΅Π½Π° с нашим организациями.
  3. ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ входящих Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΡ… ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.
  4. ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ исходящих Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.
ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π° ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ

image-1630995433825.png

Бтатус ΠΎΠ±ΠΌΠ΅Π½Π° с нашими организациями

image-1630995493661.png

ВходящиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

image-1630995559077.png

Π˜ΡΡ…ΠΎΠ΄ΡΡ‰ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

image-1630996263096.png

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΎΠ±ΠΎΡ€ΠΎΡ‚ (ECM)

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΎΠ±ΠΎΡ€ΠΎΡ‚ (ECM)

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° подписаниС Π² Π”ΠΈΠ°Π΄ΠΎΠΊ

TODO

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΎΠ±ΠΎΡ€ΠΎΡ‚ (ECM)

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ статусов ΠΈ истории ΠΏΠΎ Π”ΠΈΠ°Π΄ΠΎΠΊΡƒ

TODO

Π’ΠΎΡ‡ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

РСализация Ρ‚ΠΎΡ‡Π΅ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ входящих ΠΈ исходящих Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для Π”ΠΈΠ°Π΄ΠΎΠΊΠ°

Π’ΠΎΡ‡ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

ReceivableDiadocDocument

Данная Ρ‚ΠΎΡ‡ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° входящих ΠΈΠ· Π”ΠΈΠ°Π΄ΠΎΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

НаслСдованиС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ класса ReceivableDiadocDocument, Π° Π½Π΅ ΠΎΡ‚ интСрфСйса IReceivableDiadocDocument.

namespace ITino.ELMA.Documents.Diadoc.Components

/// <summary>
/// Π’ΠΎΡ‡ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² Π”ΠΈΠ°Π΄ΠΎΠΊ
/// </summary>
public class ReceivableDiadocDocument : IReceivableDiadocDocument
{
	/// <summary>
    /// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½
    /// </summary>
    public virtual bool Enabled { get; }

    /// <summary>
    /// Π’ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π”ΠΈΠ°Π΄ΠΎΠΊ
    /// </summary>
    public virtual DiadocDocumentType DocumentType { get; }

    /// <summary>
    /// Π’ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² систСмС
    /// </summary>
    public virtual Guid TypeUid { get; }

    /// <summary>
    /// Π’ΠΈΠΏΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² систСмС
    /// </summary>
    public virtual IEnumerable<Guid> TypeUids { get; }

    /// <summary>
    /// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ кастомныС поля (Ссли Π΅ΡΡ‚ΡŒ)
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π”ΠΈΠ°Π΄ΠΎΠΊΠ° (справочник Π² ELMA)</param>
    /// <param name="items">ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹Π΅ поля Π”ΠΈΠ°Π΄ΠΎΠΊΠ°</param>
    public virtual void ProcessCustomData(ICODiadocDocument doc, IEnumerable<CustomDataItem> items);
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° входящСго Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°

Π’ΠΎΡ‡ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

SendableDiadocDocument

Данная Ρ‚ΠΎΡ‡ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° исходящих Π² Π”ΠΈΠ°Π΄ΠΎΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

НаслСдованиС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ класса SendableDiadocDocument, Π° Π½Π΅ ΠΎΡ‚ интСрфСйса ISendableDiadocDocument.

namespace ITino.ELMA.Documents.Diadoc.Components

/// <summary>
/// Π’ΠΎΡ‡ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² Π”ΠΈΠ°Π΄ΠΎΠΊ
/// </summary>
public class SendableDiadocDocument : ISendableDiadocDocument
{
    /// <summary>
    /// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½
    /// </summary>
    public virtual bool Enabled { get; }

    /// <summary>
    /// Π’ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π”ΠΈΠ°Π΄ΠΎΠΊ
    /// </summary>
    public virtual DiadocDocumentType DocumentType { get; }

    /// <summary>
    /// Π’ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² систСмС
    /// </summary>
    public virtual Guid TypeUid { get; }

    /// <summary>
    /// Π’ΠΈΠΏΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² систСмС
    /// </summary>
    public virtual IEnumerable<Guid> TypeUids { get; }

    /// <summary>
    /// МоТно Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    public virtual EODiadocCanSendStatus CanSendDocument(IDocument doc);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ отправитСля (наша организация)
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    public virtual IContractor GetSender(IDocument doc);

    /// <summary>
    /// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Π”ΠΈΠ°Π΄ΠΎΠΊ Π² Π“ΠΎΠ»ΠΎΠ²Π½ΠΎΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    /// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)</param>
    public virtual ICODiadocDocument Send(IDocument doc, string comment = null);

    /// <summary>
    /// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Π”ΠΈΠ°Π΄ΠΎΠΊ Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π»ΡŽΠ±ΠΎΠΌΡƒ с ΠΏΡ€Π°Π²ΠΎΠΌ подписи
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    /// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
    /// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)</param>
    public virtual ICODiadocDocument Send(IDocument doc, Guid? departmentId, string comment = null);

    /// <summary>
    /// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Π”ΠΈΠ°Π΄ΠΎΠΊ
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    /// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
    /// <param name="userId">Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
    /// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)</param>
    public virtual ICODiadocDocument Send(IDocument doc, Guid? departmentId, Guid? userId, string comment = null);
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° исходящСго Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° с Ρ„ΠΈΠ·. Π»ΠΈΡ†ΠΎΠΌ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° входящСго Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°

Π’ Π²Π΅Π± Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅ ELMA4 (Π² ELMA3 ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅) Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π³Π΄Π΅ опрСдСляСм Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ReceivableContract.

image-1630992751383.png

РСализация:

using System;
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Documents.Contracts.Models;
using EleWise.ELMA.Model.Services;
using ITino.ELMA.Documents.Diadoc.Components;
using ITino.ELMA.Documents.Diadoc.Models;

namespace HMS.Configuration.Diadoc
{
    /// <inheritdoc />
    [Component]
    public class ReceivableContract : ReceivableDiadocDocument
    {
        /// <inheritdoc />
        public override bool Enabled
        {
        	// Π’ΠΎΡ‡ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈ обрабатываСтся
            get { return true; }
        }

        /// <inheritdoc />
        public override DiadocDocumentType DocumentType
        {
        	// Какой Ρ‚ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π”ΠΈΠ°Π΄ΠΎΠΊΠ° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ
            get { return DiadocDocumentType.Contract; }
        }

        /// <inheritdoc />
        public override Guid TypeUid
        {
        	// К ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² ELMA привязываСм
            get {  return InterfaceActivator.UID<IContractIncoming>(); }
        }
    }
}

Атрибут [Component] обязатСлСн.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° исходящСго Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° с Ρ„ΠΈΠ·. Π»ΠΈΡ†ΠΎΠΌ

Π’ Π²Π΅Π± Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅ ELMA4 (Π² ELMA3 ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅) Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π³Π΄Π΅ опрСдСляСм Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SendableRNMOutContractInd.

image-1630994410780.png

РСализация:

using System;
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.ConfigurationModel;
using EleWise.ELMA.Documents.Models;
using EleWise.ELMA.CRM.Models;
using EleWise.ELMA.Model.Services;
using EleWise.ELMA.Services;
using ITino.ELMA.Documents.Diadoc.Components;
using ITino.ELMA.Documents.Diadoc.Exceptions;
using ITino.ELMA.Documents.Diadoc.Managers;
using ITino.ELMA.Documents.Diadoc.Models;
using ITino.ELMA.Documents.Diadoc.Services;

namespace HMS.Configuration
{
	/// <inheritdoc />
	[Component]
    public class SendableRNMOutContractInd : SendableDiadocDocument
    {
        /// <inheritdoc />
        public override bool Enabled
        {
        	// Π’ΠΎΡ‡ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈ обрабатываСтся
            get { return true; }
        }

        /// <inheritdoc />
        public override DiadocDocumentType DocumentType
        {
        	// Какой Ρ‚ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π”ΠΈΠ°Π΄ΠΎΠΊΠ° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ
            get { return DiadocDocumentType.Contract; }
        }

        /// <inheritdoc />
        public override Guid TypeUid
        {
        	// К ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² ELMA привязываСм
            get { return InterfaceActivator.UID<RNMOutContractInd>(); }
        }
        
        public override IContractor GetSender(IDocument doc)
        {
        	// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ отправитСля Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°
        	var contract = doc as RNMOutContractInd;
			return contract != null ? contract.Contractor : null;
        }
		
        /// <inheritdoc />
        public override EODiadocCanSendStatus CanSendDocument(IDocument doc)
        {
        	// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Π”ΠΈΠ°Π΄ΠΎΠΊ
            if (doc == null)
                return EODiadocCanSendStatus.DocIsNull;
            var service = Locator.GetServiceNotNull<IDiadocService>();
            var contract = doc as RNMOutContractInd;
            if (contract != null)
                return service.CanSendDocument(contract.Contractor, contract.Executor);
            return base.CanSendDocument(doc);
        }

        /// <inheritdoc />
        public override ICODiadocDocument Send(IDocument doc, Guid? departmentId, Guid? userId, string comment = null)
        {
        	// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π² Π”ΠΈΠ°Π΄ΠΎΠΊ Π½Π° подписаниС Π½Π°ΠΌΠΈ
            var contract = doc as RNMOutContractInd;
            if (contract == null)
                throw new DiadocException("Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ null");
            var edata = DiadocDocumentManager.Instance.CheckContractors(contract.Contractor, contract.Executor, null, null);
            var result = edata.Service.SendContract(edata.FormBoxId, edata.ToBoxId, doc, contract.Number, contract.ContractDate.Value, "Π“ΠŸΠ₯/Π€ΠΈΠ·.Π»ΠΈΡ†ΠΎ/Бамозанятый", null, departmentId, userId, comment);
            return DiadocDocumentManager.Instance.SendDocHistory(result, doc, contract.Contractor, contract.Executor, contract.Number, contract.ContractDate);
        }
    }
}

Атрибут [Component] обязатСлСн.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° сцСнариСм Π½Π° подписаниС Π² Π”ΠΈΠ°Π΄ΠΎΠΊ

TODO

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ скан-ΠΊΠΎΠΏΠΈΠΈ

Π’ Π²Π΅Π± Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅ ELMA4 (Π² ELMA3 ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅) Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π³Π΄Π΅ опрСдСляСм Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DiadocIntegration.

image-1634021415131.png

РСализация:

using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Documents.Models;
using EleWise.ELMA.Files;
using ITino.ELMA.Documents.Diadoc.Extensions;
using ITino.ELMA.Documents.Models;
using ITino.ELMA.Documents.Managers;

namespace HMS.Configuration.Diadoc
{
    [Component]
    public class DiadocIntegration : BaseDiadocIntegration
    {
        public override void AddScanCopy(IDocument document, BinaryFile file, string comment = null)
        {
        	// РСализация собствСнной Π»ΠΎΠ³ΠΈΠΊΠΈ добавлСния скан-ΠΊΠΎΠΏΠΈΠΈ ΠΊ ΠΊΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
            DocumentExtManager.Instance.AddScanCopy(document as IDODocument, file, checkUseScanCopy: false);
        }
    }
}

Атрибут [Component] обязатСлСн.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

АвтоматичСский ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² процСссной Π·Π°Π΄Π°Ρ‡Π΅

Начиная с 4.0.28 ΠΈ 3.15.48

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π”ΠΈΠ°Π΄ΠΎΠΊΠ° Π² процСссС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС подписания (ΠΊΠ°ΠΊ для входящих, Ρ‚Π°ΠΊ ΠΈ исходящих). Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‡Π° автоматичСски Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡŒ ΠΏΠΎ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈ наступлСнии события ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² сцСнарии процСсса ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

using ITino.ELMA.Diadoc.Helpers;

public override void OnTaskCreate(ITaskBase task, Context context)
{
  	// Π“Π΄Π΅,
	// 13b27a4a-b94f-4bc9-9390-d7ff4fcb58bd - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ процСсса
  	// 309f52b9-087d-4971-9fc0-9cbffc61c737 - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² случаС, Ссли Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Подписан
	task.LinkDiadocEvents(new Guid("13b27a4a-b94f-4bc9-9390-d7ff4fcb58bd"), context.DiadocDocument, new Guid("309f52b9-087d-4971-9fc0-9cbffc61c737"));
}

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ событиС Подписан. ΠŸΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ для событий ΠžΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ ΠΈ Π£Π΄Π°Π»Π΅Π½.

Π₯Π΅Π»ΠΏΠ΅Ρ€Ρ‹

TODO

Π₯Π΅Π»ΠΏΠ΅Ρ€Ρ‹

DiadocHelper

/// <summary>
/// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅ ΠΎ нашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ
/// </summary>
/// <param name="owner">Наша организация</param>
/// <returns></returns>
public static IDictionary<string, string> GetOwnContractorInfo(IContractor owner)
/// <summary>
/// МоТно Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚
/// </summary>
/// <param name="owner">Наша организация</param>
/// <param name="contractor">ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚</param>
/// <param name="doc">Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ привязанный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² систСмС</param>
/// <returns></returns>
public static EODiadocCanSendStatus CanSendDocument(IContractor owner, IContractor contractor, IDocument doc = null)
/// <summary>
/// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅
/// </summary>
/// <param name="ownorg">Наша организация</param>
/// <returns></returns>
public static DropDownItemList GetDepartments(IContractor ownorg)
/// <summary>
/// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подписантов для подраздСлСния Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅
/// </summary>
/// <param name="ownorg">Наша организация</param>
/// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
/// <returns></returns>
public static DropDownItemList GetSigners(IContractor ownorg, string departmentId)

Начиная с 4.0.28 ΠΈ 3.15.48

/// <summary>
/// ΠŸΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°ΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ события Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅
/// </summary>
/// <param name="task">Π—Π°Π΄Π°Ρ‡Π° Π² процСссС</param>
/// <param name="taskElementUid">Uid Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ процСсса</param>
/// <param name="document">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
/// <param name="signedConnectorUid">Uid ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈ подписании Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
/// <param name="rejectedConnectorUid">Uid ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅ Π² подписании Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
/// <param name="deletedConnectorUid">Uid ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅</param>
public static void LinkDiadocEvents(this ITaskBase task, Guid taskElementUid, ICODiadocDocument document, Guid? signedConnectorUid = null, Guid? rejectedConnectorUid = null, Guid? deletedConnectorUid = null)

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹

TODO

БСрвисы

БСрвисы для ΠΎΠ±ΠΌΠ΅Π½Π° с Π”ΠΈΠ°Π΄ΠΎΠΊΠΎΠΌ

БСрвисы

IDiadocService

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ сСрвис, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

var service = Locator.GetServiceNotNull<IDiadocService>();

ОписаниС свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сСрвиса:

namespace ITino.ELMA.Documents.Diadoc.Services

/// <summary>
/// БСрвис Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π”ΠΈΠ°Π΄ΠΎΠΊ
/// </summary>
public interface IDiadocService
{
    /// <summary>
    /// БСрвис ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½
    /// </summary>
    bool Initialized { get; }

    /// <summary>
    /// ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ
    /// </summary>
    void Shutdown();

    /// <summary>
    /// ОТиданиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π”ΠΈΠ°Π΄ΠΎΠΊ
    /// </summary>
    bool WaitSendingOps { get; set; }

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π΅ ΠΏΠΎ ИНН
    /// </summary>
    /// <param name="inn"></param>
    /// <param name="kpp"></param>
    /// <returns></returns>
    // ReSharper disable once InconsistentNaming
    IEnumerable<Organization> GetContractorInfoByINN(string inn, string kpp = null);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π΅
    /// </summary>
    /// <param name="contractor"></param>
    /// <returns></returns>
    IEnumerable<Organization> GetContractorInfo(IContractor contractor);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свою ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Ρƒ
    /// </summary>
    /// <param name="contractor"></param>
    /// <returns></returns>
    Organization GetOwnContractorInfo(IContractor contractor);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π° Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ спискС
    /// </summary>
    /// <param name="owner"></param>
    /// <param name="contractor"></param>
    /// <returns></returns>
    Organization GetContractorInList(IContractor owner, IContractor contractor);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π° ΠΏΠΎ ящику Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ Π² спискС
    /// </summary>
    /// <param name="owner"></param>
    /// <param name="boxId"></param>
    /// <returns></returns>
    IContractor GetContractorInList(IContractor owner, string boxId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π° ΠΈ статус списка для нашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ
    /// </summary>
    /// <param name="org"></param>
    /// <param name="contractor"></param>
    /// <returns></returns>
    Counteragent GetContractorInfoForTab(Organization org, IContractor contractor);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ящику
    /// </summary>
    /// <param name="boxId"></param>
    /// <returns></returns>
    Organization GetOrganizationByBox(string boxId);

    /// <summary>
    /// МоТно Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚
    /// </summary>
    /// <param name="owner"></param>
    /// <param name="contractor"></param>
    /// <returns></returns>
    EODiadocCanSendStatus CanSendDocument(IContractor owner, IContractor contractor);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρƒ
    /// </summary>
    /// <param name="owner"></param>
    /// <param name="filterCategory"></param>
    /// <param name="lastCheck"></param>
    /// <param name="alterIndexKey"></param>
    /// <param name="count"></param>
    /// <returns></returns>
    DocumentList GetDocuments(IContractor owner, string filterCategory, DateTime? lastCheck, string alterIndexKey = null, int? count = null);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅
    /// </summary>
    /// <param name="entity"></param>
    /// <returns></returns>
    Document GetDocument(ICODiadocDocument entity);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Π² Π”ΠΈΠ°Π΄ΠΎΠΊΠ΅
    /// </summary>
    Document GetDocument(string boxId, string messageId, string documentId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строковоС содСрТимоС сущности
    /// </summary>
    /// <param name="boxId"></param>
    /// <param name="messageId"></param>
    /// <param name="entityId"></param>
    /// <returns></returns>
    string GetEntityContentString(string boxId, string messageId, string entityId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ содСрТимоС сущности
    /// </summary>
    /// <param name="boxId"></param>
    /// <param name="messageId"></param>
    /// <param name="entityId"></param>
    /// <returns></returns>
    byte[] GetEntityContent(string boxId, string messageId, string entityId);

    /// <summary>
    /// Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°
    /// </summary>
    /// <param name="doc"></param>
    /// <returns></returns>
    object SerializeData(Document doc);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ
    /// </summary>
    /// <param name="entity"></param>
    /// <returns></returns>
    Message GetMessage(ICODiadocDocument entity);

    /// <summary>
    /// ГСнСрация ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°
    /// </summary>
    /// <param name="entity"></param>
    /// <returns></returns>
    BinaryFile GeneratePrintForm(ICODiadocDocument entity);

    /// <summary>
    /// Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΎΠ±ΠΎΡ€ΠΎΡ‚ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ
    /// </summary>
    /// <param name="entity"></param>
    /// <returns></returns>
    BinaryFile GenerateDocumentZip(ICODiadocDocument entity);
        
    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ подписи
    /// </summary>
    /// <param name="entity"></param>
    /// <param name="own">Наша подпись</param>
    /// <returns></returns>
    SignatureInfo GetSignatureInfo(ICODiadocDocument entity, bool own = true);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ
    /// </summary>
    /// <param name="entity"></param>
    /// <param name="entityId"></param>
    /// <returns></returns>
    Entity GetEntity(ICODiadocDocument entity, string entityId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΡ‚ΠΊΠ°Π·Π΅ Π² подписании
    /// </summary>
    /// <param name="entity"></param>
    /// <returns></returns>
    SignatureRejectionInfo ParseSignatureRejectionXml(ICODiadocDocument entity);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΡ‚ΠΊΠ°Π·Π΅ Π² подписании
    /// </summary>
    /// <param name="boxId"></param>
    /// <param name="messageId"></param>
    /// <param name="entityId"></param>
    /// <returns></returns>
    SignatureRejectionInfo ParseSignatureRejectionXml(string boxId, string messageId, string entityId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ запросС Π½Π° Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
    /// </summary>
    /// <param name="entity"></param>
    /// <returns></returns>
    RevocationRequestInfo ParseRevocationRequestXml(ICODiadocDocument entity);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСднСС событиС для ящика
    /// </summary>
    /// <param name="boxId"></param>
    /// <returns></returns>
    BoxEvent GetLastEvent(string boxId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ события для ящика
    /// </summary>
    /// <param name="boxId"></param>
    /// <param name="lastEventId"></param>
    /// <returns></returns>
    BoxEventList GetNewEvents(string boxId, string lastEventId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подраздСлСния для ящика
    /// </summary>
    /// <param name="boxId"></param>
    /// <returns></returns>
    DepartmentList GetDepartments(string boxId);

    /// <summary>
    /// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сотрудников для подраздСлСния
    /// </summary>
    /// <param name="boxId"></param>
    /// <param name="departmentId"></param>
    /// <returns></returns>
    IEnumerable<Employee> GetEmployees(string boxId, string departmentId);


    /// <summary>
    /// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    /// <param name="fromBoxId">Π―Ρ‰ΠΈΠΊ отправитСля</param>
    /// <param name="toBoxId">Π―Ρ‰ΠΈΠΊ получатСля</param>
    /// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅</param>
    /// <param name="userId">Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ</param>
    /// <param name="needRecipientSignature">ВрСбуСтся подпись ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°</param>
    /// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ</param>
    /// <returns></returns>
    DiadocMessageResult SendNonformalized(string fromBoxId, string toBoxId, EleWise.ELMA.Documents.Models.IDocument doc, Guid? departmentId = null, Guid? userId = null, bool needRecipientSignature = true, string comment = null);

    /// <summary>
    /// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ счСт
    /// </summary>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    /// <param name="fromBoxId">Π―Ρ‰ΠΈΠΊ отправитСля</param>
    /// <param name="toBoxId">Π―Ρ‰ΠΈΠΊ получатСля</param>
    /// <param name="docNumber">НомСр счСта</param>
    /// <param name="docDate">Π”Π°Ρ‚Π° счСта</param>
    /// <param name="total">Π‘ΡƒΠΌΠΌΠ°</param>
    /// <param name="vat">НДБ, Ссли Π΅ΡΡ‚ΡŒ</param>
    /// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅</param>
    /// <param name="userId">Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ</param>
    /// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ</param>
    DiadocMessageResult SendProformaInvoice(string fromBoxId, string toBoxId,
        EleWise.ELMA.Documents.Models.IDocument doc, string docNumber, DateTime docDate, Money total,
        Money? vat = null, Guid? departmentId = null, Guid? userId = null, string comment = null);

    /// <summary>
    /// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€
    /// </summary>
    /// <param name="fromBoxId">Π―Ρ‰ΠΈΠΊ отправитСля</param>
    /// <param name="toBoxId">Π―Ρ‰ΠΈΠΊ получатСля</param>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    /// <param name="docNumber">НомСр Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°</param>
    /// <param name="docDate">Π”Π°Ρ‚Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°</param>
    /// <param name="contractType">Π’ΠΈΠΏ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°</param>
    /// <param name="contractPrice">Π¦Π΅Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°,Ссли Π΅ΡΡ‚ΡŒ</param>
    /// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅</param>
    /// <param name="userId">Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ</param>
    /// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ</param>
    /// <returns></returns>
    DiadocMessageResult SendContract(string fromBoxId, string toBoxId, EleWise.ELMA.Documents.Models.IDocument doc,
        string docNumber, DateTime docDate, string contractType, 
        Money? contractPrice = null, Guid? departmentId = null, Guid? userId = null, string comment = null);

    /// <summary>
    /// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ соглашСниС
    /// </summary>
    /// <param name="fromBoxId">Π―Ρ‰ΠΈΠΊ отправитСля</param>
    /// <param name="toBoxId">Π―Ρ‰ΠΈΠΊ получатСля</param>
    /// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
    /// <param name="docNumber">НомСр Π”Π‘</param>
    /// <param name="docDate">Π”Π°Ρ‚Π° Π”Π‘</param>
    /// <param name="contractNumber">НомСр Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°</param>
    /// <param name="contractDate">Π”Π°Ρ‚Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°</param>
    /// <param name="contractType">Π’ΠΈΠΏ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°</param>
    /// <param name="total">Π¦Π΅Π½Π° Π”Π‘, Ссли Π΅ΡΡ‚ΡŒ</param>
    /// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅</param>
    /// <param name="userId">Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ</param>
    /// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ</param>
    /// <returns></returns>
    DiadocMessageResult SendSupplementaryAgreement(string fromBoxId, string toBoxId, EleWise.ELMA.Documents.Models.IDocument doc,
        string docNumber, DateTime docDate,
        string contractNumber, DateTime contractDate, string contractType = "",
        Money? total = null, Guid? departmentId = null, Guid? userId = null, string comment = null);
  
	/// <summary>
	/// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» согласования Ρ†Π΅Π½Ρ‹
	/// </summary>
	/// <param name="fromBoxId">Π―Ρ‰ΠΈΠΊ отправитСля</param>
	/// <param name="toBoxId">Π―Ρ‰ΠΈΠΊ получатСля</param>
	/// <param name="doc">Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚</param>
	/// <param name="docNumber">НомСр Π”Π‘</param>
	/// <param name="docDate">Π”Π°Ρ‚Π° Π”Π‘</param>
	/// <param name="departmentId">ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅</param>
	/// <param name="userId">Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ</param>
	/// <param name="comment">ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ</param>
	/// <returns></returns>
	DiadocMessageResult SendPriceListAgreement(string fromBoxId, string toBoxId, EleWise.ELMA.Documents.Models.IDocument doc,
		string docNumber, DateTime docDate,
		Guid? departmentId = null, Guid? userId = null, string comment = null);
}