Exemple #1
0
        public void CheckPossibilityToDeleteRow(WriteoffWaybillRow waybillRow, User user)
        {
            // права
            CheckPermissionToPerformOperation(waybillRow.WriteoffWaybill, user, Permission.WriteoffWaybill_Delete_Row_Delete);

            // сущность
            waybillRow.CheckPossibilityToDelete();
        }
Exemple #2
0
 /// <summary>
 /// Расчет основных показателей для одной позиции накладной списания
 /// </summary>
 public WriteoffWaybillRowMainIndicators GetMainRowIndicators(WriteoffWaybillRow row, User user)
 {
     return(GetMainIndicatorsForRowList(row.WriteoffWaybill, new List <WriteoffWaybillRow>()
     {
         row
     },
                                        articleRepository.GetArticleSubQuery(row.Article.Id),
                                        user)[row.Id]);
 }
        public void WriteoffWaybill_Attempt_To_PrepareToAccept_Must_Set_ReadyToAcceptState()
        {
            var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

            writeoffWaybill.AddRow(writeoffWaybillRow);

            writeoffWaybill.PrepareToAccept();

            Assert.AreEqual(WriteoffWaybillState.ReadyToAccept, writeoffWaybill.State);
        }
        public void WriteoffWaybill_Attempt_To_Accept_From_Draft_If_Use_ReadyToAcceptState_Is_Access_Must_Be_Ok()
        {
            var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

            writeoffWaybill.AddRow(writeoffWaybillRow);

            writeoffWaybill.Accept(priceLists, false, user, DateTime.Now);

            Assert.AreNotEqual(WriteoffWaybillState.Draft, writeoffWaybill.State);
        }
        public void WriteoffWaybill_Last_Row_Deletion_Must_Be_Ok()
        {
            var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

            writeoffWaybill.AddRow(writeoffWaybillRow);
            writeoffWaybill.DeleteRow(writeoffWaybillRow);

            Assert.AreEqual(0, writeoffWaybill.RowCount);
            Assert.AreEqual(WriteoffWaybillState.Draft, writeoffWaybill.State);
        }
Exemple #6
0
        public void DeleteRow(WriteoffWaybill waybill, WriteoffWaybillRow row, User user)
        {
            CheckPossibilityToDeleteRow(row, user);

            if (row.IsUsingManualSource)
            {
                articleMovementService.ResetManualSources(row);
            }

            waybill.DeleteRow(row);
        }
        public void WriteoffWaybill_Attempt_To_CancelReadinessToAccept_Must_Set_DraftState()
        {
            var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

            writeoffWaybill.AddRow(writeoffWaybillRow);

            writeoffWaybill.PrepareToAccept();

            writeoffWaybill.CancelReadinessToAccept();

            Assert.AreEqual(WriteoffWaybillState.Draft, writeoffWaybill.State);
        }
        public void WriteoffWaybill_Attempt_To_CancelAcceptance_If_Use_ReadyToAcceptState_Is_Denied_Must_Set_ReadyToAcceptState()
        {
            var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

            writeoffWaybill.AddRow(writeoffWaybillRow);

            writeoffWaybill.Accept(priceLists, false, user, DateTime.Now);

            writeoffWaybill.CancelAcceptance(true);

            Assert.AreEqual(WriteoffWaybillState.ReadyToAccept, writeoffWaybill.State);
        }
Exemple #9
0
        public bool IsPossibilityToDeleteRow(WriteoffWaybillRow waybillRow, User user)
        {
            try
            {
                CheckPossibilityToDeleteRow(waybillRow, user);

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Exemple #10
0
        private void AddRowLocal(WriteoffWaybill waybill, WriteoffWaybillRow row, IEnumerable <WaybillRowManualSource> sourceDistributionInfo, User user)
        {
            CheckPossibilityToEdit(waybill, user);

            waybill.AddRow(row);

            writeoffWaybillRepository.Save(waybill);

            if (sourceDistributionInfo != null)
            {
                articleMovementService.SetManualSources(row, sourceDistributionInfo);
            }
        }
        public void WriteoffWaybillRow_If_WritingoffCount_Is_Null_On_Creation_Must_Throw()
        {
            try
            {
                var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, -50);

                Assert.Fail("Исключение не вызвано.");
            }
            catch (Exception ex)
            {
                Assert.AreEqual("Количество списываемого товара должно быть положительным числом.", ex.Message);
            }
        }
        public void WriteoffWaybillRow_If_ReceiptWaybillRow_Is_Null_On_Creation_Must_Throw()
        {
            try
            {
                var writeoffWaybillRow = new WriteoffWaybillRow(null, 50);

                Assert.Fail("Исключение не вызвано.");
            }
            catch (Exception ex)
            {
                Assert.AreEqual("Не указана партия товара.", ex.Message);
            }
        }
        public void WriteoffWaybill_Repeat_By_Batch_And_Article_Row_Addition_Must_Throw_Exception()
        {
            try
            {
                var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

                writeoffWaybill.AddRow(writeoffWaybillRow);
                writeoffWaybill.AddRow(writeoffWaybillRow);

                Assert.Fail("Исключение не вызвано.");
            }
            catch (Exception ex)
            {
                Assert.AreEqual("Позиция накладной по данной партии и товару уже добавлена.", ex.Message);
            }
        }
        public void WriteoffWaybill_RePrepareToAccept_Must_Throw_Exception()
        {
            try
            {
                var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);
                writeoffWaybill.AddRow(writeoffWaybillRow);

                writeoffWaybill.PrepareToAccept();

                writeoffWaybill.PrepareToAccept();
            }
            catch (Exception ex)
            {
                Assert.AreEqual("Невозможно подготовить к проводке накладную со статусом «Готово к проводке».", ex.Message);
            }
        }
