コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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)));
        }
コード例 #3
0
        /// <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)
            {
                // Мягкая попытка отправки, не удалось - и не надо.
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 /// <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)));
     }
 }
コード例 #6
0
        /// <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));
        }
コード例 #7
0
 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());
 }
コード例 #8
0
        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;
                    }
                }
            }
        }
コード例 #9
0
 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());
 }