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)); }
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); }
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>())); }