public override void LeadingDocumentChanged(Sungero.Docflow.Shared.OfficialDocumentLeadingDocumentChangedEventArgs e)
        {
            base.LeadingDocumentChanged(e);

            if (Equals(e.NewValue, e.OldValue))
            {
                return;
            }

            if (e.NewValue != null && _obj.Counterparty == null)
            {
                _obj.Counterparty = AccountingDocumentBases.Is(e.NewValue)
          ? Docflow.AccountingDocumentBases.As(e.NewValue).Counterparty
          : Contracts.ContractualDocuments.As(e.NewValue).Counterparty;
            }

            if (e.NewValue != null && _obj.BusinessUnit == null)
            {
                _obj.BusinessUnit = e.NewValue.BusinessUnit;
            }

            if (e.NewValue != null)
            {
                Docflow.PublicFunctions.OfficialDocument.CopyProjects(e.NewValue, _obj);
            }

            FillName();
            _obj.Relations.AddFromOrUpdate(Contracts.PublicConstants.Module.AccountingDocumentsRelationName, e.OldValue, e.NewValue);
        }
예제 #2
0
        /// <summary>
        /// Проверить контрагента на резидент/нерезидент.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если контрагент нерезидент), сообщение об ошибке.</returns>
        private Structures.ConditionBase.ConditionResult CheckNonresident(IOfficialDocument document, IApprovalTask task)
        {
            if (OutgoingDocumentBases.Is(document))
            {
                var outgoingDocument = OutgoingDocumentBases.As(document);
                // Если хоть один адресат нерезидент, идем по ветке с нерезидентом.
                var isNonResident = outgoingDocument.Addressees.Any(x => x.Correspondent.Nonresident == true);
                return(Structures.ConditionBase.ConditionResult.Create(isNonResident, string.Empty));
            }

            if (ContractualDocumentBases.Is(document))
            {
                var counterparty = ContractualDocumentBases.As(document).Counterparty;
                var nonresident  = counterparty != null ? counterparty.Nonresident : true;
                return(Structures.ConditionBase.ConditionResult.Create(nonresident, string.Empty));
            }

            if (AccountingDocumentBases.Is(document))
            {
                var counterparty = AccountingDocumentBases.As(document).Counterparty;
                var nonresident  = counterparty != null ? counterparty.Nonresident : true;
                return(Structures.ConditionBase.ConditionResult.Create(nonresident, string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.DocumentNotContainsFieldCounterpartyOrCorrespondent));
        }
예제 #3
0
        /// <summary>
        /// Проверить валюту.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если валюта совпадает), сообщение об ошибке.</returns>
        private Structures.ConditionBase.ConditionResult CheckCurrency(IOfficialDocument document, IApprovalTask task)
        {
            var accountingDocument  = AccountingDocumentBases.As(document);
            var contractualDocument = ContractualDocumentBases.As(document);

            if (accountingDocument == null && contractualDocument == null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.DocumentNotContainsFieldCurrency));
            }

            if (accountingDocument != null && accountingDocument.Currency != null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(_obj.Currencies.Any(c => Equals(c.Currency, accountingDocument.Currency)), string.Empty));
            }

            if (contractualDocument != null && contractualDocument.Currency != null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(_obj.Currencies.Any(c => Equals(c.Currency, contractualDocument.Currency)), string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.FillCurrencyInContractCard));
        }
예제 #4
0
        /// <summary>
        /// Проверить сумму документа.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если сумма документа больше или равна сумме условия), сообщение об ошибке.</returns>
        private Structures.ConditionBase.ConditionResult CheckAmountIsMore(IOfficialDocument document, IApprovalTask task)
        {
            if (!AccountingDocumentBases.Is(document) && !ContractualDocumentBases.Is(document))
            {
                return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.DocumentNotContainsFieldAmount));
            }

            var accounting  = AccountingDocumentBases.As(document);
            var contractual = ContractualDocumentBases.As(document);

            if (accounting != null && accounting.TotalAmount.HasValue)
            {
                return(Structures.ConditionBase.ConditionResult.Create(this.CheckAmount(accounting.TotalAmount), string.Empty));
            }

            if (contractual != null && contractual.TotalAmount.HasValue)
            {
                return(Structures.ConditionBase.ConditionResult.Create(this.CheckAmount(contractual.TotalAmount), string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.FillTotalAmountInContractCard));
        }
예제 #5
0
        public List <IAccountingDocumentBase> FindAccountingDocuments(string number, string date,
                                                                      string butin, string butrrc,
                                                                      string cuuid, string ctin, string ctrrc,
                                                                      bool corrective,
                                                                      bool incomingTaxInvoice,
                                                                      bool outgoingTaxInvoice,
                                                                      bool contractStatement,
                                                                      bool waybill,
                                                                      bool universalTransferDocument)
        {
            var result = AccountingDocumentBases.GetAll()
                         .Where(a => incomingTaxInvoice && IncomingTaxInvoices.Is(a) ||
                                outgoingTaxInvoice && OutgoingTaxInvoices.Is(a) ||
                                contractStatement && ContractStatements.Is(a) ||
                                waybill && Waybills.Is(a) ||
                                universalTransferDocument && UniversalTransferDocuments.Is(a));

            // Фильтр по НОР.
            if (string.IsNullOrWhiteSpace(butin) || string.IsNullOrWhiteSpace(butrrc))
            {
                return(new List <IAccountingDocumentBase>());
            }

            var businessUnit = Sungero.Company.BusinessUnits.GetAll().FirstOrDefault(x => x.TIN == butin && x.TRRC == butrrc);

            if (businessUnit == null)
            {
                return(new List <IAccountingDocumentBase>());
            }
            else
            {
                result = result.Where(x => Equals(x.BusinessUnit, businessUnit));
            }

            // Фильтр по номеру.
            var relevantNumbers = this.GetRelevantNumbers(number);

            result = result.Where(x => relevantNumbers.Contains(x.RegistrationNumber));

            // Фильтр по дате.
            DateTime parsedDate;

            if (!string.IsNullOrWhiteSpace(date) && DateTime.TryParseExact(date,
                                                                           "dd'.'MM'.'yyyy",
                                                                           System.Globalization.CultureInfo.InvariantCulture,
                                                                           System.Globalization.DateTimeStyles.None,
                                                                           out parsedDate))
            {
                result = result.Where(x => x.RegistrationDate == parsedDate);
            }

            // Фильтр по контрагенту.
            var counterparties = Sungero.Parties.PublicFunctions.Module.Remote.FindCounterparty(cuuid, ctin, ctrrc, string.Empty);

            if (counterparties.Any())
            {
                result = result.Where(x => counterparties.Contains(x.Counterparty));
            }

            // Фильтр корректировочный или нет.
            result = result.Where(x => x.IsAdjustment == corrective);

            return(result.ToList());
        }
예제 #6
0
        public override bool CanCreateVersion(Sungero.Domain.Client.CanExecuteChildCollectionActionArgs e)
        {
            var accountDocument = AccountingDocumentBases.As(_obj.ElectronicDocument);

            return(base.CanCreateVersion(e) && accountDocument.IsFormalized != true);
        }