Перейти к основному контенту

Обработка исходящего Договора с физ. лицом

В веб дизайнере 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] обязателен.