/// <summary> /// Edit bucket property. Error if you attempt to edit an unfrozen wave /// </summary> /// <param name="bucket"></param> internal Bucket EditWave(Bucket bucket, EditBucketFlags flags, Bucket bucketOld) { if (bucket == null) { throw new ArgumentNullException("bucket"); } using (var trans = _repos.BeginTransaction()) { var bucketCurrent = _repos.GetLockedBucket(bucket.BucketId); if (bucketCurrent == null) { throw new ValidationException("Invalid Pick Wave" + bucket.BucketId.ToString()); } if (!bucketCurrent.IsFrozen) { throw new ValidationException("Only frozen Waves can be edited"); } if (!bucketCurrent.Equals(bucketOld)) { throw new ValidationException("Cannot edit. Bucket has been modified by someone else."); } var updatedWave = _repos.EditWave(bucket, flags); trans.Commit(); return(updatedWave); } }
/// <summary> /// Edit bucket property as Pull area , pitch area etc.. /// </summary> /// <param name="bucket"></param> /// <param name="flags"> </param> /// <returns>Updated bucket values. If the passed bucket does not exist, returns null.</returns> /// <remarks> /// </remarks> internal Bucket EditWave(Bucket bucket, EditBucketFlags flags) { if (flags == EditBucketFlags.None) { // Nothing to do return(bucket); } const string QUERY = @" UPDATE <proxy />BUCKET BKT SET <if c = '$NAME_FLAG'> BKT.NAME = :NAME, </if> <if c = '$PITCH_IA_ID_FLAG'> BKT.PITCH_IA_ID = :PITCH_IA_ID, </if> <if c = '$BUCKET_COMMENT_FLAG'> BKT.BUCKET_COMMENT = :BUCKET_COMMENT, </if> <if c = '$PRIORITY_FLAG'> BKT.PRIORITY = :PRIORITY, </if> <if c = '$PRIORITY_DELTA_FLAG'> BKT.PRIORITY = CASE WHEN GREATEST(NVL(BKT.PRIORITY, 0) + :PRIORITY, 1) > 99 THEN 99 ELSE GREATEST(NVL(BKT.PRIORITY, 0) + :PRIORITY, 1) END, </if> <if c = '$PULL_CARTON_AREA_FLAG'> BKT.PULL_CARTON_AREA = :PULL_CARTON_AREA, </if> <if c = '$PULL_TYPE_FLAG'> BKT.PULL_TO_DOCK = :PULL_TO_DOCK, </if> <if c = '$QUICK_PITCH_FLAG'> BKT.QUICK_PITCH_FLAG = :QUICK_PITCH, </if> <if c = '$PITCH_LIMIT_FLAG'> BKT.PITCH_LIMIT = :PITCH_LIMIT, </if> BKT.DATE_MODIFIED = SYSDATE WHERE BKT.BUCKET_ID = :BUCKET_ID RETURNING BKT.NAME, BKT.PITCH_IA_ID, BKT.BUCKET_COMMENT, BKT.PRIORITY, BKT.PULL_CARTON_AREA, BKT.PULL_TO_DOCK, BKT.QUICK_PITCH_FLAG, BKT.PITCH_LIMIT INTO :NAME_OUT, :PITCH_IA_ID_OUT, :BUCKET_COMMENT_OUT, :PRIORITY_OUT, :PULL_CARTON_AREA_OUT, :PULL_TO_DOCK_OUT, :QUICK_PITCH_FLAG_OUT, :PITCH_LIMIT_OUT"; var binder = SqlBinder.Create(); binder.Parameter("NAME", bucket.BucketName) .Parameter("PRIORITY", bucket.PriorityId) .Parameter("PULL_CARTON_AREA", bucket.Activities[BucketActivityType.Pulling].Area.AreaId) .Parameter("PITCH_IA_ID", bucket.Activities[BucketActivityType.Pitching].Area.AreaId) .Parameter("BUCKET_ID", bucket.BucketId) .Parameter("PULL_TO_DOCK", bucket.PullingBucket) .Parameter("QUICK_PITCH", bucket.QuickPitch ? "Y" : null) .Parameter("PITCH_LIMIT", bucket.PitchLimit) .Parameter("BUCKET_COMMENT", bucket.BucketComment); binder.ParameterXPath("NAME_FLAG", flags.HasFlag(EditBucketFlags.BucketName)); binder.ParameterXPath("PRIORITY_FLAG", flags.HasFlag(EditBucketFlags.Priority)); binder.ParameterXPath("PRIORITY_DELTA_FLAG", flags.HasFlag(EditBucketFlags.PriorityDelta)); binder.ParameterXPath("PULL_CARTON_AREA_FLAG", flags.HasFlag(EditBucketFlags.PullArea)); binder.ParameterXPath("PITCH_IA_ID_FLAG", flags.HasFlag(EditBucketFlags.PitchArea)); binder.ParameterXPath("BUCKET_COMMENT_FLAG", flags.HasFlag(EditBucketFlags.Remarks)); binder.ParameterXPath("PULL_TYPE_FLAG", flags.HasFlag(EditBucketFlags.PullType)); binder.ParameterXPath("QUICK_PITCH_FLAG", flags.HasFlag(EditBucketFlags.QuickPitch)); binder.ParameterXPath("PITCH_LIMIT_FLAG", flags.HasFlag(EditBucketFlags.PitchLimit)); binder.OutParameter("NAME_OUT", p => bucket.BucketName = p) .OutParameter("BUCKET_COMMENT_OUT", p => bucket.BucketComment = p) .OutParameter("PRIORITY_OUT", p => bucket.PriorityId = p ?? 0) .OutParameter("PITCH_LIMIT_OUT", p => bucket.PitchLimit = p ?? 0) //TODO .OutParameter("PULL_TO_DOCK_OUT", p => bucket.PullingBucket = p) .OutParameter("QUICK_PITCH_FLAG_OUT", p => bucket.QuickPitch = p == "Y"); binder.OutParameter("PITCH_IA_ID_OUT", p => { bucket.Activities[BucketActivityType.Pitching].Area.AreaId = p; }); binder.OutParameter("PULL_CARTON_AREA_OUT", p => { bucket.Activities[BucketActivityType.Pulling].Area.AreaId = p; }); int rows = _db.ExecuteDml(QUERY, binder); if (rows == 0) { // Invalid bucket id return(null); } return(bucket); }