/// <summary> /// Отправить по почте приглашение к обмену. /// </summary> /// <param name="box">Абонентский ящик нашей организации.</param> /// <param name="recipientEMail">Электронный адрес получателя.</param> public static void CreateInvitationEmail(ExchangeCore.IBusinessUnitBox box, string recipientEMail) { // Проверить заполненность обязательных параметров. if (box == null) { return; } var businessUnit = box.BusinessUnit; var businessUnitLegalName = businessUnit.LegalName; // Получить ссылку на регистрацию в сервисе. var registrationUrl = string.Empty; if (box.ExchangeService.ExchangeProvider == ExchangeCore.ExchangeService.ExchangeProvider.Synerdocs) { registrationUrl = Resources.WizardMailRegisterSynerdocs; } else if (box.ExchangeService.ExchangeProvider == ExchangeCore.ExchangeService.ExchangeProvider.Diadoc) { registrationUrl = Resources.WizardMailRegisterDiadoc; } else { registrationUrl = box.ExchangeService.LogonUrl; } var mailSubject = Resources.WizardMailSubjectFormat(businessUnit); var mailBody = Resources.WizardMailBodyFormat(businessUnitLegalName, Users.Current, box.ExchangeService.Name, registrationUrl); string mailto = Resources.WizardMailFormat(recipientEMail, mailSubject, mailBody); mailto = mailto.Replace("\"", "%22"); Hyperlinks.Open(mailto); }
public static bool LastVersionSended(Docflow.IOfficialDocument document, ExchangeCore.IBusinessUnitBox box, Parties.ICounterparty counterparty) { if (document == null || counterparty == null || box == null || !document.HasVersions) { return(false); } return(GetAllExDocumentInfos(document) .Any(x => x.VersionId == document.LastVersion.Id && x.MessageType == MessageType.Outgoing && Equals(x.Counterparty, counterparty) && Equals(x.Box, box))); }
/// <summary> /// Попытаться отказать контрагенту по первой версии, когда отправляем вторую. /// </summary> /// <param name="document">Документ.</param> /// <param name="party">Контрагент.</param> /// <param name="box">Ящик.</param> /// <param name="certificate">Сертификат.</param> private static void TryRejectCounterpartyVersion(Docflow.IOfficialDocument document, Parties.ICounterparty party, ExchangeCore.IBusinessUnitBox box, ICertificate certificate) { try { if (document.Versions.Count < 2) { return; } if (certificate != null) { SendAmendmentRequest(new List <Docflow.IOfficialDocument>() { document }, party, string.Empty, false, box, certificate, false); } } catch (Exception) { // Мягкая попытка отправки, не удалось - и не надо. } }
private static Parties.ICounterparty GetCounterparty(FormalizeDocumentsParser.IExchangeParticipant participant, ExchangeCore.IBusinessUnitBox box, bool canExchange) { var counterparties = Parties.Counterparties.GetAll() .Where(b => b.TIN == participant.Tin) .ToList(); if (canExchange) { counterparties = counterparties.Where(c => c.ExchangeBoxes.Any(b => b.Box == box)).ToList(); } if (counterparties.Count > 1) { counterparties = counterparties.Where(b => b.Status == CoreEntities.DatabookEntry.Status.Active).ToList(); } if (counterparties.Count > 1) { if (!string.IsNullOrWhiteSpace(participant.Trrc)) { counterparties = counterparties.OfType <Parties.ICompanyBase>().Where(b => b.TRRC == participant.Trrc).ToList <Parties.ICounterparty>(); } else { counterparties = counterparties.Where(b => !Parties.CompanyBases.Is(b)).ToList(); } } if (counterparties.Count > 1 && counterparties.Any(b => b.CanExchange == true)) { counterparties = counterparties.Where(b => b.CanExchange == true).ToList(); } if (counterparties.Any()) { return(counterparties.Single()); } return(null); }
/// <summary> /// Выбрать ту информацию о контрагенте системы обмена, /// полученную ранее из сервиса обмена, /// которая соответствует заданному описанию контрагента. /// </summary> /// <param name="counterparties">Информация о контрагентах систем обмена.</param> /// <param name="counterpartyString">Описание контрагента системы обмена.</param> /// <param name="box">Абонентский ящик нашей организации.</param> /// <returns>Информация о контрагенте, полученная из сервиса обмена.</returns> public virtual Structures.Module.CounterpartyFromExchangeService ConvertStringToCounterparty(List <Structures.Module.CounterpartyFromExchangeService> counterparties, string counterpartyString, ExchangeCore.IBusinessUnitBox box = null) { if (box == null) { return(counterparties.FirstOrDefault(a => ConvertCounterpartyToString(a) == counterpartyString)); } else { return(counterparties.FirstOrDefault(a => ConvertCounterpartyToString(a) == counterpartyString && Equals(a.Box, box))); } }
/// <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)); }
private static Parties.ICounterparty GetCounterparty(string ftsId, ExchangeCore.IBusinessUnitBox box) { return(Parties.Counterparties.GetAll() .Where(c => c.ExchangeBoxes.Any(b => b.FtsId == ftsId && b.Box == box)) .SingleOrDefault()); }
private static void FillBusinessUnitAndCounterparty(Docflow.IAccountingDocumentBase document, FormalizeDocumentsParser.ISellerTitle sellerTitle, bool requireFtsId) { ExchangeCore.IBusinessUnitBox box = null; Parties.ICounterparty counterparty = null; // Поиск по ФНС ИД. if (!string.IsNullOrWhiteSpace(sellerTitle.SenderId) || !string.IsNullOrWhiteSpace(sellerTitle.ReceiverId)) { var exchangeProvider = GetExchangeService(sellerTitle); var boxes = ExchangeCore.BusinessUnitBoxes.GetAll() .Where(b => b.ExchangeService.ExchangeProvider == exchangeProvider) .ToList(); box = boxes.Where(b => b.FtsId == sellerTitle.SenderId).SingleOrDefault(); if (box != null) { counterparty = GetCounterparty(sellerTitle.ReceiverId, box); } } // Поиск по ИНН \ КПП. if (!requireFtsId && (box == null || counterparty == null)) { var boxOnTin = GetBox(sellerTitle.Seller); if (boxOnTin != null) { if (counterparty == null) { counterparty = GetCounterparty(sellerTitle.Buyer, boxOnTin, true); } if (box == null) { box = boxOnTin; } } } // Если нашелся ящик - заполняем. if (box != null) { document.BusinessUnitBox = box; document.BusinessUnit = box.BusinessUnit; document.Counterparty = counterparty; } if (!requireFtsId && (box == null || counterparty == null)) { // Ищем по ИНН \ КПП, не связываясь с МКДО. var unit = GetBusinessUnit(sellerTitle.Seller); if (unit != null) { if (document.Counterparty == null) { document.Counterparty = GetCounterparty(sellerTitle.Buyer, null, false); } if (document.BusinessUnit == null) { document.BusinessUnit = unit; } } } }
public static ICounterparty FindCounterpartyByOrganizationId(ExchangeCore.IBusinessUnitBox box, string organizationId) { return(Counterparties.GetAll().Where(c => c.ExchangeBoxes.Any(b => Equals(b.Box, box) && b.OrganizationId == organizationId)).FirstOrDefault()); }