public DeleteCore DeleteEntity(Type clazz, int id, IUnitOfWork uow = null, Action beforeDeletion = null)
        {
            var deletion = new DeleteCore(configuration, uow);

            #region Подготовка удаления
            using (var cancellation = new CancellationTokenSource()) {
                var preparePage = navigation.OpenViewModel <PrepareDeletionViewModel, DeleteCore, CancellationTokenSource>(null, deletion, cancellation);
                deletion.PrepareDeletion(clazz, id, cancellation.Token);
                if (cancellation.IsCancellationRequested)
                {
                    return(deletion);
                }
                navigation.ForceClosePage(preparePage, CloseSource.External);
            }
            #endregion
            #region Диалог удаления
            if (deletion.TotalLinks > 0)
            {
                var deletionPage = navigation.OpenViewModel <DeletionViewModel, DeleteCore>(null, deletion);
                deletionPage.ViewModel.DeletionAccepted = () => RunDeletion(deletion);
            }
            else if (interactive.Question($"Удалить {deletion.RootEntity.Title}?"))
            {
                RunDeletion(deletion);
            }
            else
            {
                deletion.DeletionExecuted = false;
            }
            #endregion
            return(deletion);
        }
Esempio n. 2
0
        internal static bool RunDialog(DeleteCore core)
        {
            bool answer;
            int  countReferenceItems = ((IDeleteCore)core).CountReferenceItems;

            if (countReferenceItems > 0)
            {
                var fullDlg = new DeleteDlg(core.ObjectsTreeStore);
                if (countReferenceItems < 10)
                {
                    fullDlg.treeviewObjects.ExpandAll();
                }
                fullDlg.Title = String.Format("Удалить {0}?", core.DeletedItems [0].Title);
                answer        = (ResponseType)fullDlg.Run() == ResponseType.Yes;
                fullDlg.Destroy();
            }
            else
            {
                MessageDialog md = new MessageDialog(null, DialogFlags.Modal,
                                                     MessageType.Question,
                                                     ButtonsType.YesNo, "Вы уверены что хотите удалить <b>" + core.DeletedItems [0].Title + "</b>?");
                md.Title = String.Format("Удалить {0}?", core.DeletedItems [0].Title);

                answer = (ResponseType)md.Run() == ResponseType.Yes;
                md.Destroy();
            }
            return(answer);
        }
        public DeleteCore DeleteEntity(Type clazz, int id, IUnitOfWork uow = null, Action beforeDeletion = null)
        {
            var deletion = new DeleteCore(configuration, uow);

            deletion.BeforeDeletion = beforeDeletion;

            #region Подготовка удаления

            IPage <PrepareDeletionViewModel> preparePage = null;

            using (var cancellation = new CancellationTokenSource()) {
                try
                {
                    preparePage = navigation.OpenViewModel <PrepareDeletionViewModel, DeleteCore, CancellationTokenSource>(null, deletion, cancellation);
                    deletion.PrepareDeletion(clazz, id, cancellation.Token);
                    if (cancellation.IsCancellationRequested)
                    {
                        deletion.Close();
                        return(deletion);
                    }
                }
                finally
                {
                    if (preparePage != null)
                    {
                        navigation.ForceClosePage(preparePage, CloseSource.External);
                    }
                }
            }

            #endregion

            #region Диалог удаления
            if (deletion.TotalLinks > 0)
            {
                var deletionPage = navigation.OpenViewModel <DeletionViewModel, DeleteCore>(null, deletion);
                deletionPage.ViewModel.DeletionAccepted = () => RunDeletion(deletion);
                deletionPage.PageClosed += delegate(object sender, PageClosedEventArgs e) {
                    if (e.CloseSource != CloseSource.Self)
                    {
                        deletion.Close();
                    }
                };
            }
            else if (interactive.Question($"Удалить {deletion.RootEntity.Title}?"))
            {
                RunDeletion(deletion);
            }
            else
            {
                deletion.Close();
                deletion.DeletionExecuted = false;
            }
            #endregion
            return(deletion);
        }
