public void UpdateOperations_SubdivisionWriteoffOperation_CanChangeWearPercentTest()
        {
            var uow = Substitute.For <IUnitOfWork>();

            var nomeclature = Substitute.For <Nomenclature>();

            var subdivision = Substitute.For <Subdivision>();

            var issueOperation = new SubdivisionIssueOperation {
                OperationTime = new DateTime(2019, 1, 1),
                StartOfUse    = new DateTime(2019, 1, 1),
                Issued        = 10,
                Nomenclature  = nomeclature,
                WearPercent   = 0,
                ExpiryOn      = new DateTime(2019, 1, 15),
                Subdivision   = subdivision
            };

            var writeoff = new Writeoff {
                Date = new DateTime(2019, 1, 15)
            };

            writeoff.AddItem(issueOperation, 2);

            Assert.That(writeoff.Items[0].WearPercent, Is.EqualTo(1));
            //Меняем значение процента износа
            writeoff.Items[0].WearPercent = 2;

            //Выполняем
            writeoff.UpdateOperations(uow);

            Assert.That(writeoff.Items[0].WearPercent, Is.EqualTo(2));
        }
Exemple #2
0
        public virtual void AddItem(SubdivisionIssueOperation operation, int count)
        {
            if (operation.Issued == 0)
            {
                throw new InvalidOperationException("Этот метод можно использовать только с операциями выдачи.");
            }

            if (Items.Any(p => DomainHelper.EqualDomainObjects(p.SubdivisionWriteoffOperation?.IssuedOperation, operation)))
            {
                logger.Warn("Номенклатура из этой выдачи уже добавлена. Пропускаем...");
                return;
            }

            ObservableItems.Add(new WriteoffItem(this, operation, count));
        }
        public static IList <SubdivisionRecivedInfo> ItemsBalance(IUnitOfWork uow, Subdivision subdivision)
        {
            if (subdivision.Id == 0)            //Если подразделение не сохранено возвращаем пустой лист.
            {
                return(new List <SubdivisionRecivedInfo>());
            }

            SubdivisionRecivedInfo resultAlias = null;

            SubdivisionIssueOperation subdivisionIssueOperationAlias = null;
            Nomenclature     nomenclatureAlias     = null;
            ItemsType        itemsTypeAlias        = null;
            MeasurementUnits measurementUnitsAlias = null;
            SubdivisionPlace subdivisionPlaceAlias = null;

            IProjection projection = Projections.Sum(Projections.SqlFunction(
                                                         new SQLFunctionTemplate(NHibernateUtil.Int32, "IFNULL(?1, 0) - IFNULL(?2, 0)"),
                                                         NHibernateUtil.Int32,
                                                         Projections.Property <SubdivisionIssueOperation>(x => x.Issued),
                                                         Projections.Property <SubdivisionIssueOperation>(x => x.Returned)
                                                         ));

            var incomeList = uow.Session.QueryOver <SubdivisionIssueOperation>(() => subdivisionIssueOperationAlias)
                             .Where(x => x.Subdivision == subdivision)
                             .JoinAlias(() => subdivisionIssueOperationAlias.Nomenclature, () => nomenclatureAlias)
                             .JoinAlias(() => nomenclatureAlias.Type, () => itemsTypeAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                             .JoinAlias(() => itemsTypeAlias.Units, () => measurementUnitsAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                             .JoinAlias(() => subdivisionIssueOperationAlias.SubdivisionPlace, () => subdivisionPlaceAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                             .SelectList(list => list
                                         .SelectGroup(() => nomenclatureAlias.Id).WithAlias(() => resultAlias.NomenclatureId)
                                         .SelectGroup(() => subdivisionIssueOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent)
                                         .SelectGroup(() => subdivisionIssueOperationAlias.SubdivisionPlace.Id).WithAlias(() => resultAlias.PlaceId)
                                         .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomeclatureName)
                                         .Select(() => subdivisionPlaceAlias.Name).WithAlias(() => resultAlias.Place)
                                         .SelectMax(() => subdivisionIssueOperationAlias.OperationTime).WithAlias(() => resultAlias.LastReceive)
                                         .Select(projection).WithAlias(() => resultAlias.Amount)
                                         )
                             .Where(Restrictions.Gt(projection, 0))
                             .TransformUsing(Transformers.AliasToBean <SubdivisionRecivedInfo>())
                             .List <SubdivisionRecivedInfo>();

            return(incomeList);
        }
Exemple #4
0
        public IQueryOver <SubdivisionIssueOperation> ItemsQuery(IUnitOfWork unitOfWork)
        {
            SubdivisionBalanceJournalNode resultAlias         = null;
            SubdivisionIssueOperation     issueOperationAlias = null;
            Nomenclature              nomenclatureAlias       = null;
            ItemsType                 itemTypesAlias          = null;
            MeasurementUnits          unitsAlias = null;
            SubdivisionIssueOperation removeIssueOperationAlias = null;
            WarehouseOperation        warehouseOperationAlias   = null;
            Subdivision               subdivisionAlias          = null;

            var expense = unitOfWork.Session.QueryOver(() => issueOperationAlias);

            if (Filter.Subdivision != null)
            {
                expense.Where(e => e.Subdivision == Filter.Subdivision);
            }

            var subQueryRemove = QueryOver.Of(() => removeIssueOperationAlias)
                                 .Where(() => removeIssueOperationAlias.IssuedOperation == issueOperationAlias)
                                 .Select(Projections.Sum <SubdivisionIssueOperation>(o => o.Returned));

            var balance = Projections.SqlFunction(
                new SQLFunctionTemplate(NHibernateUtil.Int32, "( IFNULL(?1, 0) - IFNULL(?2, 0) )"),
                NHibernateUtil.Int32,
                Projections.Property(() => issueOperationAlias.Issued),
                Projections.SubQuery(subQueryRemove));

            if (Filter.Subdivision != null)
            {
                expense
                .JoinAlias(() => issueOperationAlias.Nomenclature, () => nomenclatureAlias)
                .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias)
                .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias)
                .JoinAlias(() => issueOperationAlias.WarehouseOperation, () => warehouseOperationAlias)
                .JoinAlias(() => issueOperationAlias.Subdivision, () => subdivisionAlias)
                .Where(e => e.AutoWriteoffDate == null || e.AutoWriteoffDate > Filter.Date)
                .Where(Restrictions.Not(Restrictions.Eq(balance, 0)))
                .SelectList(list => list
                            .SelectGroup(() => issueOperationAlias.Id).WithAlias(() => resultAlias.Id)
                            .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName)
                            .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName)
                            .Select(() => issueOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent)
                            .Select(() => issueOperationAlias.OperationTime).WithAlias(() => resultAlias.IssuedDate)
                            .Select(() => issueOperationAlias.ExpiryOn).WithAlias(() => resultAlias.ExpiryDate)
                            .Select(() => subdivisionAlias.Name).WithAlias(() => resultAlias.SubdivisionName)
                            .Select(balance).WithAlias(() => resultAlias.Balance));
            }
            else
            {
                expense
                .JoinAlias(() => issueOperationAlias.Nomenclature, () => nomenclatureAlias)
                .JoinAlias(() => nomenclatureAlias.Type, () => itemTypesAlias)
                .JoinAlias(() => itemTypesAlias.Units, () => unitsAlias)
                .JoinAlias(() => issueOperationAlias.WarehouseOperation, () => warehouseOperationAlias)
                .JoinAlias(() => issueOperationAlias.Subdivision, () => subdivisionAlias)
                .Where(e => e.AutoWriteoffDate == null || e.AutoWriteoffDate > Filter.Date)
                .Where(Restrictions.Not(Restrictions.Eq(balance, 0)))
                .SelectList(list => list
                            .Select(() => issueOperationAlias.Id).WithAlias(() => resultAlias.Id)
                            .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName)
                            .Select(() => unitsAlias.Name).WithAlias(() => resultAlias.UnitsName)
                            .Select(() => issueOperationAlias.WearPercent).WithAlias(() => resultAlias.WearPercent)
                            .Select(() => issueOperationAlias.OperationTime).WithAlias(() => resultAlias.IssuedDate)
                            .Select(() => issueOperationAlias.ExpiryOn).WithAlias(() => resultAlias.ExpiryDate)
                            .Select(() => subdivisionAlias.Name).WithAlias(() => resultAlias.SubdivisionName)
                            .Select(balance).WithAlias(() => resultAlias.Balance));
                expense = expense.OrderBy(() => subdivisionAlias.Name).Asc;
            }
            return(expense.TransformUsing(Transformers.AliasToBean <SubdivisionBalanceJournalNode>()));
        }