Exemple #15
0
        /// <summary>
        /// Упрощенное добавление позиции в накладную
        /// </summary>
        /// <param name="waybill">Накладная</param>
        /// <param name="article">Товар</param>
        /// <param name="count">Кол-во резервируемого товара</param>
        /// <param name="user">Пользователь</param>
        public void AddRowSimply(WriteoffWaybill waybill, Article article, decimal count, User user)
        {
            CheckPossibilityToEdit(waybill, user);

            // распределяем кол-во товара по партиям
            var countDistributionInfo = DistributeCountByBatches(article, waybill.SenderStorage, waybill.Sender, count);

            var batchList = receiptWaybillService.GetRows(countDistributionInfo.Keys);

            foreach (var item in countDistributionInfo)
            {
                var batch = batchList[item.Key];
                var row   = new WriteoffWaybillRow(batch, item.Value);

                AddRow(waybill, row, user);
            }
        }
        public void WriteoffWaybill_Attempt_To_Accept_From_Draft_If_Use_ReadyToAcceptState_Is_Denied_Must_Throw_Exception()
        {
            try
            {
                var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

                writeoffWaybill.AddRow(writeoffWaybillRow);

                writeoffWaybill.Accept(priceLists, true, user, DateTime.Now);

                Assert.Fail("Исключение не вызвано.");
            }
            catch (Exception ex)
            {
                Assert.AreEqual(String.Format("Невозможно провести накладную из состояния «{0}».", writeoffWaybill.State.GetDisplayName()), ex.Message);
            }
        }
        public void WriteoffWaybill_Attempt_To_Writeoff_If_Not_ReadyToWriteoff_Must_Throw_Exception()
        {
            try
            {
                var writeoffWaybillRow = new WriteoffWaybillRow(receiptWaybillRow, 50);

                writeoffWaybill.AddRow(writeoffWaybillRow);

                writeoffWaybill.Accept(priceLists, false, user, DateTime.Now);
                writeoffWaybill.Writeoff(user, DateTime.Now);

                Assert.Fail("Исключение не вызвано.");
            }
            catch (Exception ex)
            {
                Assert.AreEqual(String.Format("Невозможно списать товары по накладной со статусом «{0}».", writeoffWaybill.State.GetDisplayName()), ex.Message);
            }
        }
 public OutgoingWaybillRow ConvertToOutgoingWaybillRow(WriteoffWaybillRow row)
 {
     return(new OutgoingWaybillRow()
     {
         Batch = row.ReceiptWaybillRow,
         Count = row.WritingoffCount,
         Id = row.Id,
         Sender = row.WriteoffWaybill.Sender,
         SenderStorage = row.WriteoffWaybill.SenderStorage,
         State = row.OutgoingWaybillRowState,
         Type = WaybillType.WriteoffWaybill,
         WaybillDate = row.WriteoffWaybill.Date,
         WaybillId = row.WriteoffWaybill.Id,
         WaybillNumber = row.WriteoffWaybill.Number,
         SenderAccountingPrice = row.SenderArticleAccountingPrice != null ? row.SenderArticleAccountingPrice.AccountingPrice : 0,
         AreSourcesDetermined = row.AreSourcesDetermined,
         AcceptanceDate = row.WriteoffWaybill.AcceptanceDate,
         FinalizationDate = row.WriteoffWaybill.WriteoffDate
     });
 }
 public void SaveRow(WriteoffWaybillRow entity)
 {
     CurrentSession.SaveOrUpdate(entity);
 }
Exemple #20
0
 public void SaveRow(WriteoffWaybill waybill, WriteoffWaybillRow row, User user)
 {
     SaveRowLocal(waybill, row, null, user);
 }
Exemple #21
0
 public void SaveRow(WriteoffWaybill waybill, WriteoffWaybillRow row, IEnumerable <WaybillRowManualSource> sourceDistributionInfo, User user)
 {
     SaveRowLocal(waybill, row, sourceDistributionInfo, user);
 }