Esempio n. 4
0
        public void HandleDelete_CanDeleteEmployeeTest()
        {
            var ask = Substitute.For <IInteractiveQuestion>();

            ask.Question(string.Empty).ReturnsForAnyArgs(true);

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot("Тест на обработку удаления сотрудника")) {
                BuisnessLogicGlobalEventHandler.Init(ask, UnitOfWorkFactory);

                var nomenclatureType = new ItemsType();
                nomenclatureType.Name = "Тестовый тип номенклатуры";
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature();
                nomenclature.Type = nomenclatureType;
                uow.Save(nomenclature);

                var protectionTools = new ProtectionTools();
                protectionTools.Name = "СИЗ для тестирования";
                protectionTools.AddNomeclature(nomenclature);
                uow.Save(protectionTools);

                var norm     = new Norm();
                var normItem = norm.AddItem(protectionTools);
                normItem.Amount      = 1;
                normItem.NormPeriod  = NormPeriodType.Month;
                normItem.PeriodCount = 2;
                uow.Save(norm);

                var employee = new EmployeeCard();
                uow.Save(employee);

                var warehouseOperation = new WarehouseOperation();
                var expenseOp          = new EmployeeIssueOperation();
                expenseOp.OperationTime      = warehouseOperation.OperationTime = new DateTime(2019, 1, 1);
                expenseOp.ExpiryByNorm       = new DateTime(2019, 4, 1);
                expenseOp.ProtectionTools    = protectionTools;
                expenseOp.Employee           = employee;
                expenseOp.Nomenclature       = warehouseOperation.Nomenclature = nomenclature;
                expenseOp.NormItem           = normItem;
                warehouseOperation.Amount    = expenseOp.Issued = 1;
                expenseOp.WarehouseOperation = warehouseOperation;
                uow.Save(nomenclature);
                uow.Save(normItem);
                uow.Save(warehouseOperation);
                uow.Save(expenseOp);
                uow.Commit();

                //FIXME Временно чтобы переделака не вызвала конфликт мержа в 2.4
                Configure.ConfigureDeletion();
                var deletion = new DeleteCore(DeleteConfig.Main, uow);
                deletion.PrepareDeletion(typeof(EmployeeCard), employee.Id, CancellationToken.None);
                deletion.RunDeletion(CancellationToken.None);
            }
        }
 private void RunDeletion(DeleteCore deletion)
 {
     using (var cancellation = new CancellationTokenSource()) {
         var progressPage = navigation.OpenViewModel <DeletionProcessViewModel, DeleteCore, CancellationTokenSource>(null, deletion, cancellation);
         deletion.RunDeletion(cancellation.Token);
         if (cancellation.IsCancellationRequested)
         {
             return;
         }
         navigation.ForceClosePage(progressPage, CloseSource.External);
     }
 }
Esempio n. 6
0
        public DeletionViewModel(INavigationManager navigation, DeleteCore deletion) : base(navigation)
        {
            this.Deletion = deletion;
            Title         = "Выполнить удаление?";

            var deleteNode = new TreeNode();

            deleteNode.CountedNode = false;
            FillObgectGroups(deleteNode, Deletion.DeletedItems);
            if (deleteNode.TotalChildCount > 0)
            {
                deleteNode.Title = NumberToTextRus.FormatCase(deleteNode.Childs.Count,
                                                              "Будут удалены объекты {0} вида",
                                                              "Будут удалены объекты {0} видов",
                                                              "Будут удалены объекты {0} видов");
                DeletedItems.Add(deleteNode);
            }

            var cleanNode = new TreeNode();

            cleanNode.CountedNode = false;
            FillObgectGroups(cleanNode, Deletion.CleanedItems);
            if (cleanNode.TotalChildCount > 0)
            {
                cleanNode.Title = NumberToTextRus.FormatCase(cleanNode.Childs.Count,
                                                             "Будут очищены ссылки в объектах {0} вида",
                                                             "Будут очищены ссылки в объектах {0} видов",
                                                             "Будут очищены ссылки в объектах {0} видов");
                DeletedItems.Add(cleanNode);
            }

            var removeNode = new TreeNode();

            removeNode.CountedNode = false;
            FillObgectGroups(removeNode, Deletion.CleanedItems);
            if (removeNode.TotalChildCount > 0)
            {
                removeNode.Title = NumberToTextRus.FormatCase(removeNode.Childs.Count,
                                                              "Будут очищены ссылки в коллекциях у {0} вида объектов",
                                                              "Будут очищены ссылки в коллекциях у {0} видов объектов",
                                                              "Будут очищены ссылки в коллекциях у {0} видов объектов");
                DeletedItems.Add(removeNode);
            }

            DeletedItems.Sort();

            var rootNode = FillTreeDependence(Deletion.RootEntity);

            DependenceTree.Add(rootNode);
        }
