public async Task <ActionResult> ImportDataFromExcell(FormCollection form)
        {
            var file = Request.Files["postedFile"];

            if (file != null && file.ContentLength > 0)
            {
                // extract only the fielname
                var fileName = Path.GetFileName(file.FileName);
                // TODO: need to define destination
                var path = Path.Combine(Server.MapPath("~/AttachmentFilesForFolder"), fileName);
                file.SaveAs(path);
                var table = _excellService.ReadExcellToDataTable(path, false);

                List <DateTime> dateList = new List <DateTime>();

                if (table != null)
                {
                    var createDates = table.Rows[0].ItemArray.Cast <string>().Where(i => !String.IsNullOrEmpty(i) && i != "Date").ToList();

                    for (int i = 0; i < createDates.Count(); i++)
                    {
                        DateTime createDate;

                        DateTime.TryParseExact(createDates[i], "d-MMM-yy", CultureInfo.CurrentCulture, DateTimeStyles.None,
                                               out createDate);

                        for (int j = 2; j < table.Rows.Count; j++)
                        {
                            for (int k = (i * 3) + 1; k <= (i + 1) * 3; k++)
                            {
                                PlanShiftHardCodeType shift;

                                Enum.TryParse(table.Rows[1].ItemArray[k].ToString().Replace(" ", ""), out shift);

                                PlanLineHardCodeType line = GetLineType(table.Rows[j].ItemArray[0].ToString());

                                var Result = await _productPlanningService.GetProductPlanningByDateAndShiftAndLine(createDate,
                                                                                                                   shift, line);

                                if (Result == null)
                                {
                                    var item = new ProductPlanning()
                                    {
                                        Result      = table.Rows[j].ItemArray[k].ToString(),
                                        CreatedDate = createDate,
                                        UpdatedDate = DateTime.Now,
                                        Line        = line,
                                        Shift       = shift,
                                        ProductName = table.Rows[j].ItemArray[k].ToString()
                                    };
                                    await _productPlanningService.CreateAsync(item);
                                }
                                else
                                {
                                    //update
                                    Result.Result      = table.Rows[j].ItemArray[k].ToString();
                                    Result.ProductName = table.Rows[j].ItemArray[k].ToString();
                                    await _productPlanningService.UpdateAsync(Result);
                                }
                            }
                        }
                    }
                }



                // Read date

                /*    for (int j = 1; j < table.Rows[0].ItemArray.Length; j++)
                 *  {
                 *      if (string.IsNullOrEmpty(table.Rows[0].ItemArray[j].ToString()))
                 *      {
                 *          DateTime date;
                 *          DateTime.TryParseExact(table.Rows[0].ItemArray[j].ToString(), "dd-MMM-yy",
                 *              CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
                 *          dateList.Add(date);
                 *      }
                 *  }
                 *  var iDate = 0;
                 *  for (int j = 1; j < table.Rows[j].ItemArray.Length; j++)
                 *  {
                 *
                 *      string line = table.Rows[j].ItemArray[0].ToString();
                 *      var iShift = 1;
                 *      while (iShift <= table.Rows[j].ItemArray.Length)
                 *      {
                 *           string productName = table.Rows[j].ItemArray[iShift].ToString();
                 *
                 *            var item = new ProductPlanning()
                 *              {
                 *                  Result = productName,
                 *                  CreatedDate = dateList[(iShift-1)/3],
                 *                  UpdatedDate = dateList[(iShift-1)/3],
                 *                  Line = GetLineType(line),
                 *                  Shift = PlanShiftHardCodeType.Shift1,
                 *                  ProductName = productName
                 *              };
                 *
                 *              await _productPlanningService.CreateAsync(item);
                 *              iShift++;
                 *
                 *      }
                 *
                 *  }*/

                return(Json(new { status = "success", type = "create" }));
            }

            return(Json(new { status = "error", type = "create" }));
        }
        public static Task <ProductPlanning> GetProductPlanningByDateShiftLineAsync(this IRepositoryAsync <ProductPlanning> repository, DateTime dateTime, PlanShiftHardCodeType shift, PlanLineHardCodeType line)
        {
            var startTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0);
            var endTime   = startTime.AddDays(1);

            return(repository
                   .Table
                   .FirstOrDefaultAsync(x => x.CreatedDate < endTime && x.CreatedDate >= startTime && x.Shift == shift && x.Line == line));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="beginDate"></param>
        /// <param name="shiftType"></param>
        /// <param name="lineType"></param>
        /// <returns></returns>
        public Task <ProductPlanning> GetProductPlanningByDateAndShiftAndLine(DateTime beginDate,
                                                                              PlanShiftHardCodeType shiftType, PlanLineHardCodeType lineType)
        {
            var key = string.Format(PRODUCT_PLANNING_BY_DATE_SHIFT_LINE_KEY, beginDate.Date.ToShortDateString(), shiftType, lineType);

            return(_cacheManager.Get(key, () =>
            {
                var startTime = new DateTime(beginDate.Year, beginDate.Month, beginDate.Day, 0, 0, 0);
                var endTime = startTime.AddDays(1);

                return _productPlanningRepositoryAsync.Table.FirstOrDefaultAsync(x => x.CreatedDate < endTime && x.CreatedDate >= startTime && x.Shift == shiftType && x.Line == lineType);
            }));
        }