Exemple #22
0
        public void Init()
        {
            // инициализация IoC
            IoCInitializer.Init();

            setting = new Setting()
            {
                UseReadyToAcceptStateForWriteOffWaybill = false
            };
            settingRepository = Mock.Get(IoCContainer.Resolve <ISettingRepository>());
            settingRepository.Setup(x => x.Get()).Returns(setting);

            storage = new Storage("qwe", StorageType.ExtraStorage)
            {
                Id = 42
            };
            accOrgSender = new Mock <AccountOrganization>();
            accOrgSender.Setup(x => x.Id).Returns(1);
            accOrgRecipient = new Mock <AccountOrganization>();
            accOrgRecipient.Setup(x => x.Id).Returns(2);

            valueAddedTax = new ValueAddedTax();
            user          = new Mock <User>();
            user.Setup(x => x.GetPermissionDistributionType(It.IsAny <Permission>())).Returns(PermissionDistributionType.All);
            createdBy = new Mock <User>();
            createdBy.Setup(x => x.GetPermissionDistributionType(It.IsAny <Permission>())).Returns(PermissionDistributionType.All);
            acceptedBy = new Mock <User>();
            acceptedBy.Setup(x => x.GetPermissionDistributionType(It.IsAny <Permission>())).Returns(PermissionDistributionType.All);

            var articleGroup = new ArticleGroup("Тестовая группа", "Тестовая группа");
            var measureUnit  = new MeasureUnit("шт.", "Штука", "123", 0)
            {
                Id = 1
            };

            articleA = new Article("Тестовый товар A", articleGroup, measureUnit, true)
            {
                Id = 1
            };

            receiptWaybillRow = new Mock <ReceiptWaybillRow>();
            receiptWaybillRow.Setup(x => x.Article).Returns(articleA);

            articleAccountingPrice = new List <ArticleAccountingPrice>()
            {
                new ArticleAccountingPrice(articleA, 100)
            };

            writeoffWaybillRepository = Mock.Get(IoCContainer.Resolve <IWriteoffWaybillRepository>());
            articleRepository         = Mock.Get(IoCContainer.Resolve <IArticleRepository>());
            articlePriceService       = Mock.Get(IoCContainer.Resolve <IArticlePriceService>());
            articlePriceService.Setup(x => x.GetArticleAccountingPrices(It.Is <short>(y => y == storage.Id), It.IsAny <IEnumerable <int> >())).Returns(articleAccountingPrice);
            articlePriceService.Setup(x => x.GetArticleAccountingPrices(It.Is <short>(y => y == storage.Id), It.IsAny <ISubQuery>(), It.IsAny <DateTime>())).Returns(articleAccountingPrice);

            articleAvailabilityService = Mock.Get(IoCContainer.Resolve <IArticleAvailabilityService>());

            articleMovementService = Mock.Get(IoCContainer.Resolve <IArticleMovementService>());

            receiptWaybillService = Mock.Get(IoCContainer.Resolve <IReceiptWaybillService>());

            articleRevaluationService = Mock.Get(IoCContainer.Resolve <IArticleRevaluationService>());

            factualFinancialArticleMovementService = new Mock <IFactualFinancialArticleMovementService>();

            articleMovementOperationCountService = new Mock <IArticleMovementOperationCountService>();

            storageRepository = Mock.Get(IoCContainer.Resolve <IStorageRepository>());

            userRepository = Mock.Get(IoCContainer.Resolve <IUserRepository>());

            writeoffWaybillService = new WriteoffWaybillService(settingRepository.Object, writeoffWaybillRepository.Object,
                                                                storageRepository.Object, userRepository.Object,
                                                                articleMovementService.Object,
                                                                articlePriceService.Object,
                                                                factualFinancialArticleMovementService.Object, articleMovementOperationCountService.Object, articleAvailabilityService.Object,
                                                                receiptWaybillService.Object, articleRevaluationService.Object);

            waybill = new WriteoffWaybill("123", DateTime.Now, storage, accOrgSender.Object,
                                          new WriteoffReason(), user.Object, createdBy.Object, DateTime.Now);

            WriteoffWaybillRow row = new WriteoffWaybillRow(receiptWaybillRow.Object, 10);

            waybill.AddRow(row);

            articleMovementService.Setup(x => x.CancelArticleAcceptance(It.IsAny <WriteoffWaybill>()))
            .Returns(new List <OutgoingWaybillRowSourceReservationInfo>()
            {
                new OutgoingWaybillRowSourceReservationInfo(row.Id, 1, 1)
            });
            articleMovementService.Setup(x => x.AcceptArticles(It.IsAny <WriteoffWaybill>()))
            .Returns(new List <OutgoingWaybillRowSourceReservationInfo>()
            {
                new OutgoingWaybillRowSourceReservationInfo(row.Id, 1, 1)
            });
        }