public static QueryOver <Equipment> GetEquipmentAtDeliveryPointQuery(Counterparty client, DeliveryPoint deliveryPoint) { Equipment equipmentAlias = null; CounterpartyMovementOperation operationAlias = null; CounterpartyMovementOperation subsequentOperationAlias = null; var subsequentOperationsSubquery = QueryOver.Of <CounterpartyMovementOperation>(() => subsequentOperationAlias) .Where(() => operationAlias.Id < subsequentOperationAlias.Id && operationAlias.Equipment == subsequentOperationAlias.Equipment) .Select(op => op.Id); var availableEquipmentIDsSubquery = QueryOver.Of <CounterpartyMovementOperation>(() => operationAlias) .WithSubquery.WhereNotExists(subsequentOperationsSubquery) .Where(() => operationAlias.IncomingCounterparty.Id == client.Id); if (deliveryPoint != null) { availableEquipmentIDsSubquery .Where(() => operationAlias.IncomingDeliveryPoint.Id == deliveryPoint.Id); } availableEquipmentIDsSubquery .Select(op => op.Equipment.Id); return(QueryOver.Of <Equipment>(() => equipmentAlias).WithSubquery.WhereProperty(() => equipmentAlias.Id).In(availableEquipmentIDsSubquery)); }
public virtual void CreateOperation(Counterparty counterpartySrc, DeliveryPoint pointSrc, Counterparty counterpartyDst, DeliveryPoint pointDst, DateTime time) { WarehouseMovementOperation = null; CounterpartyMovementOperation = new CounterpartyMovementOperation { IncomingCounterparty = counterpartyDst, IncomingDeliveryPoint = pointDst, WriteoffCounterparty = counterpartySrc, WriteoffDeliveryPoint = pointSrc, Amount = Amount, OperationTime = time, Nomenclature = Nomenclature, Equipment = Equipment }; }
public override void UpdateNodes() { Nomenclature nomenclatureAlias = null; ClientEquipmentBalanceVMNode resultAlias = null; Counterparty counterpartyAlias = null; DeliveryPoint deliveryPointAlias = null; Equipment equipmentAlias = null; CounterpartyMovementOperation operationAlias = null; CounterpartyMovementOperation subsequentOperationAlias = null; var lastCouterpartyOp = UoW.Session.QueryOver <CounterpartyMovementOperation>(() => operationAlias) .JoinAlias(o => o.Equipment, () => equipmentAlias) .Where(o => o.Equipment != null); if (Filter.RestrictIncludeSold == false) { lastCouterpartyOp.Where(x => x.ForRent == true); } if (Filter.RestrictDeliveryPoint == null) { if (Filter.RestrictCounterparty != null) { lastCouterpartyOp.Where(x => x.IncomingCounterparty == Filter.RestrictCounterparty); } else { lastCouterpartyOp.Where(x => x.IncomingCounterparty != null); } } else { lastCouterpartyOp.Where(x => x.IncomingDeliveryPoint == Filter.RestrictDeliveryPoint); } if (Filter.RestrictNomenclature != null) { lastCouterpartyOp.Where(() => equipmentAlias.Nomenclature.Id == Filter.RestrictNomenclature.Id); } var subsequentOperationsSubquery = QueryOver.Of <CounterpartyMovementOperation> (() => subsequentOperationAlias) .Where(() => operationAlias.OperationTime < subsequentOperationAlias.OperationTime && operationAlias.Equipment == subsequentOperationAlias.Equipment) .Select(op => op.Id); lastCouterpartyOp.WithSubquery.WhereNotExists(subsequentOperationsSubquery); var resultList = lastCouterpartyOp .JoinAlias(o => o.IncomingCounterparty, () => counterpartyAlias) .JoinAlias(o => o.IncomingDeliveryPoint, () => deliveryPointAlias) .JoinAlias(() => equipmentAlias.Nomenclature, () => nomenclatureAlias) .SelectList(list => list .Select(() => equipmentAlias.Id).WithAlias(() => resultAlias.Id) .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName) .Select(() => counterpartyAlias.FullName).WithAlias(() => resultAlias.Client) .Select(() => deliveryPointAlias.CompiledAddress).WithAlias(() => resultAlias.Address) .Select(() => operationAlias.ForRent).WithAlias(() => resultAlias.IsOur) .Select(() => equipmentAlias.Id).WithAlias(() => resultAlias.SerialNumberInt) ) .OrderBy(x => x.OperationTime).Desc .TransformUsing(Transformers.AliasToBean <ClientEquipmentBalanceVMNode> ()) .List <ClientEquipmentBalanceVMNode> (); SetItemsSource(resultList); }
public virtual CounterpartyMovementOperation UpdateCounterpartyOperation() { var amount = Confirmed ? 1 : 0; if(amount == 0) { //FIXME Проверить может нужно удалять. CounterpartyMovementOperation = null; return null; } if (CounterpartyMovementOperation == null) { CounterpartyMovementOperation = new CounterpartyMovementOperation(); } CounterpartyMovementOperation.OperationTime = Order.DeliveryDate.Value.Date.AddHours(23).AddMinutes(59); CounterpartyMovementOperation.Amount = amount; CounterpartyMovementOperation.Nomenclature = Equipment.Nomenclature; CounterpartyMovementOperation.Equipment = Equipment; CounterpartyMovementOperation.ForRent = (Reason != Reason.Sale); if (Direction == Direction.Deliver) { CounterpartyMovementOperation.IncomingCounterparty = Order.Client; CounterpartyMovementOperation.IncomingDeliveryPoint = Order.DeliveryPoint; CounterpartyMovementOperation.WriteoffCounterparty = null; CounterpartyMovementOperation.WriteoffDeliveryPoint = null; } else { CounterpartyMovementOperation.WriteoffCounterparty = Order.Client; CounterpartyMovementOperation.WriteoffDeliveryPoint = Order.DeliveryPoint; CounterpartyMovementOperation.IncomingCounterparty = null; CounterpartyMovementOperation.IncomingDeliveryPoint = null; } return CounterpartyMovementOperation; }