public virtual ActionResult AddPickslipsOfDim(int?bucketId, string customerId,
                                                      PickslipDimension groupDimIndex, DimensionValue groupDimVal,
                                                      PickslipDimension subgroupDimIndex, DimensionValue subgroupDimVal,
                                                      string vwhId)
        {
            if (string.IsNullOrWhiteSpace(customerId))
            {
                throw new ArgumentNullException("customerId");
            }
            if (string.IsNullOrWhiteSpace(vwhId))
            {
                throw new ArgumentNullException("vwhId");
            }

            using (var trans = _service.Value.BeginTransaction())
            {
                // If bucket is not created.create it first.
                if (bucketId == null)
                {
                    //Now Create bucket
                    bucketId = _service.Value.CreateDefaultWave();
                    AddStatusMessage(string.Format("Pick Wave {0} created.", bucketId));
                }
                // Add pickslip to bucket
                _service.Value.AddPickslipsPerDim(bucketId.Value, customerId,
                                                  groupDimIndex,
                                                  groupDimVal, subgroupDimIndex, subgroupDimVal, vwhId);
                trans.Commit();
            }
            AddStatusMessage(string.Format("Pickslips added to Pick Wave {0}", bucketId));

            return(RedirectToAction(Actions.Index(customerId, groupDimIndex, subgroupDimIndex,
                                                  vwhId, bucketId, groupDimVal)));
        }
 public void AddPickslipsPerDim(int bucketId, string customerId,
                                PickslipDimension dimRow, DimensionValue dimRowVal,
                                PickslipDimension dimCol, DimensionValue dimColVal, string vwhId)
 {
     _repos.AddPickslipsPerDim(bucketId, customerId, new[] {
         Tuple.Create(dimRow, dimRowVal),
         Tuple.Create(dimCol, dimColVal)
     }, vwhId, false);
 }
        public virtual ActionResult AddPickslipsToBucket(int?bucketId, long[] pickslips, string customerId, PickslipDimension groupDimIndex,
                                                         DimensionValue GroupDimVal, PickslipDimension subgroupDimIndex, DimensionValue subgroupDimVal, string vwhId)
        {
            if (pickslips == null || pickslips.Length == 0)
            {
                AddStatusMessage("Please select pickslip.");
            }
            else
            {
                using (var trans = _service.Value.BeginTransaction())
                {
                    if (bucketId == null)
                    {
                        bucketId = _service.Value.CreateDefaultWave();
                        AddStatusMessage(string.Format("New PickWave {1} created", pickslips.Length, bucketId));
                    }

                    _service.Value.AddPickslipsToWave(bucketId.Value, pickslips);
                    trans.Commit();
                    AddStatusMessage(string.Format("{0} pickslips have been added to PickWave {1}", pickslips.Length, bucketId));
                }
            }
            return(RedirectToAction(this.Actions.PickslipList(customerId, groupDimIndex, GroupDimVal, subgroupDimIndex, subgroupDimVal, vwhId, bucketId)));
        }
