private static void SaveTaskChanges(SavingTask task)
        {
            var document = XDocument.Load(task.FilePath);

            foreach (var entityToDelete in task.EntitiesToDelete)
            {
                if (TryRemoveElementFromParentById(document, PersistenceConstants.Categories, entityToDelete))
                {
                    continue;
                }
                if (TryRemoveElementFromParentById(document, PersistenceConstants.StandingOrders, entityToDelete))
                {
                    continue;
                }
                TryRemoveElementFromParentById(document, PersistenceConstants.Requests, entityToDelete);
            }

            foreach (var categoryEntity in task.CategoriesToUpdate)
            {
                UpdateElementInParent(document, PersistenceConstants.Categories, categoryEntity.PersistentId, categoryEntity.Serialize());
            }
            foreach (var requestEntity in task.RequestsToUpdate)
            {
                UpdateElementInParent(document, PersistenceConstants.Requests, requestEntity.PersistentId, requestEntity.Serialize());
            }
            foreach (var standingOrderEntity in task.StandingOrdersToUpdate)
            {
                UpdateElementInParent(document, PersistenceConstants.StandingOrders, standingOrderEntity.PersistentId, standingOrderEntity.Serialize());
            }

            document.Save(task.FilePath);
        }
        public string[] UpdateStandingOrdersToCurrentMonth()
        {
            var currentMonthLastDay = _applicationContext.Now.Date.LastDayOfMonth();
            var standingOrdersToUpdate = _allStandingOrders.Where(r => r.FirstBookDate.Date <= currentMonthLastDay).ToList();

            var task = new SavingTask(FilePath);

            var newCreatedRequestsEntityIds = new List<string>();

            foreach(var standingOrder in standingOrdersToUpdate)
            {
                var bookDate = standingOrder.GetNextPaymentDateTime();
                while(bookDate != null && bookDate.Value <= currentMonthLastDay)
                {
                    var newRequest = standingOrder.CreateRequest(bookDate.Value);
                    _allRequests.Add(newRequest);
                    newCreatedRequestsEntityIds.Add(newRequest.PersistentId);
                    standingOrder.LastBookedDate = bookDate.Value;
                    bookDate = standingOrder.GetNextPaymentDateTime();

                    task.RequestsToUpdate.Add(newRequest.Clone());
                }
                task.StandingOrdersToUpdate.Add(standingOrder.Clone());
            }

            _persistenceHandler.SaveChanges(task);

            return newCreatedRequestsEntityIds.ToArray();
        }
        private static void SaveTaskChanges(SavingTask task)
        {
            var document = XDocument.Load(task.FilePath);

            foreach (var entityToDelete in task.EntitiesToDelete)
            {
                if (TryRemoveElementFromParentById(document, PersistenceConstants.Categories, entityToDelete)) continue;
                if (TryRemoveElementFromParentById(document, PersistenceConstants.StandingOrders, entityToDelete)) continue;
                TryRemoveElementFromParentById(document, PersistenceConstants.Requests, entityToDelete);
            }

            foreach (var categoryEntity in task.CategoriesToUpdate)
            {
                UpdateElementInParent(document, PersistenceConstants.Categories, categoryEntity.PersistentId, categoryEntity.Serialize());
            }
            foreach (var requestEntity in task.RequestsToUpdate)
            {
                UpdateElementInParent(document, PersistenceConstants.Requests, requestEntity.PersistentId, requestEntity.Serialize());
            }
            foreach (var standingOrderEntity in task.StandingOrdersToUpdate)
            {
                UpdateElementInParent(document, PersistenceConstants.StandingOrders, standingOrderEntity.PersistentId, standingOrderEntity.Serialize());
            }

            document.Save(task.FilePath);
        }
        public string[] UpdateStandingOrdersToCurrentMonth(int year, int month)
        {
            var currentMonthLastDay    = new DateTime(year, month, 1).LastDayOfMonth();
            var standingOrdersToUpdate = _allStandingOrders.Where(r => r.FirstBookDate.Date <= currentMonthLastDay).ToList();

            var task = new SavingTask(FilePath);

            var newCreatedRequestsEntityIds = new List <string>();

            foreach (var standingOrder in standingOrdersToUpdate)
            {
                var bookDate = standingOrder.GetNextPaymentDateTime();
                while (bookDate != null && bookDate.Value <= currentMonthLastDay)
                {
                    var newRequest = standingOrder.CreateRequest(bookDate.Value);
                    _allRequests.Add(newRequest);
                    newCreatedRequestsEntityIds.Add(newRequest.PersistentId);
                    standingOrder.LastBookedDate = bookDate.Value;
                    bookDate = standingOrder.GetNextPaymentDateTime();

                    task.RequestsToUpdate.Add(newRequest.Clone());
                }
                task.StandingOrdersToUpdate.Add(standingOrder.Clone());
            }

            _persistenceHandler.SaveChanges(task);

            return(newCreatedRequestsEntityIds.ToArray());
        }
 public void SaveChanges(SavingTask task)
 {
     lock (_lockObject)
     {
         _tasksToWork.Enqueue(task);
     }
     if (!_isWorkerThreadRunning)
     {
         _isWorkerThreadRunning = true;
         ThreadPool.QueueUserWorkItem(OnWorkTasks);
     }
 }
 public void SaveChanges(SavingTask task)
 {
     lock (_lockObject)
     {
         _tasksToWork.Enqueue(task);
     }
     if (!_isWorkerThreadRunning)
     {
         _isWorkerThreadRunning = true;
         ThreadPool.QueueUserWorkItem(OnWorkTasks);
     }
 }
        public void DeleteCategory(string persistentId)
        {
            EnsureRepositoryOpen("CreateRequest");

            var savingTask = new SavingTask(FilePath);

            var categoryEntityImp = _allCategories.Single(r => r.PersistentId == persistentId);
            _allCategories.Remove(categoryEntityImp);
            savingTask.EntitiesToDelete.Add(categoryEntityImp.PersistentId);

            foreach (var request in _allRequests.Where(r => r.Category != null && r.Category.PersistentId == categoryEntityImp.PersistentId))
            {
                request.Category = null;
                savingTask.RequestsToUpdate.Add(request.Clone());
            }

            _persistenceHandler.SaveChanges(savingTask);
        }
Esempio n. 8
0
        public void DeleteCategory(string persistentId)
        {
            EnsureRepositoryOpen("CreateRequest");

            var savingTask = new SavingTask(FilePath);

            var categoryEntityImp = _allCategories.Single(r => r.PersistentId == persistentId);

            _allCategories.Remove(categoryEntityImp);
            savingTask.EntitiesToDelete.Add(categoryEntityImp.PersistentId);

            foreach (var request in _allRequests.Where(r => r.Category != null && r.Category.PersistentId == categoryEntityImp.PersistentId))
            {
                request.Category = null;
                savingTask.RequestsToUpdate.Add(request.Clone());
            }

            _persistenceHandler.SaveChanges(savingTask);
        }