public virtual IBlobPackage PrepareDcsPackage(string senderLineName, string instanceInfosXmlPath, string deviceInfoXmlPath, string inputFilesXmlPath, string packageFolderPath) { Logger.Debug("Begin of prepare package from DCS to Ario..."); // Получить основную информацию о пакете документов из DCS. var blobPackage = Functions.BlobPackage.Remote.CreateBlobPackage(); blobPackage.SenderLine = senderLineName; if (this.GetSourceType(deviceInfoXmlPath) == Constants.Module.CaptureSourceType.Mail) { blobPackage.SourceType = BlobPackage.SourceType.Mail; this.FillMailInfo(blobPackage, instanceInfosXmlPath); } else { blobPackage.SourceType = BlobPackage.SourceType.Folder; } blobPackage.PackageFolderPath = packageFolderPath; blobPackage = this.FillBlobs(blobPackage, inputFilesXmlPath, packageFolderPath); if (!blobPackage.Blobs.Any() && blobPackage.MailBodyBlob == null) { throw AppliedCodeException.Create(Resources.EmptyScanPackage); } blobPackage.Save(); Logger.Debug("Captured Package Process. Package preparation completed successfully."); return(blobPackage); }
public virtual IBlobPackage FillBlobs(IBlobPackage blobPackage, string inputFilesXmlPath, string packageFolderPath) { if (!File.Exists(inputFilesXmlPath)) { throw AppliedCodeException.Create(Resources.NoFilesInfoInPackage); } var fileDescriptionTagName = Constants.Module.DcsInputFilesTagNames.FileDescription; var filesXDoc = System.Xml.Linq.XDocument.Load(inputFilesXmlPath); var fileElements = filesXDoc .Element(Constants.Module.DcsInputFilesTagNames.InputFilesSection) .Element(Constants.Module.DcsInputFilesTagNames.Files) .Elements() .ToList(); if (!fileElements.Any()) { throw AppliedCodeException.Create(Resources.NoFilesInfoInPackage); } var sentByEmail = blobPackage.SourceType == BlobPackage.SourceType.Mail; if (sentByEmail) { var mailBodyHtmlName = Constants.Module.DcsMailBodyName.Html; var mailBodyTxtName = Constants.Module.DcsMailBodyName.Txt; // Тело письма. blobPackage.MailBodyBlob = this.GetMailBody(fileElements, packageFolderPath); // Фильтрация картинок из тела письма. var htmlBodyElement = fileElements .FirstOrDefault(x => string.Equals(x.Element(fileDescriptionTagName).Value, mailBodyHtmlName, StringComparison.InvariantCultureIgnoreCase)); var hasHtmlBody = htmlBodyElement != null; // Убрать тело письма (body.html или body.txt). fileElements = fileElements .Where(x => !string.Equals(x.Element(fileDescriptionTagName).Value, mailBodyHtmlName, StringComparison.InvariantCultureIgnoreCase) && !string.Equals(x.Element(fileDescriptionTagName).Value, mailBodyTxtName, StringComparison.InvariantCultureIgnoreCase)) .ToList(); if (blobPackage.MailBodyBlob != null && !string.IsNullOrEmpty(blobPackage.MailBodyBlob.FilePath) && hasHtmlBody) { fileElements = this.FilterEmailBodyInlineImages(blobPackage.MailBodyBlob.FilePath, fileElements); } } // Получить файлы пакета документов из DCS. foreach (var fileElement in fileElements) { var blob = this.CreateBlobFromXelement(fileElement, packageFolderPath, sentByEmail); if (blob != null) { blobPackage.Blobs.AddNew().Blob = blob; } } return(blobPackage); }
public virtual void MilestonesDeleted(Sungero.Domain.Shared.CollectionPropertyDeletedEventArgs e) { if (_deleted.IsCompleted.Value) { throw AppliedCodeException.Create(ContractualDocuments.Resources.CannotDeleteCompleteContractMilestone); } }
public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e) { if (PersonalSettings.GetAll(s => Equals(s.Employee, _obj.Employee) && !Equals(s, _obj)).Any()) { throw AppliedCodeException.Create(PersonalSettings.Resources.CantCreateMoreSetting); } }
public override void BeforeDelete(Sungero.Domain.BeforeDeleteEventArgs e) { if (!Functions.Module.IsAllExternalEntityLinksDeleted(_obj)) { throw AppliedCodeException.Create(Commons.Resources.HasLinkedExternalEntities); } }
public virtual Docflow.IAccountingDocumentBase ImportFormalizedDocument(Docflow.Structures.Module.IByteArray xml, bool requireFtsId) { var importResult = Functions.Module.Remote.ImportFormalizedDocument(xml, requireFtsId); if (!importResult.IsSuccess) { throw AppliedCodeException.Create(importResult.Error); } var document = importResult.Document; // Вызвать обработчик изменения свойства, чтобы создалась связь с корректируемым документом // (с сервера несохранённые связи не передаются для оптимизации). if (ClientApplication.ApplicationType == ApplicationType.Desktop) { document.Corrected = document.Corrected; } var memory = new System.IO.MemoryStream(importResult.Body); var publicMemory = new System.IO.MemoryStream(importResult.PublicBody); var version = document.LastVersion; version.Body.Write(memory); version.PublicBody.Write(publicMemory); return(document); }
public virtual void GenerateDefaultAnswer(Company.IEmployee signatory, bool isAgent) { IPowerOfAttorney signatoryPowerOfAttorney = null; IPowerOfAttorney consigneePowerOfAttorney = null; var signatoryOtherReason = string.Empty; var signaturesSettings = Functions.OfficialDocument.GetSignatureSettings(_obj, signatory); var signaturesSettingWithDuties = signaturesSettings.Where(o => Equals(o.Reason, Docflow.SignatureSetting.Reason.Duties)).FirstOrDefault(); var signaturesSettingWithPowerOfAttorney = signaturesSettings.Where(o => Equals(o.Reason, Docflow.SignatureSetting.Reason.PowerOfAttorney)).FirstOrDefault(); var signaturesSettingWithOtherDocument = signaturesSettings.Where(o => Equals(o.Reason, Docflow.SignatureSetting.Reason.Other)).FirstOrDefault(); if (signaturesSettingWithDuties == null && _obj.FormalizedServiceType != FormalizedServiceType.Waybill) { if (signaturesSettingWithPowerOfAttorney != null) { signatoryPowerOfAttorney = Docflow.PowerOfAttorneys.As(signaturesSettingWithPowerOfAttorney.Document); } else if (signaturesSettingWithOtherDocument != null) { signatoryOtherReason = signaturesSettingWithOtherDocument.DocumentInfo; } } var errorlist = Functions.AccountingDocumentBase.TitleDialogValidationErrors(_obj, signatory, null, signatoryPowerOfAttorney, consigneePowerOfAttorney, signatoryOtherReason, null); var validationText = string.Join(Environment.NewLine, errorlist.Select(l => l.Text)); if (errorlist.Any()) { throw AppliedCodeException.Create(validationText); } // У УКД доступен только вариант "ответственный за оформление". var authority = Docflow.AccountingDocumentBases.Resources.PropertiesFillingDialog_HasAuthority_DealAndRegister; if (_obj.FormalizedServiceType == Docflow.AccountingDocumentBase.FormalizedServiceType.GeneralTransfer && _obj.IsAdjustment == true) { authority = Docflow.AccountingDocumentBases.Resources.PropertiesFillingDialog_HasAuthority_Register; } var basis = SignatureSettings.Info.Properties.Reason.GetLocalizedValue(Docflow.SignatureSetting.Reason.Duties); var buyerTitle = Docflow.Structures.AccountingDocumentBase.BuyerTitle.Create(); buyerTitle.ActOfDisagreement = string.Empty; buyerTitle.Signatory = signatory; buyerTitle.SignatoryPowersBase = basis; buyerTitle.Consignee = null; buyerTitle.ConsigneePowersBase = string.Empty; buyerTitle.SignResult = true; buyerTitle.SignatoryPowers = authority; buyerTitle.AcceptanceDate = Calendar.Now; buyerTitle.SignatoryPowerOfAttorney = signatoryPowerOfAttorney; buyerTitle.SignatoryOtherReason = signatoryOtherReason; buyerTitle.ConsigneePowerOfAttorney = consigneePowerOfAttorney; buyerTitle.ConsigneeOtherReason = null; this.GenerateAnswer(buyerTitle, isAgent); }
public virtual void ValidateSenderLineSettingExisting(string senderLineName) { var senderLineSetting = _obj.CaptureSources .Where(x => x.SenderLineName.Trim() == senderLineName.Trim()) .FirstOrDefault(); if (senderLineSetting == null) { throw AppliedCodeException.Create(SmartProcessingSettings.Resources.NotFoundSenderLineNameFormat(senderLineName)); } }
public virtual void ResolutionGroupAdded(Sungero.Workflow.Interfaces.AttachmentAddedEventArgs e) { // В качестве проектов резолюции нельзя отправить поручения-непроекты. if (_obj.ResolutionGroup.ActionItemExecutionTasks.Any(a => a.IsDraftResolution != true)) { foreach (var actionItem in _obj.ResolutionGroup.ActionItemExecutionTasks.Where(a => a.IsDraftResolution != true)) { _obj.ResolutionGroup.ActionItemExecutionTasks.Remove(actionItem); } throw AppliedCodeException.Create(DocumentReviewTasks.Resources.FindNotDraftResolution); } }
public virtual void TrackingDeleted(Sungero.Domain.Shared.CollectionPropertyDeletedEventArgs e) { if (_deleted.State.Properties.ReturnDate.OriginalValue.HasValue) { throw AppliedCodeException.Create(Docflow.Resources.CantDeleteReturnedTracking); } if (_deleted.Action == Docflow.OfficialDocumentTracking.Action.Endorsement) { throw AppliedCodeException.Create(Docflow.Resources.CantDeleteAutomaticallyTracking); } }
public override void VersionsAdded(Sungero.Domain.Shared.CollectionPropertyAddedEventArgs e) { // Формирование имени документа при добавлении версии. if (_obj.State.IsInserted && !_obj.State.IsCopied && _obj.DocumentKind != null && _obj.DocumentKind.GenerateDocumentName == true && !_obj.Name.Equals(Resources.DocumentNameAutotext)) { // Если версия документа создается из шаблона, то не заполнять Содержание. if (string.IsNullOrEmpty(_obj.Subject) && !e.Params.Contains(Constants.Module.CreateFromTemplate)) { _obj.Subject = _obj.Name; } else { Functions.OfficialDocument.FillName(_obj); } } // Сбрасываем статус согл. с КА при создании новой версии документа из МКДО. if (_obj.ExternalApprovalState != null && _obj.ExchangeState != null) { _obj.ExternalApprovalState = null; } // Сбрасываем статус эл. обмена при создании новой версии. if (_obj.ExchangeState != null) { // Версии можно создавать и при заблокированной карточке, а в таком случае сохранить эту карточку нельзя. var lockInfo = Locks.GetLockInfo(_obj); if (lockInfo != null && lockInfo.IsLockedByOther) { throw AppliedCodeException.Create(lockInfo.LockedMessage); } _obj.ExchangeState = null; } var storage = _obj.Storage ?? Functions.Module.GetStorageByPolicies(_obj); if (storage != null) { if (!Equals(_added.Body.Storage, storage)) { _added.Body.SetStorage(storage); } if (!Equals(_added.PublicBody.Storage, storage)) { _added.PublicBody.SetStorage(storage); } } }
public virtual void GenerateDefaultSellerTitle(Sungero.Company.IEmployee signatory) { // Основание: Должностные обязанности. var powerBase = SignatureSettings.Info.Properties.Reason.GetLocalizedValue(Docflow.SignatureSetting.Reason.Duties); // Полномочия: Лицо, совершившее сделку и отв. за оформление. var power = Docflow.AccountingDocumentBases.Resources.PropertiesFillingDialog_HasAuthority_DealAndRegister; // Для УКД: Лицо, ответственное за оформление свершившегося события. if (_obj.FormalizedServiceType == Docflow.AccountingDocumentBase.FormalizedServiceType.GeneralTransfer && _obj.IsAdjustment == true) { power = Docflow.AccountingDocumentBases.Resources.PropertiesFillingDialog_HasAuthority_Register; } // Доверенность. IPowerOfAttorney signatoryPowerOfAttorney = null; // Другой документ. var signatoryOtherReason = string.Empty; var signaturesSettings = Functions.OfficialDocument.GetSignatureSettings(_obj, signatory); var signaturesSettingWithDuties = signaturesSettings.Where(o => Equals(o.Reason, Docflow.SignatureSetting.Reason.Duties)).FirstOrDefault(); var signaturesSettingWithPowerOfAttorney = signaturesSettings.Where(o => Equals(o.Reason, Docflow.SignatureSetting.Reason.PowerOfAttorney)).FirstOrDefault(); var signaturesSettingWithOtherDocument = signaturesSettings.Where(o => Equals(o.Reason, Docflow.SignatureSetting.Reason.Other)).FirstOrDefault(); if (signaturesSettingWithDuties == null && _obj.FormalizedServiceType != FormalizedServiceType.Waybill) { if (signaturesSettingWithPowerOfAttorney != null) { signatoryPowerOfAttorney = Docflow.PowerOfAttorneys.As(signaturesSettingWithPowerOfAttorney.Document); } else if (signaturesSettingWithOtherDocument != null) { signatoryOtherReason = signaturesSettingWithOtherDocument.DocumentInfo; } } var errorlist = Functions.AccountingDocumentBase.TitleDialogValidationErrors(_obj, signatory, null, signatoryPowerOfAttorney, null, signatoryOtherReason, null); var validationText = string.Join(Environment.NewLine, errorlist.Select(l => l.Text)); if (errorlist.Any()) { throw AppliedCodeException.Create(validationText); } var sellerTitle = Docflow.Structures.AccountingDocumentBase.SellerTitle .Create(signatory, powerBase, power, signatoryPowerOfAttorney, signatoryOtherReason); Functions.AccountingDocumentBase.GenerateSellerTitle(_obj, sellerTitle); }
public virtual string GetSourceType(string deviceInfoXmlPath) { if (!File.Exists(deviceInfoXmlPath)) { throw AppliedCodeException.Create(Resources.NoFilesInfoInPackage); } var filesXDoc = System.Xml.Linq.XDocument.Load(deviceInfoXmlPath); var element = filesXDoc.Element(Constants.Module.DcsDeviceInfoTagNames.MailSourceInfo); if (element != null) { return(Constants.Module.CaptureSourceType.Mail); } return(Constants.Module.CaptureSourceType.Folder); }
public virtual void ValidateSettings(string senderLineName, string instanceInfosXmlPath, string deviceInfoXmlPath, string inputFilesXmlPath, string packageFolderPath) { // Проверить общие настройки. var smartProcessingSettings = Sungero.Docflow.PublicFunctions.SmartProcessingSetting.GetSettings(); if (smartProcessingSettings == null) { throw AppliedCodeException.Create(Resources.SmartProcessingSettingsNotFound); } Sungero.Docflow.PublicFunctions.SmartProcessingSetting.ValidateSettings(smartProcessingSettings); Logger.Debug("Validate settings. Smart processing settings validation completed successfully."); // Проверить, что линия настроена и для нее есть ответственный. Logger.DebugFormat("Validate settings. Sender line name: {0}", senderLineName); Sungero.Docflow.PublicFunctions.SmartProcessingSetting.ValidateSenderLineSettingExisting(smartProcessingSettings, senderLineName); Logger.Debug("Validate settings. Sender line setting validation completed successfully."); }
/// <summary> /// Задать основные настройки захвата. /// </summary> /// <param name="arioUrl">Адрес Арио.</param> /// <param name="lowerConfidenceLimit">Нижняя граница доверия извлеченным фактам.</param> /// <param name="upperConfidenceLimit">Верхняя граница доверия извлеченным фактам.</param> /// <param name="firstPageClassifierName">Имя классификатора первых страниц.</param> /// <param name="typeClassifierName">Имя классификатора по типам документов.</param> public static void SetSettings(string arioUrl, string lowerConfidenceLimit, string upperConfidenceLimit, string firstPageClassifierName, string typeClassifierName) { var message = Functions.SmartProcessingSetting.Remote.SetSettings(arioUrl, lowerConfidenceLimit, upperConfidenceLimit, firstPageClassifierName, typeClassifierName); if (message != null) { if (message.Type == MessageTypes.Warning) { Logger.Debug(message.Text); } if (message.Type == MessageTypes.Error || message.Type == MessageTypes.SoftError) { throw AppliedCodeException.Create(message.Text); } } }
/// <summary> /// Сгенерировать ФНС-ид (и связанные свойства) для документа. /// </summary> /// <param name="stream">Поток с XML в исходном виде.</param> /// <param name="rootBox">Ящик, через который будет отправлен документ.</param> /// <param name="counterparty">Контрагент.</param> /// <param name="formalizedServiceType">Тип документа (УПД, ДПТ, ДПРР).</param> /// <param name="isAdjustment">Корректировочный (важно только для УКД).</param> /// <returns>Сгенерированный XML новым потоком.</returns> private static System.IO.MemoryStream AddOrReplaceSellerTitleInfo(System.IO.MemoryStream stream, ExchangeCore.IBusinessUnitBox rootBox, Parties.ICounterparty counterparty, Sungero.Core.Enumeration formalizedServiceType, bool isAdjustment) { var counterpartyExchange = counterparty.ExchangeBoxes.SingleOrDefault(c => Equals(c.Box, rootBox)); if (counterpartyExchange == null) { throw AppliedCodeException.Create(string.Format("Counterparty {0} must have exchange from box {1}", counterparty.Id, rootBox.Id)); } var sellerTitleInfo = new FormalizeDocumentsParser.SellerTitleInfo(); if (formalizedServiceType == Docflow.AccountingDocumentBase.FormalizedServiceType.GoodsTransfer) { sellerTitleInfo.DocumentType = FormalizeDocumentsParser.DocumentType.GoodsTransferDocument; } else if (formalizedServiceType == Docflow.AccountingDocumentBase.FormalizedServiceType.WorksTransfer) { sellerTitleInfo.DocumentType = FormalizeDocumentsParser.DocumentType.WorksTransferDocument; } else if (formalizedServiceType == Docflow.AccountingDocumentBase.FormalizedServiceType.GeneralTransfer) { sellerTitleInfo.DocumentType = isAdjustment ? FormalizeDocumentsParser.DocumentType.UniversalCorrectionTransferDocument : FormalizeDocumentsParser.DocumentType.UniversalTransferDocument; } if (rootBox.ExchangeService.ExchangeProvider == ExchangeCore.ExchangeService.ExchangeProvider.Diadoc) { sellerTitleInfo.Operator = FormalizeDocumentsParser.SupportedEdoOperators.Diadoc; } else { sellerTitleInfo.Operator = FormalizeDocumentsParser.SupportedEdoOperators.Synerdocs; } sellerTitleInfo.Receiver = counterpartyExchange.FtsId; sellerTitleInfo.Sender = rootBox.FtsId; return(sellerTitleInfo.AddOrReplaceToXml(stream)); }
public virtual void ValidateSettings() { var arioUrlValidationMessage = Functions.SmartProcessingSetting.ValidateArioUrl(_obj); if (arioUrlValidationMessage != null) { throw AppliedCodeException.Create(arioUrlValidationMessage.Text); } var classifiersValidationMessage = Functions.SmartProcessingSetting.ValidateClassifiers(_obj); if (classifiersValidationMessage != null) { if (classifiersValidationMessage.Type == MessageTypes.Warning) { Logger.Debug(classifiersValidationMessage.Text); } else { throw AppliedCodeException.Create(classifiersValidationMessage.Text); } } }
public virtual void SignAndSendDeliveryConfirmation() { var userBoxes = ExchangeCore.PublicFunctions.BusinessUnitBox.Remote .GetConnectedBoxes() .Where(b => b.CertificateReceiptNotifications != null && Equals(b.CertificateReceiptNotifications.Owner, Users.Current)) .ToList(); if (!userBoxes.Any()) { var error = Resources.SendDeliveryConfirmationBoxesNotFoundFormat(Users.Current.Name); throw AppliedCodeException.Create(error); } var aggregate = new List <Exception>(); foreach (var box in userBoxes) { try { var error = this.SendDeliveryConfirmation(box, box.CertificateReceiptNotifications, true); if (!string.IsNullOrWhiteSpace(error)) { aggregate.Add(AppliedCodeException.Create(error)); } } catch (Exception ex) { Logger.Error(ReceiptNotificationSendingTasks.Resources.ReceiptNotificationAssignmentError, ex); aggregate.Add(ex); } } if (aggregate.Any()) { var result = aggregate.Count == 1 ? aggregate.Single() : new AggregateException(aggregate); throw result; } }
public override void BeforeDelete(Sungero.Domain.BeforeDeleteEventArgs e) { throw AppliedCodeException.Create(Docflow.Resources.DeleteSettingsException); }
public override void BeforeDelete(Sungero.Domain.BeforeDeleteEventArgs e) { throw AppliedCodeException.Create(PersonalSettings.Resources.CantDeleteSetting); }
public virtual void FillMailInfo(IBlobPackage blobPackage, string instanceInfosXmlPath) { if (!File.Exists(instanceInfosXmlPath)) { throw AppliedCodeException.Create(Resources.FileNotFoundFormat(instanceInfosXmlPath)); } var infoXDoc = System.Xml.Linq.XDocument.Load(instanceInfosXmlPath); if (infoXDoc == null) { return; } var mailCaptureInstanceInfoElement = infoXDoc .Element(DcsInstanceInfosTagNames.CaptureInstanceInfoList) .Element(DcsInstanceInfosTagNames.MailCaptureInstanceInfo); if (mailCaptureInstanceInfoElement == null) { return; } // Тема письма. var subject = this.GetAttributeStringValue(mailCaptureInstanceInfoElement, DcsInstanceInfosTagNames.Subject); if (subject.Length > blobPackage.Info.Properties.Subject.Length) { subject = subject.Substring(0, blobPackage.Info.Properties.Subject.Length); } blobPackage.Subject = subject; // Отправитель. var fromElement = mailCaptureInstanceInfoElement.Element(DcsInstanceInfosTagNames.From); if (fromElement != null) { blobPackage.FromAddress = this.GetAttributeStringValue(fromElement, DcsInstanceInfosTagNames.ContactAttributes.Address); blobPackage.FromName = this.GetAttributeStringValue(fromElement, DcsInstanceInfosTagNames.ContactAttributes.Name); } // Получатели. var mailToElement = mailCaptureInstanceInfoElement.Element(DcsInstanceInfosTagNames.To); if (mailToElement != null) { var recipients = mailToElement.Elements(DcsInstanceInfosTagNames.Recipient); foreach (var recipient in recipients) { var mailToRecipient = blobPackage.To.AddNew(); mailToRecipient.Name = this.GetAttributeStringValue(recipient, DcsInstanceInfosTagNames.ContactAttributes.Name); mailToRecipient.Address = this.GetAttributeStringValue(recipient, DcsInstanceInfosTagNames.ContactAttributes.Address); } } // Получатели копии. var copyElement = mailCaptureInstanceInfoElement.Element(DcsInstanceInfosTagNames.CC); if (copyElement != null) { var recipients = copyElement.Elements(DcsInstanceInfosTagNames.Recipient); foreach (var recipient in recipients) { var copyRecipient = blobPackage.CC.AddNew(); copyRecipient.Name = this.GetAttributeStringValue(recipient, DcsInstanceInfosTagNames.ContactAttributes.Name); copyRecipient.Address = this.GetAttributeStringValue(recipient, DcsInstanceInfosTagNames.ContactAttributes.Address); } } blobPackage.Save(); }