Example #4
0
        /// <summary>
        /// For the passed customer and vwh, groups results by col1 and returns a row for each unique value of col1.
        /// Each row contains an array of pickslip counts for each unique value of col2
        /// </summary>
        /// <param name="customerId">Supmmary of pickslip counts and pieces ordered are required for this customer</param>
        /// <param name="vwhId">Consider only those orders of this vwhId</param>
        /// <param param name="col1">First Group by column</param>
        /// <param name="col2">Second Group by column</param>
        /// <returns>Item1 is a list of rows for each unique value of col1. Item2 is number of pickslips per dimension</returns>
        /// <remarks>
        /// If too many rows for the dimension are returned, then null is returned. If no rows are returned for the dimension, and empty collection is returned.
        /// Thus null is different from empty.
        /// </remarks>
        internal CustomerOrderSummary GetOrderSummaryForCustomer(string customerId, string vwhId, PickslipDimension col1, PickslipDimension col2)
        {
            if (string.IsNullOrWhiteSpace(customerId))
            {
                throw new ArgumentNullException("customerId");
            }
            if (string.IsNullOrWhiteSpace(vwhId))
            {
                throw new ArgumentNullException("vwhId");
            }
            if (col1 == PickslipDimension.NotSet)
            {
                throw new ArgumentOutOfRangeException("col1");
            }
            if (col2 == PickslipDimension.NotSet)
            {
                throw new ArgumentOutOfRangeException("col2");
            }
            var dimMap = new Dictionary <PickslipDimension, Tuple <string, Type> >
            {
                { PickslipDimension.Priority, Tuple.Create("LPAD(T.PRIORITY_ID, 10)", typeof(string)) },
                { PickslipDimension.CustomerStore, Tuple.Create("T.CUSTOMER_STORE_ID", typeof(string)) },
                { PickslipDimension.CustomerDcCancelDate, Tuple.Create("TRUNC(T.DC_CANCEL_DATE)", typeof(DateTime)) },
                { PickslipDimension.Label, Tuple.Create("T.PICKSLIP_TYPE", typeof(string)) },
                { PickslipDimension.ImportDate, Tuple.Create("TRUNC(T.PICKSLIP_IMPORT_DATE)", typeof(DateTime)) },
                { PickslipDimension.StartDate, Tuple.Create("TRUNC(T.DELIVERY_DATE)", typeof(DateTime)) },
                { PickslipDimension.CancelDate, Tuple.Create("TRUNC(T.CANCEL_DATE)", typeof(DateTime)) },
                { PickslipDimension.CustomerOrderType, Tuple.Create("t.CUSTOMER_ORDER_TYPE", typeof(string)) },
                { PickslipDimension.SaleTypeId, Tuple.Create("T.SALES_TYPE_ID", typeof(string)) },
                { PickslipDimension.PurchaseOrder, Tuple.Create("T.CUSTOMER_ORDER_ID", typeof(string)) },
                { PickslipDimension.CustomerDc, Tuple.Create("T.CUSTOMER_DIST_CENTER_ID", typeof(string)) }
            };
            const string QUERY = @"
         WITH Q1 AS
             (SELECT t.PICKSLIP_ID,
                    T.TOTAL_QUANTITY_ORDERED,
                     {0} AS PICKSLIP_DIMENSION,
                     {1} AS DIM_COL,
                     {2}
                FROM <proxy />DEM_PICKSLIP T
               WHERE T.PS_STATUS_ID = 1
                 AND T.CUSTOMER_ID = :CUSTOMER_ID
             AND T.VWH_ID = :VWH_ID)
            SELECT PICKSLIP_DIMENSION, {3}, CAST(DIM_COL_XML AS VARCHAR2(4000)) AS DIM_COL_XML
              FROM Q1 PIVOT XML(COUNT(PICKSLIP_ID) AS PICKSLIP_COUNT,SUM(Q1.TOTAL_QUANTITY_ORDERED) AS ORDER_COUNT FOR DIM_COL IN(ANY))
             ORDER BY PICKSLIP_DIMENSION
        ";

            var query = string.Format(QUERY,
                                      dimMap[col1].Item1,                                                                                                       //{0}
                                      dimMap[col2].Item1,                                                                                                       //{1}
                                      string.Join(", ", dimMap.Select(p => string.Format("COUNT(UNIQUE {0}) OVER() AS {1}", p.Value.Item1, p.Key.ToString()))), //{2}
                                      string.Join(", ", dimMap.Select(p => p.Key.ToString()))                                                                   //{3}
                                      );

            /* The value of query will look something like this
             * WITH Q1 AS
             * (SELECT t.PICKSLIP_ID,
             * T.TOTAL_QUANTITY_ORDERED,
             * TRUNC(T.DC_CANCEL_DATE) AS PICKSLIP_DIMENSION,
             * T.CUSTOMER_DIST_CENTER_ID AS DIM_COL,
             * COUNT(UNIQUE LPAD(T.PRIORITY_ID, 10)) OVER() AS Priority,
             * COUNT(UNIQUE T.CUSTOMER_STORE_ID) OVER() AS CustomerStore,
             * COUNT(UNIQUE TRUNC(T.DC_CANCEL_DATE)) OVER() AS CustomerDcCancelDate,
             * COUNT(UNIQUE T.PICKSLIP_TYPE) OVER() AS Label,
             * COUNT(UNIQUE TRUNC(T.PICKSLIP_IMPORT_DATE)) OVER() AS ImportDate,
             * COUNT(UNIQUE TRUNC(T.DELIVERY_DATE)) OVER() AS StartDate,
             * COUNT(UNIQUE TRUNC(T.CANCEL_DATE)) OVER() AS CancelDate,
             * COUNT(UNIQUE t.CUSTOMER_ORDER_TYPE) OVER() AS CustomerOrderType,
             * COUNT(UNIQUE T.SALES_TYPE_ID) OVER() AS SaleTypeId,
             * COUNT(UNIQUE T.CUSTOMER_ORDER_ID) OVER() AS PurchaseOrder,
             * COUNT(UNIQUE T.CUSTOMER_DIST_CENTER_ID) OVER() AS CustomerDc
             * FROM DEM_PICKSLIP T
             * WHERE T.PS_STATUS_ID = 1
             * AND T.CUSTOMER_ID = :CUSTOMER_ID
             * AND T.VWH_ID = :VWH_ID)
             * SELECT *
             * FROM Q1 PIVOT XML(COUNT(PICKSLIP_ID) AS PICKSLIP_COUNT, SUM(Q1.TOTAL_QUANTITY_ORDERED) AS ORDER_COUNT FOR DIM_COL IN(ANY))
             * ORDER BY PICKSLIP_DIMENSION
             */

            var result = new CustomerOrderSummary();

            var binder = SqlBinder.Create(row =>
            {
                if (result.CountValuesPerDimension == null)
                {
                    result.CountValuesPerDimension = new Dictionary <PickslipDimension, int>();
                    foreach (var item in dimMap)
                    {
                        result.CountValuesPerDimension.Add(item.Key, row.GetInteger(item.Key.ToString()) ?? 0);
                    }
                }
                return(MapOrderSummaryXml3(dimMap[col1].Item2 == typeof(DateTime) ? (object)row.GetDate("pickslip_dimension") : (object)row.GetString("pickslip_dimension"),
                                           row.GetString("DIM_COL_XML"), dimMap[col2].Item2 == typeof(DateTime)));
            });

            binder.Parameter("CUSTOMER_ID", customerId)
            .Parameter("VWH_ID", vwhId)
            ;
            var rows = _db.ExecuteReader(query, binder);

            result.AllValues3.AddRange(rows.SelectMany(p => p));
            return(result);
        }