Esempio n. 7
0
        public static List <DeletionObject> GetDeletionObjects(Type objectClass, int id, IUnitOfWork uow = null)
        {
            var result = new List <DeletionObject>();
            var delete = new DeleteCore(DeleteConfig.Main, uow);

            delete.PrepareDeletion(objectClass, id, new System.Threading.CancellationTokenSource().Token);

            foreach (var item in delete.DeletedItems)
            {
                result.Add(new DeletionObject()
                {
                    Id = item.Id, Type = item.ClassType
                });
            }
            return(result);
        }
        public void Delete_NotFailWhenTryCleanPropertyOfDeletedInstanceTest()
        {
            //Тут очень важна последовательность конфига, окуратнее исправляйте тест.
            //Смысл теста в том, что через каскадное удаление объект в котором предполагалась очистка ссылки, удаляется перед, этим.
            // А в момент очистки ссылки он заново записывется, обычно с тем же ID, что в последствии вызывает различные проблемы,
            // например не возможно удалить объект, на который имеется ссылка из этого, или не удается этот записать, так как удален
            // тот на который мы ссылаемся. Повторюсь, мы не должны были его записывать.
            var delConfig = new DeleteConfiguration();

            delConfig.AddHibernateDeleteInfo <DependDeleteItem>()
            .AddDeleteCascadeDependence(x => x.CleanLink);
            delConfig.AddHibernateDeleteInfo <AlsoDeleteItem>()
            .AddClearDependence <DependDeleteItem>(x => x.CleanLink);
            delConfig.AddHibernateDeleteInfo <RootDeleteItem>()
            .AddDeleteDependence <DependDeleteItem>(x => x.DeleteLink)
            .AddDeleteDependence <AlsoDeleteItem>(x => x.Root);

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var root  = new RootDeleteItem();
                var item1 = new AlsoDeleteItem()
                {
                    Root = root
                };
                var item2 = new DependDeleteItem()
                {
                    DeleteLink = root,
                    CleanLink  = item1
                };

                uow.Save(root);
                uow.Save(item1);
                uow.Save(item2);
                uow.Commit();

                var deletion     = new DeleteCore(delConfig, uow);
                var cancellation = new System.Threading.CancellationToken();
                deletion.PrepareDeletion(typeof(RootDeleteItem), root.Id, cancellation);
                Assert.That(deletion.ItemsToDelete, Is.EqualTo(3));

                deletion.RunDeletion(cancellation);
                Assert.That(deletion.DeletionExecuted, Is.EqualTo(true));

                var dependDeleteItems = uow.GetAll <DependDeleteItem>().ToList();
                Assert.That(dependDeleteItems.Count, Is.EqualTo(0));
            }
        }
 public PrepareDeletionViewModel(DeleteCore deletion, INavigationManager navigation, CancellationTokenSource cancellation = null) : base(navigation)
 {
     this.Deletion     = deletion ?? throw new ArgumentNullException(nameof(deletion));
     this.cancellation = cancellation;
     Title             = "Подготовка к удалению";
 }
Esempio n. 10
0
 public DeletionProcessViewModel(INavigationManager navigation, DeleteCore deletion, CancellationTokenSource cancellation = null) : base(navigation)
 {
     this.Deletion     = deletion ?? throw new ArgumentNullException(nameof(deletion));
     this.cancellation = cancellation;
     Title             = "Удаление";
 }
