예제 #1
0
 /// <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);
     }
 }
예제 #2
0
        /// <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);
        }