Example #5
0
        /// <summary>
        /// Returns the where clause corresponding to the passed dimension
        /// </summary>
        /// <param name="dim"></param>
        /// <param name="dimVal"></param>
        /// <returns></returns>
        /// <remarks>
        /// The where clause assumes that the alias of the dem_pickslip table is DEMPS.
        /// </remarks>
        private string GetDimensionWhereClause(PickslipDimension dim, object dimVal)
        {
            if (dimVal == null)
            {
                throw new ArgumentNullException("dimVal");
            }
            string clause;

            switch (dim)
            {
            case PickslipDimension.Priority:
                clause = "DEMPS.PRIORITY_ID = :{0}";
                break;

            case PickslipDimension.CustomerStore:
                clause = "DEMPS.CUSTOMER_STORE_ID = :{0}";
                break;

            case PickslipDimension.Label:
                clause = "DEMPS.Pickslip_Type = :{0}";
                break;

            case PickslipDimension.ImportDate:
                clause = "(DEMPS.PICKSLIP_IMPORT_DATE &gt;= TRUNC(CAST(:{0} AS DATE)) AND DEMPS.PICKSLIP_IMPORT_DATE &lt; TRUNC(CAST(:{0} AS DATE))  + 1)";
                break;

            case PickslipDimension.StartDate:
                clause = "(DEMPS.DELIVERY_DATE &gt;= TRUNC(CAST(:{0} AS DATE)) AND DEMPS.DELIVERY_DATE &lt; TRUNC(CAST(:{0} AS DATE))  + 1)";
                break;

            case PickslipDimension.CancelDate:
                clause = "(DEMPS.CANCEL_DATE &gt;= TRUNC(CAST(:{0} AS DATE)) AND DEMPS.CANCEL_DATE &lt; TRUNC(CAST(:{0} AS DATE))  + 1)";

                break;

            case PickslipDimension.CustomerOrderType:
                clause = "DEMPS.CUSTOMER_ORDER_TYPE = :{0}";
                break;

            case PickslipDimension.SaleTypeId:
                clause = "DEMPS.SALES_TYPE_ID = :{0}";
                break;

            case PickslipDimension.PurchaseOrder:
                clause = "DEMPS.CUSTOMER_ORDER_ID = :{0}";
                break;

            case PickslipDimension.CustomerDcCancelDate:
                clause = "(DEMPS.DC_CANCEL_DATE &gt;= TRUNC(CAST(:{0} AS DATE)) AND DEMPS.DC_CANCEL_DATE &lt; TRUNC(CAST(:{0} AS DATE))  + 1)";
                break;

            case PickslipDimension.CustomerDc:
                clause = "DEMPS.CUSTOMER_DIST_CENTER_ID = :{0}";
                break;

            default:
                throw new NotImplementedException();
            }
            clause = string.Format(clause, dim.ToString());
            return(clause);
        }
