Esempio n. 1
0
        public void ProcessChanges()
        {
            var currentUserId = CurrentConnection.CurrentUser?.Id ?? AcmanConstants.User.AcmanSUId;
            var now           = AcmanHelper.GetCurrentDateTime();

            var addedEntries = ChangeTracker.Entries()
                               .Where(x => (x.State == EntityState.Added || x.State == EntityState.Modified));

            foreach (var entry in addedEntries)
            {
                var  entity        = entry.Entity as IEntity;
                bool isIntegration = false;
                if (entry.Entity.GetType().GetInterface("ISynchronizedEntity") != null)
                {
                    isIntegration = (entry.Entity as ISynchronizedEntity).IsIntegration;
                    (entry.Entity as ISynchronizedEntity).IsSynchronized = isIntegration;
                }
                entry.State = AcmanHelper.ConvertToEntityState(entity.EntityState);
                if (entry.State == EntityState.Added)
                {
                    entity.CreatedById = currentUserId;
                    entity.CreatedOn   = now;
                }
                if (entry.State != EntityState.Unchanged)
                {
                    entity.ModifiedById = currentUserId;
                    entity.ModifiedOn   = now;
                }
            }
        }
Esempio n. 2
0
        public void SyncUserActivityes(User user, DateTime startDate)
        {
            ICollection <Activity> remoteActivityes =
                _activityBpmOdataRepository.GetAllChangedBetweenDatesForUser(startDate, _endDate, user);

            _info += "RemoteActivityes: " + remoteActivityes.Count.ToString() + "; ";
            ICollection <Activity> acmanChangedActivityes =
                _activityRepository.GetUnsyncedForUser(user);

            foreach (var remoteActivity in remoteActivityes)
            {
                var acmanActivity =
                    acmanChangedActivityes
                    .Where(a => a.EndSystemRecordId == remoteActivity.EndSystemRecordId)
                    .FirstOrDefault()
                    ??
                    _activityRepository.GetByRemoteRecordId(remoteActivity.EndSystemRecordId);
                if (acmanActivity != null)
                {
                    if (acmanActivity.ModifiedOn < remoteActivity.ModifiedOn)
                    {
                        acmanChangedActivityes.Remove(acmanActivity);
                        AcmanHelper.MergeSyncedObjects(acmanActivity, remoteActivity);
                        _activityRepository.Edit(acmanActivity);
                    }
                }
                else
                {
                    _activityRepository.Add(remoteActivity);
                }
            }
            _info += "AcmanActivityes: " + acmanChangedActivityes.Count.ToString() + "; ";
            SyncAcmanActivity(acmanChangedActivityes);
        }
Esempio n. 3
0
 public void Sync()
 {
     try {
         ICollection <User> bpmWorkUsers = _userRepository.GetUsersByEndSystem(_bpmonlineEndSystemId);
         _info += "[Users for sync: " + bpmWorkUsers.Count.ToString() + "] ";
         foreach (User user in bpmWorkUsers)
         {
             SyncUser(user);
         }
     }
     catch (Exception e) {
         _info = "Error: " + e.Message + " " + _info;
     }
     finally {
         _synchronizationRepository.Add(
             new Synchronization {
             EndSystemId = _bpmonlineEndSystemId,
             StartPeriod = _startDate,
             EndPeriod   = _endDate,
             Info        = _info,
             Duration    = (int)(AcmanHelper.GetCurrentDateTime() - _endDate).TotalSeconds
         }
             );
     }
 }
Esempio n. 4
0
        public void Sync_Test()
        {
            using (var context = new AcManContext(OptionsRandom)) { //MsSql2016Options
                var userId                     = TestDemoData.CreateTestData(context);
                var bpm                        = DemoTS_ODBase;     //MsSqlMKODBase
                var userRepository             = new UserRepository(context);
                var activityRepository         = new ActivityRepository(context);
                var synchronizationRepository  = new SynchronizationRepository(context);
                var bpmOdataConverter          = new BpmOdataConverter();
                var activityBpmOdataRepository = new ActivityBpmOdataRepository(bpm, bpmOdataConverter);

                var bpmonlineSyncStrategy = new BpmonlineSyncStrategy(
                    userRepository,
                    activityRepository,
                    synchronizationRepository,
                    activityBpmOdataRepository
                    );
                var startCount     = activityRepository.GetAll().Count;
                var remoteActivity = new Activity {
                    UserId  = userId,
                    Caption = "[Acman] Test remote activity " + AcmanHelper.GetCurrentDateTime().ToString()
                };
                remoteActivity.EndSystemRecordId = activityBpmOdataRepository.Add(remoteActivity);
                bpmonlineSyncStrategy.Sync();
                var endCount = activityRepository.GetAll().Count;
                Assert.IsTrue(endCount > startCount);
                activityBpmOdataRepository.Remove(remoteActivity);
            }
        }
