Пример #1
0
        public override void Created(Sungero.Domain.CreatedEventArgs e)
        {
            if (!_obj.State.IsCopied)
            {
                _obj.Limit = Limit.NoLimit;

                if (CallContext.CalledFrom(PowerOfAttorneys.Info))
                {
                    _obj.Reason = Sungero.Docflow.SignatureSetting.Reason.PowerOfAttorney;
                    var powerOfAttorney = PowerOfAttorneys.Get(CallContext.GetCallerEntityId(PowerOfAttorneys.Info));
                    if (powerOfAttorney.LifeCycleState != Docflow.OfficialDocument.LifeCycleState.Obsolete && powerOfAttorney.ValidTill >= Calendar.UserToday)
                    {
                        _obj.Document = powerOfAttorney;
                    }
                }
                else
                {
                    _obj.Reason = Sungero.Docflow.SignatureSetting.Reason.Duties;
                }

                _obj.DocumentFlow = SignatureSetting.DocumentFlow.All;
                _obj.Priority     = 0;
            }

            _obj.IsSystem = false;
        }
 public static List <IPowerOfAttorney> GetActivePowerOfAttorneys(Company.IEmployee employee, DateTime?date)
 {
     return(PowerOfAttorneys
            .GetAll(p => Equals(p.IssuedTo, employee) && (p.RegistrationDate == null || p.RegistrationDate <= date) && date <= p.ValidTill &&
                    (p.LifeCycleState == LifeCycleState.Draft || p.LifeCycleState == LifeCycleState.Active))
            .ToList());
 }
Пример #3
0
 public XElement Serialize(string name = null)
 {
     return(new XElement(UblNames.Cac + (name ?? nameof(Party)),
                         WebsiteURI?.Serialize(nameof(WebsiteURI)),
                         EndpointID?.Serialize(nameof(EndpointID)),
                         IndustryClassificationCode.Serialize(nameof(IndustryClassificationCode)),
                         PartyIdentification?.Serialize(),
                         PartyName?.Serialize(),
                         PostalAddress?.Serialize(nameof(PostalAddress)),
                         Contact?.Serialize(),
                         Person?.Serialize(),
                         AgentParty?.Serialize(nameof(AgentParty)),
                         ServiceProviderParty?.Serialize(),
                         PowerOfAttorneys?.Select(poa => poa?.Serialize())
                         ));
 }
Пример #4
0
        public virtual IQueryable <T> DocumentFiltering(IQueryable <T> query, Sungero.Domain.PropertyFilteringEventArgs e)
        {
            query = query.Where(d => InternalDocumentBases.Is(d) && d.LifeCycleState != Docflow.OfficialDocument.LifeCycleState.Obsolete);

            if (_obj.Reason == Docflow.SignatureSetting.Reason.PowerOfAttorney)
            {
                query = query.Where(d => PowerOfAttorneys.Is(d) && PowerOfAttorneys.As(d).ValidTill >= Calendar.UserToday);

                if (_obj.Recipient != null)
                {
                    query = query.Where(d => Equals(_obj.Recipient, PowerOfAttorneys.As(d).IssuedTo));
                }
            }

            return(query);
        }
Пример #5
0
 public virtual void DocumentChanged(Sungero.Docflow.Shared.SignatureSettingDocumentChangedEventArgs e)
 {
     if (e.NewValue != null && !Equals(e.NewValue, e.OldValue) && _obj.Reason == Docflow.SignatureSetting.Reason.PowerOfAttorney)
     {
         if (PowerOfAttorneys.Is(e.NewValue))
         {
             var powerOfAttorney = PowerOfAttorneys.As(e.NewValue);
             _obj.Recipient = powerOfAttorney.IssuedTo;
             _obj.ValidFrom = powerOfAttorney.RegistrationDate;
             _obj.ValidTill = powerOfAttorney.ValidTill;
             _obj.BusinessUnits.Clear();
             var newBusinessUnit = _obj.BusinessUnits.AddNew();
             newBusinessUnit.BusinessUnit = powerOfAttorney.BusinessUnit;
         }
         else
         {
             _obj.Recipient = null;
             _obj.ValidTill = null;
             _obj.BusinessUnits.Clear();
         }
     }
 }