Esempio n. 11
0
        public void Deletion_ExpenseEmployeeDocumentTest()
        {
            NewSessionWithSameDB();
            var ask = Substitute.For <IInteractiveQuestion>();

            ask.Question(string.Empty).ReturnsForAnyArgs(true);
            var navigation = Substitute.For <INavigationManager>();

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                var warehouse = new Warehouse();
                uow.Save(warehouse);

                var nomenclatureType = new ItemsType {
                    Name = "Тестовый тип номенклатуры"
                };
                uow.Save(nomenclatureType);

                var nomenclature = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature);

                var position1 = new StockPosition(nomenclature, 0, null, null);

                var nomenclature2 = new Nomenclature {
                    Type = nomenclatureType
                };
                uow.Save(nomenclature2);

                var position2 = new StockPosition(nomenclature2, 0, null, null);

                var protectionTools = new ProtectionTools {
                    Name = "СИЗ для тестирования"
                };
                protectionTools.AddNomeclature(nomenclature);
                uow.Save(protectionTools);

                var protectionTools2 = new ProtectionTools {
                    Name = "СИЗ для тестирования 2"
                };
                protectionTools2.AddNomeclature(nomenclature2);
                uow.Save(protectionTools2);

                var norm     = new Norm();
                var normItem = norm.AddItem(protectionTools);
                normItem.Amount      = 1;
                normItem.NormPeriod  = NormPeriodType.Year;
                normItem.PeriodCount = 1;
                var normItem2 = norm.AddItem(protectionTools2);
                normItem2.Amount      = 1;
                normItem2.NormPeriod  = NormPeriodType.Month;
                normItem2.PeriodCount = 1;
                uow.Save(norm);

                var employee = new EmployeeCard();
                employee.AddUsedNorm(norm);
                uow.Save(employee);
                uow.Commit();

                var income = new Income {
                    Warehouse = warehouse,
                    Date      = new DateTime(2017, 1, 1),
                    Operation = IncomeOperations.Enter
                };
                var incomeItem1 = income.AddItem(nomenclature);
                incomeItem1.Amount = 10;
                var incomeItem2 = income.AddItem(nomenclature2);
                incomeItem2.Amount = 5;
                income.UpdateOperations(uow, ask);
                uow.Save(income);

                var expense = new Expense {
                    Operation = ExpenseOperations.Employee,
                    Warehouse = warehouse,
                    Employee  = employee,
                    Date      = new DateTime(2018, 10, 22)
                };
                expense.AddItem(position1, 1);
                expense.AddItem(position2, 1);

                var baseParameters = Substitute.For <BaseParameters>();
                baseParameters.ColDayAheadOfShedule.Returns(0);

                expense.CreateIssuanceSheet(null);

                //Обновление операций
                expense.UpdateOperations(uow, baseParameters, ask);
                uow.Save(expense);
                uow.Save(expense.IssuanceSheet);
                uow.Commit();

                expense.UpdateEmployeeWearItems();
                uow.Commit();

                var docs = uow.GetAll <Expense>().ToList();
                Assert.That(docs.Count, Is.EqualTo(1));

                //Непосредственно удаление документа
                var cancel = new CancellationTokenSource();
                using (var uowDel = UnitOfWorkFactory.CreateWithoutRoot()) {
                    var deletionService = new DeleteCore(DeleteConfig.Main, uowDel);
                    deletionService.PrepareDeletion(typeof(Expense), expense.Id, cancel.Token);
                    Assert.That(deletionService.TotalLinks, Is.GreaterThan(0));
                    deletionService.RunDeletion(cancel.Token);
                }

                //Проверяем удаление
                var expenseId = expense.Id;
                using (var uowCheck = UnitOfWorkFactory.CreateWithoutRoot()) {
                    //Проверяем что удалили документ.
                    docs = uow.GetAll <Expense>().ToList();
                    Assert.That(docs.Count, Is.Zero);

                    //Проверяем что случайно не удалили СИЗ и номеклатуру.
                    var protections = uow.GetAll <ProtectionTools>().ToList();
                    Assert.That(protections.Count, Is.EqualTo(2));
                    var nomenclatures = uow.GetAll <Nomenclature>().ToList();
                    Assert.That(nomenclatures.Count, Is.EqualTo(2));
                }
            }
        }