private void UpdateIndicatorsForWriteoffWaybill(WriteoffWaybill waybill, short sign) { articleMovementFactualFinancialIndicatorService.Update(waybill.WriteoffDate.Value, waybill.Sender.Id, waybill.SenderStorage.Id, null, null, ArticleMovementOperationType.Writeoff, waybill.Id, sign * waybill.PurchaseCostSum, sign * (waybill.SenderAccountingPriceSum ?? 0), 0); }
public void Init() { storage = new Storage("Тестовое место хранения", StorageType.DistributionCenter) { Id = 1 }; writeoffReason = new WriteoffReason("Тестовая причина списания") { Id = 2 }; var juridicalLegalForm = new LegalForm("ООО", EconomicAgentType.JuridicalPerson) { Id = 3 }; var juridicalPerson = new JuridicalPerson(juridicalLegalForm) { Id = 4 }; var juridicalPerson2 = new JuridicalPerson(juridicalLegalForm) { Id = 15 }; accountOrganization = new AccountOrganization("Тестовое юридическое лицо", "Тестовое юридическое лицо", juridicalPerson) { Id = 5 }; var provider = new Provider("Тестовый поставщик", new ProviderType("Тестовый тип поставщика"), ProviderReliability.Medium, 5) { Id = 6 }; var providerOrganization = new ProviderOrganization("Организация поставщика", "Организация поставщика", juridicalPerson2); var articleGroup = new ArticleGroup("Тестовая группа", "Тестовая группа"); var measureUnit = new MeasureUnit("шт.", "Штука", "123", 0) { Id = 1 }; var customDeclarationNumber = new String('0', 25); article = new Article("Тестовый товар А", articleGroup, measureUnit, true); providerContract = new ProviderContract(accountOrganization, providerOrganization, "Договор", "4645", DateTime.Now, DateTime.Now); provider.AddProviderContract(providerContract); user = new User(new Employee("Иван", "Иванов", "Иванович", new EmployeePost("Менеджер"), null), "Иванов Иван", "ivanov", "pa$$w0rd", new Team("Тестовая команда", null), null); receiptWaybill = new ReceiptWaybill("123АБВ", DateTime.Today.AddDays(1), storage, accountOrganization, provider, 1234.5M, 0M, new ValueAddedTax("18%", 18), providerContract, customDeclarationNumber, user, user, DateTime.Now); receiptWaybillRow = new ReceiptWaybillRow(article, 100, 1234.5M, receiptWaybill.PendingValueAddedTax); receiptWaybill.AddRow(receiptWaybillRow); writeoffWaybill = new WriteoffWaybill("123", DateTime.Today, storage, accountOrganization, writeoffReason, user, user, DateTime.Now); priceLists = new List <ArticleAccountingPrice>() { new ArticleAccountingPrice(article, 10M) }; }
public void WriteoffWaybill_Must_Throw_Exception_If_WriteoffReason_Is_Null() { try { var wb = new WriteoffWaybill("123", DateTime.Today, storage, accountOrganization, null, user, user, DateTime.Now); Assert.Fail("Исключение не вызвано."); } catch (Exception ex) { Assert.AreEqual("Не указано основание для списания.", ex.Message); } }
public void WriteoffWaybill_Must_Throw_Exception_If_SenderStorage_Is_Null() { try { var wb = new WriteoffWaybill("123", DateTime.Today, null, accountOrganization, writeoffReason, user, user, DateTime.Now); Assert.Fail("Исключение не вызвано."); } catch (Exception ex) { Assert.AreEqual("Не указано место хранения отправителя.", ex.Message); } }
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) }); }
public void WaybillFinalizationCancelled(WriteoffWaybill waybill) { articleMovementOperationCountIndicatorService.DecrementIndicator(waybill.WriteoffDate.Value, ArticleMovementOperationType.Writeoff, waybill.SenderStorage.Id); }
/// <summary> /// Пересчет финансовых показателей после отмены отгрузки товара по накладной списания /// </summary> /// <param name="waybill">Накладная списания</param> public void WriteoffWaybillWriteoffCancelled(WriteoffWaybill waybill) { UpdateIndicatorsForWriteoffWaybill(waybill, -1); }
/// <summary> /// Пересчет финансовых показателей после отгрузки товара по накладной списания /// </summary> /// <param name="waybill">Накладная списания</param> public void WriteoffWaybillWrittenOff(WriteoffWaybill waybill) { UpdateIndicatorsForWriteoffWaybill(waybill, 1); }
public WriteoffWaybillMainIndicators GetMainIndicators(WriteoffWaybill waybill, User user, bool calculateReceivelessProfit = false) { var ind = new WriteoffWaybillMainIndicators(); var allowToViewPurchaseCost = user.HasPermission(Permission.PurchaseCost_View_ForEverywhere); var allowToViewAccPrice = user.HasPermissionToViewStorageAccountingPrices(waybill.SenderStorage); if (waybill.IsAccepted) { ind.SenderAccountingPriceSum = allowToViewAccPrice ? waybill.SenderAccountingPriceSum : (decimal?)null; if (calculateReceivelessProfit) { ind.ReceivelessProfitSum = allowToViewPurchaseCost && allowToViewAccPrice ? waybill.ReceivelessProfitSum : (decimal?)null; ind.ReceivelessProfitPercent = allowToViewPurchaseCost && allowToViewAccPrice ? waybill.ReceivelessProfitPercent : (decimal?)null; } } else { var storage = waybill.SenderStorage; var purchaseCostSum = allowToViewPurchaseCost ? waybill.PurchaseCostSum : (decimal?)null; ind.SenderAccountingPriceSum = allowToViewAccPrice ? (decimal?)0 : null; var senderAccountingPrices = new DynamicDictionary <int, decimal?>(); if (allowToViewAccPrice) { senderAccountingPrices = articlePriceService.GetAccountingPrice(storage.Id, writeoffWaybillRepository.GetArticlesSubquery(waybill.Id)); } foreach (var row in waybill.Rows) { if (allowToViewAccPrice) { var senderAccountingPrice = senderAccountingPrices[row.Article.Id]; ind.SenderAccountingPriceSum += senderAccountingPrice.Value * row.WritingoffCount; } } if (allowToViewAccPrice) { ind.SenderAccountingPriceSum = Math.Round(ind.SenderAccountingPriceSum.Value, 2); } if (calculateReceivelessProfit) { if (allowToViewAccPrice && allowToViewPurchaseCost) { ind.ReceivelessProfitSum = ind.SenderAccountingPriceSum.Value - purchaseCostSum; ind.ReceivelessProfitPercent = purchaseCostSum != 0M ? ind.ReceivelessProfitSum / purchaseCostSum * 100M : 0M; } else { ind.ReceivelessProfitPercent = null; ind.ReceivelessProfitSum = null; } } } return(ind); }
/// <summary> /// Расчет основных показателей для коллекции позиций накладной списания /// </summary> /// <param name="rowsToGetIndicators">Список позиций накладной, для которых необходимо расчитать показатели</param> /// <param name="rowsToGetIndicatorsArticleSubquery">Подзапрос для товаров из позиций накладной, для которых необходимо расчитать показатели</param> private IDictionary <Guid, WriteoffWaybillRowMainIndicators> GetMainIndicatorsForRowList(WriteoffWaybill waybill, IEnumerable <WriteoffWaybillRow> rowsToGetIndicators, ISubQuery rowsToGetIndicatorsArticleSubquery, User user) { var result = new Dictionary <Guid, WriteoffWaybillRowMainIndicators>(); var allowToViewAccPrices = user.HasPermissionToViewStorageAccountingPrices(waybill.SenderStorage); // список УЦ для переданных позиций var accountingPrices = new DynamicDictionary <int, decimal?>(); if (allowToViewAccPrices && !waybill.IsAccepted) { accountingPrices = articlePriceService.GetAccountingPrice(waybill.SenderStorage.Id, rowsToGetIndicatorsArticleSubquery); } foreach (var row in rowsToGetIndicators) { var ind = new WriteoffWaybillRowMainIndicators(); if (waybill.IsAccepted) { ind.SenderAccountingPrice = allowToViewAccPrices ? row.SenderArticleAccountingPrice.AccountingPrice : (decimal?)null; } else { ind.SenderAccountingPrice = allowToViewAccPrices ? accountingPrices[row.Article.Id] : (decimal?)null; } result.Add(row.Id, ind); } return(result); }
/// <summary> /// Расчет основных показателей для всех позиций накладной списания /// </summary> public IDictionary <Guid, WriteoffWaybillRowMainIndicators> GetMainRowsIndicators(WriteoffWaybill waybill, User user) { return(GetMainIndicatorsForRowList(waybill, waybill.Rows, writeoffWaybillRepository.GetArticlesSubquery(waybill.Id), user)); }