Example #6
0
 /// <summary>
 /// Special handling priority to provide numeric sort
 /// </summary>
 /// <param name="customerId"></param>
 /// <param name="vwhId"> </param>
 /// <param name="dimRow"> </param>
 /// <param name="dimCol"> </param>
 /// <returns></returns>
 /// <remarks>
 /// If too many rows for the dimension are returned, then null is returned. If no rows are returned for the dimension, and empty collection is returned.
 /// Thus null is different from empty.
 /// </remarks>
 internal CustomerOrderSummary GetOrderSummary(string customerId, string vwhId, PickslipDimension dimRow, PickslipDimension dimCol)
 {
     return(_repos.GetOrderSummaryForCustomer(customerId, vwhId, dimRow, dimCol));
 }
Example #7
0
 public IEnumerable <Pickslip> GetPickslipList(string customerId, string vwhId, PickslipDimension dimRow, string dimRowVal, PickslipDimension dimCol, string dimColVal)
 {
     return(_repos.GetPickslips(customerId, vwhId, new[] { Tuple.Create(dimRow, (object)dimRowVal), Tuple.Create(dimCol, (object)dimColVal) }));
 }
        public virtual ActionResult PickslipList(
            [Required]
            string customerId,
            PickslipDimension groupDimIndex,
            [Required]
            DimensionValue groupDimVal,
            PickslipDimension subgroupDimIndex,
            [Required]
            DimensionValue subgroupDimVal,
            [Required]
            string vwhId,
            int?bucketId)
        {
            if (string.IsNullOrWhiteSpace(customerId))
            {
                throw new ArgumentNullException("customerId");
            }
            if (string.IsNullOrWhiteSpace(vwhId))
            {
                throw new ArgumentNullException("vwhId");
            }
            //if (string.IsNullOrWhiteSpace(groupDimVal))
            //{
            //    throw new ArgumentNullException("rowDimVal");
            //}
            //if (string.IsNullOrWhiteSpace(subgroupDimVal))
            //{
            //    throw new ArgumentNullException("colDimVal");
            //}
            var model = new PickslipListViewModel();

            model.CustomerId       = customerId;
            model.GroupDimIndex    = groupDimIndex;
            model.SubgroupDimIndex = subgroupDimIndex;
            model.VwhId            = vwhId;
            model.GroupDimVal      = groupDimVal;
            model.SubgroupDimVal   = subgroupDimVal;
            // Pickslip list of passed dimension.
            var pickslips = _service.Value.GetPickslipList(model.CustomerId, model.VwhId, model.GroupDimIndex, model.GroupDimVal, model.SubgroupDimIndex, model.SubgroupDimVal);

            model.PickslipList = (from pickslip in pickslips
                                  let routePickslip = Url.RouteCollection[DcmsLibrary.Mvc.PublicRoutes.DcmsConnect_SearchPickslipImported1]
                                                      // let routePickslip = Url.RouteCollection[DcmsLibrary.Mvc.PublicRoutes.DcmsConnect_SearchPickslip1]
                                                      let routePo = Url.RouteCollection[DcmsLibrary.Mvc.PublicRoutes.DcmsConnect_SearchPoImported3]
                                                                    select new CreateWavePickslipModel(pickslip)
            {
                UrlInquiryPickslip = routePickslip == null ? null : Url.RouteUrl(DcmsLibrary.Mvc.PublicRoutes.DcmsConnect_SearchPickslipImported1, new
                {
                    id = pickslip.PickslipId
                }),
                UrlInquiryPurchaseOrder = routePo == null ? null : Url.RouteUrl(DcmsLibrary.Mvc.PublicRoutes.DcmsConnect_SearchPoImported3, new
                {
                    id = pickslip.PurchaseOrder,
                    pk1 = pickslip.CustomerId,
                    pk2 = pickslip.Iteration
                })
            }).ToArray();
            model.ManagerRoleName = ROLE_WAVE_MANAGER;

            model.GroupDimDisplayName    = PickWaveHelpers.GetEnumMemberAttributes <PickslipDimension, DisplayAttribute>()[model.GroupDimIndex].Name;
            model.SubgroupDimDisplayName = PickWaveHelpers.GetEnumMemberAttributes <PickslipDimension, DisplayAttribute>()[model.SubgroupDimIndex].Name;
            model.GroupDimVal            = model.GroupDimVal;
            model.CustomerName           = _service.Value.GetCustomerName(customerId);

            model.BucketId = bucketId;

            if (model.BucketId.HasValue)
            {
                var bucket = _service.Value.GetBucket(model.BucketId.Value);
                model.Bucket = new BucketModel(bucket, _service.Value.GetCustomerName(customerId), BucketModelFlags.Default);
            }
            return(View(Views.PickslipList, model));
        }
        public virtual ActionResult Index(string customerId,
                                          PickslipDimension groupDimIndex    = PickslipDimension.NotSet,
                                          PickslipDimension subgroupDimIndex = PickslipDimension.NotSet,
                                          string vwhId               = null,
                                          int?lastBucketId           = null,
                                          DimensionValue groupDimVal = default(DimensionValue))
        {
            if (string.IsNullOrWhiteSpace(customerId))
            {
                throw new NotImplementedException();
            }

            var model = new IndexViewModel
            {
                GroupDimVal = groupDimVal
            };

            //Showing only those area where order of customer are available.
            //var areas = _service.Value.GetAreasForCustomer(customerId);



            #region Manage Cookie
            //  SelectedDimension : If null, then a reasonable default is used. The default is cookie => factory default
            //  If non null, then it is used and written to a cookie.
            var cookie = Request.Cookies[COOKIE_PICKWAVE];

            if (groupDimIndex == PickslipDimension.NotSet || subgroupDimIndex == PickslipDimension.NotSet)
            {
                // Read cookie
                int dimRowIndex, dimColIndex;
                if (cookie != null && cookie[COOKIE_ROW_DIMENSION] != null && int.TryParse(cookie[COOKIE_ROW_DIMENSION], out dimRowIndex) &&
                    int.TryParse(cookie[COOKIE_COL_DIMENSION], out dimColIndex))
                {
                    model.GroupDimIndex    = (PickslipDimension)dimRowIndex;
                    model.SubgroupDimIndex = (PickslipDimension)dimColIndex;
                }
                else
                {
                    // Factory defaults
                    model.GroupDimIndex    = PickslipDimension.CustomerDcCancelDate;
                    model.SubgroupDimIndex = PickslipDimension.CustomerDc;
                }
            }
            else
            {
                model.GroupDimIndex    = groupDimIndex;
                model.SubgroupDimIndex = subgroupDimIndex;
                // Write cookie
                if (cookie == null)
                {
                    cookie = new HttpCookie(COOKIE_PICKWAVE)
                    {
                        Expires = DateTime.Now.AddDays(7)
                    };
                    cookie.Values.Add(COOKIE_ROW_DIMENSION, model.GroupDimIndex.ToString());
                    cookie.Values.Add(COOKIE_COL_DIMENSION, model.SubgroupDimIndex.ToString());
                }
                else
                {
                    if (cookie[COOKIE_ROW_DIMENSION] != null)
                    {
                        cookie.Values.Set(COOKIE_ROW_DIMENSION, model.GroupDimIndex.ToString());
                    }
                    if (cookie[COOKIE_COL_DIMENSION] != null)
                    {
                        cookie.Values.Set(COOKIE_COL_DIMENSION, model.SubgroupDimIndex.ToString());
                    }
                }
                HttpContext.Response.Cookies.Add(cookie);
            }

            #endregion

            model.CustomerId = customerId;

            //var cust = _service.Value.GetCustomer(model.CustomerId);
            model.CustomerName = _service.Value.GetCustomerName(model.CustomerId);


            // Make sure that selected row and dimension are within the bounds of their respective drop downs
            if (!PopulatePickslipMatrixPartialModel(model))
            {
                AddStatusMessage("No more pickslips available to add");
                if (lastBucketId.HasValue)
                {
                    return(RedirectToAction(MVC_PickWaves.PickWaves.ManageWaves.WavePickslips(lastBucketId.Value)));
                }
                else
                {
                    return(RedirectToAction(Actions.Index(customerId, groupDimIndex, subgroupDimIndex, vwhId, lastBucketId, groupDimVal)));
                }
            }



            // If Bucket is created.
            if (lastBucketId.HasValue)
            {
                // Retrive some information of bucket.
                model.LastBucketId = lastBucketId;
                var bucket = _service.Value.GetPickWave(model.LastBucketId.Value);
                if (bucket != null)
                {
                    model.PullAreaShortName  = bucket.PullAreaShortName;
                    model.PitchAreaShortName = bucket.PitchAreaShortName;
                    model.PickslipCount      = bucket.PickslipCount;
                }
            }
            return(View(Views.Index, model));
        }