Esempio n. 5
0
 public DateTime GetLastSyncDate()
 {
     return
         (_context.Synchronizations.Any() ?
          _context.Synchronizations.Max(p => p.EndPeriod) :
          AcmanHelper.GetCurrentDateTime().AddDays(-7));
 }
Esempio n. 6
0
 public Activity GetCurrent()
 {
     return(_context.Activities.Where(
                s => s.Start <= AcmanHelper.GetCurrentDateTime() &&
                s.Status == ActivityStatus.InProgress
                ).OrderByDescending(s => s.ModifiedOn)
            .FirstOrDefault());
 }
Esempio n. 7
0
 public Activity Pause()
 {
     CurrentActivity.Status = ActivityStatus.InPause;
     CurrentActivity.End    = AcmanHelper.GetCurrentDateTime();
     Repository.Edit(CurrentActivity);
     SyncStrategy.SyncAcmanActivity(CurrentActivity);
     return(CurrentActivity);
 }
Esempio n. 8
0
        public static Guid CreateActivityToUser(AcManContext context, Guid userId)
        {
            var activityRepository = new ActivityRepository(context);
            var activity           = new Activity {
                UserId            = userId,
                Caption           = "[Acman] Test activity " + AcmanHelper.GetCurrentDateTime().ToString(),
                EndSystemRecordId = new Guid("8cb830fb-50d8-44ad-819f-133b713fce42"),
                EntityState       = AcmanEntityState.Added
            };

            return(activityRepository.Add(activity));
        }
Esempio n. 9
0
 public Activity Stop()
 {
     if (CurrentActivity == null)
     {
         return(null);
     }
     CurrentActivity.Status = ActivityStatus.Done;
     CurrentActivity.End    = AcmanHelper.GetCurrentDateTime();
     Repository.Edit(CurrentActivity);
     SyncStrategy.SyncAcmanActivity(CurrentActivity);
     return(CurrentActivity);
 }
Esempio n. 10
0
 public void SyncUser(User user)
 {
     try {
         _info += "[User: "******"; ";
         SyncUserActivityes(user, user.LastSyncDate ?? AcmanHelper.GetCurrentDateTime().AddDays(-7));
         user.LastSyncDate = _endDate;
         _userRepository.Edit(user);
     } catch (Exception e) {
         _info = "Error during sync user: "******" " + _info;
     } finally {
         _info += "]; ";
     }
 }
Esempio n. 11
0
        public Activity StopById(Guid id)
        {
            var activity = Repository.Get(id);

            activity.Status = ActivityStatus.Done;
            activity.End    = AcmanHelper.GetCurrentDateTime();
            if (activity.Start == null)
            {
                activity.Start = activity.End;
            }
            Repository.Edit(activity);
            SyncStrategy.SyncAcmanActivity(activity);
            return(activity);
        }
Esempio n. 12
0
        public Activity ContinueById(Guid id)
        {
            ICollection <Activity> activities = Repository.GetByStatus(ActivityStatus.InProgress);
            Activity activity = Repository.Get(id);

            activity.Status = ActivityStatus.InProgress;
            if (activity.Start == null || activity.Start > AcmanHelper.GetCurrentDateTime())
            {
                activity.Start = AcmanHelper.GetCurrentDateTime();
            }
            activities.ToList().ForEach(a => a.Status = ActivityStatus.InPause);
            activities.Add(activity);
            Repository.Edit(activities);
            SyncStrategy.SyncAcmanActivity(activities);
            return(activity);
        }
Esempio n. 13
0
 public BpmonlineSyncStrategy(
     UserRepository userRepository,
     ActivityRepository activityRepository,
     SynchronizationRepository synchronizationRepository,
     ActivityBpmOdataRepository activityBpmOdataRepository)
 {
     _userRepository     = userRepository;
     _activityRepository = activityRepository;
     _activityRepository.IsIntegration = true;
     _synchronizationRepository        = synchronizationRepository;
     _activityBpmOdataRepository       = activityBpmOdataRepository;
     _bpmonlineEndSystemId             = AcmanConstants.EndSystem.BpmonlineWorkTsi;
     _startDate = _synchronizationRepository.GetLastSyncDate();
     _endDate   = AcmanHelper.GetCurrentDateTime();
     _info      = string.Empty;
 }