Пример #6
0
        /// <summary>
        /// Агент рассылки уведомления об окончании срока действия доверенностей.
        /// </summary>
        public virtual void SendNotificationForExpiringPowerOfAttorney()
        {
            var createTableCommand = Queries.Module.CreateTableForExpiringPowerOfAttorney;

            Sungero.Docflow.PublicFunctions.Module.ExecuteSQLCommand(createTableCommand);

            var notifyParams = PublicFunctions.Module.GetDefaultExpiringDocsNotificationParams(Constants.Module.ExpiringPowerOfAttorneyLastNotificationKey,
                                                                                               Constants.Module.ExpiringPowerOfAttorneyTableName);

            var alreadySentDocs = PublicFunctions.Module.GetDocumentsWithSendedTask(notifyParams.ExpiringDocTableName);

            var powerOfAttorneyIds = PowerOfAttorneys.GetAll()
                                     .Where(p => !alreadySentDocs.Contains(p.Id))
                                     .Where(p => p.LifeCycleState == Sungero.Docflow.PowerOfAttorney.LifeCycleState.Active ||
                                            p.LifeCycleState == Sungero.Docflow.PowerOfAttorney.LifeCycleState.Draft)
                                     .Where(p => p.IssuedTo != null || p.PreparedBy != null)
                                     .Where(p => notifyParams.LastNotificationReserve.AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0) < p.ValidTill &&
                                            p.ValidTill <= notifyParams.TodayReserve.AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0))
                                     .Where(p => p.DaysToFinishWorks == null || p.DaysToFinishWorks <= Constants.Module.MaxDaysToFinish)
                                     .Select(p => p.Id)
                                     .ToList();

            Logger.DebugFormat("Powers of Attorney to send notification count = {0}.", powerOfAttorneyIds.Count());

            for (int i = 0; i < powerOfAttorneyIds.Count(); i = i + notifyParams.BatchCount)
            {
                var result = Transactions.Execute(
                    () =>
                {
                    var powerOfAttorneyPart = PowerOfAttorneys.GetAll(p => powerOfAttorneyIds.Contains(p.Id)).Skip(i).Take(notifyParams.BatchCount).ToList();
                    powerOfAttorneyPart     = powerOfAttorneyPart.Where(p => notifyParams.LastNotification.ToUserTime(p.PreparedBy ?? p.IssuedTo).AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0) < p.ValidTill &&
                                                                        p.ValidTill <= Calendar.GetUserToday(p.PreparedBy ?? p.IssuedTo).AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0))
                                              .ToList();

                    if (!powerOfAttorneyPart.Any())
                    {
                        return;
                    }

                    PublicFunctions.Module.ClearIdsFromExpiringDocsTable(notifyParams.ExpiringDocTableName,
                                                                         powerOfAttorneyPart.Select(x => x.Id).ToList());
                    PublicFunctions.Module.AddExpiringDocumentsToTable(notifyParams.ExpiringDocTableName,
                                                                       powerOfAttorneyPart.Select(x => x.Id).ToList());

                    foreach (var powerOfAttorney in powerOfAttorneyPart)
                    {
                        var subject = Docflow.PublicFunctions.Module.TrimQuotes(Resources.ExpiringPowerOfAttorneySubjectFormat(powerOfAttorney.DisplayValue));
                        if (subject.Length > Workflow.SimpleTasks.Info.Properties.Subject.Length)
                        {
                            subject = subject.Substring(0, Workflow.SimpleTasks.Info.Properties.Subject.Length);
                        }

                        var activeText = Docflow.PublicFunctions.Module.TrimQuotes(Resources.ExpiringPowerOfAttorneyTextFormat(powerOfAttorney.ValidTill.Value.ToShortDateString(),
                                                                                                                               powerOfAttorney.DisplayValue));

                        var performers = Functions.Module.GetNotificationPerformers(powerOfAttorney);
                        performers     = performers.Where(p => p != null).Distinct().ToList();

                        var attachments = new List <Sungero.Content.IElectronicDocument>();
                        attachments.Add(powerOfAttorney);

                        notifyParams.TaskParams.Document    = powerOfAttorney;
                        notifyParams.TaskParams.Subject     = subject;
                        notifyParams.TaskParams.ActiveText  = activeText;
                        notifyParams.TaskParams.Performers  = performers;
                        notifyParams.TaskParams.Attachments = attachments;
                        PublicFunctions.Module.TrySendExpiringDocNotifications(notifyParams);
                    }
                });
            }

            if (PublicFunctions.Module.IsAllNotificationsStarted(notifyParams.ExpiringDocTableName))
            {
                PublicFunctions.Module.UpdateLastNotificationDate(notifyParams);
                PublicFunctions.Module.ClearExpiringTable(notifyParams.ExpiringDocTableName, false);
            }
        }
Пример #7
0
        public virtual void RecipientChanged(Sungero.Docflow.Shared.SignatureSettingRecipientChangedEventArgs e)
        {
            // При изменении подписывающего почистить документ.
            if (_obj.Reason == Docflow.SignatureSetting.Reason.PowerOfAttorney &&
                _obj.Document != null && Docflow.PowerOfAttorneys.Is(_obj.Document) && !Equals(e.NewValue, PowerOfAttorneys.As(_obj.Document).IssuedTo))
            {
                _obj.Document  = null;
                _obj.ValidFrom = null;
                _obj.ValidTill = null;
            }

            if (!Equals(e.NewValue, e.OldValue))
            {
                _obj.Certificate = null;
            }
            Functions.SignatureSetting.ChangePropertiesAccess(_obj);
        }