private void getDropDownListForCreateScrap(int?operationId, ScrapBasicInfoModal scrapBasicInfoModal)
        {
            // get data for drop down list of machines
            scrapBasicInfoModal.Machines = _stackpoleContext.qryMachNumbers
                                           .Where(m => m.OperationID == operationId)
                                           .GroupBy(m => new { m.machineID })
                                           .Select(m => new SelectListItem {
                Text = m.Key.machineID.ToString(), Value = m.Key.machineID.ToString()
            })
                                           .OrderBy(m => m.Value)
                                           .ToList();

            scrapBasicInfoModal.Machines.Insert(0, new SelectListItem {
                Text = "Choose a machine", Value = ""
            });

            // get data for drop down list of reason
            scrapBasicInfoModal.Reasons = _stackpoleContext.qrySrapReasons
                                          .Where(m => m.operationID == operationId)
                                          .Select(m => new SelectListItem {
                Text = m.description.ToString(), Value = m.id.ToString()
            })
                                          .OrderBy(m => m.Text)
                                          .ToList();
            scrapBasicInfoModal.Reasons.Insert(0, new SelectListItem {
                Text = "Choose a reason", Value = ""
            });
        }
        public ActionResult CreateNewScrapModal(ScrapBasicInfoModal scrapBasicInfoModal)
        {
            // initialize data for drop down list in create view
            //getDropDownList(scrapBasicInfoModal.operationIdInt);
            getDropDownListForCreateScrap(scrapBasicInfoModal.operationIdInt, scrapBasicInfoModal);

            // NOTE: avoid error when saving as null value
            // we should init values as 0 before passing them to the view
            scrapBasicInfoModal.scrapDetailModal.quantity = 0;
            scrapBasicInfoModal.scrapDetailModal.weight   = 0;

            return(PartialView("_CreateNewScrapModal", scrapBasicInfoModal));
        }
        //public ActionResult Create([Bind(Include = "id,scrapId,reasonId,machineId,quantity,weight,cost,employeeNumber")] ScrapDetail scrapDetail)
        //public ActionResult CreateNewScrapPost([Bind(Include = "reasonId,machineId,quantity,weight,cost,employeeNumber")] ScrapBasicInfo scrapBasicInfo)
        public ActionResult CreateNewScrapPostModal(ScrapBasicInfoModal scrapBasicInfoModal)
        {
            if (ModelState.IsValid)
            {
                Scrap scrap = new Scrap();

                /* case add first new scrap */
                if (scrapBasicInfoModal.scrapDetailModal.scrapId == 0)
                {
                    scrap.date         = scrapBasicInfoModal.scrapModal.date;
                    scrap.machineId    = scrapBasicInfoModal.scrapDetailModal.machineId;
                    scrap.operationId  = scrapBasicInfoModal.scrapModal.operationId;
                    scrap.partId       = scrapBasicInfoModal.scrapModal.partId;
                    scrap.plantId      = scrapBasicInfoModal.scrapModal.plantId;
                    scrap.unitCost     = scrapBasicInfoModal.scrapModal.unitCost;
                    scrap.unitWeight   = scrapBasicInfoModal.scrapModal.unitWeight;
                    scrap.departmentId = scrapBasicInfoModal.scrapModal.departmentId;
                    //scrap.cancelled = false;

                    _stackpoleContext.Scraps.Add(scrap);
                    _stackpoleContext.SaveChanges();

                    scrapBasicInfoModal.scrapModal.id            = scrap.id;
                    scrapBasicInfoModal.scrapDetailModal.scrapId = scrap.id;
                }

                ScrapDetail scrapDetail = new ScrapDetail();
                scrapDetail.scrapId        = scrapBasicInfoModal.scrapDetailModal.scrapId;
                scrapDetail.reasonId       = scrapBasicInfoModal.scrapDetailModal.reasonId;
                scrapDetail.machineId      = scrapBasicInfoModal.scrapDetailModal.machineId;
                scrapDetail.quantity       = scrapBasicInfoModal.scrapDetailModal.quantity;
                scrapDetail.weight         = scrapBasicInfoModal.scrapDetailModal.weight;
                scrapDetail.cost           = scrapBasicInfoModal.scrapDetailModal.cost;
                scrapDetail.employeeNumber = scrapBasicInfoModal.scrapDetailModal.employeeNumber;

                _stackpoleContext.ScrapDetails.Add(scrapDetail);
                _stackpoleContext.SaveChanges();

                //Index(string plantName, string departmentName, string partId, string operationName, int operationId)
                return(RedirectToAction("Index", new
                {
                    plantName = scrapBasicInfoModal.scrapModal.plantId,
                    departmentName = scrapBasicInfoModal.scrapModal.departmentId,
                    partId = scrapBasicInfoModal.scrapModal.partId,
                    operationName = scrapBasicInfoModal.scrapModal.operationId,
                    operationId = scrapBasicInfoModal.operationIdInt,
                    weight = scrapBasicInfoModal.scrapModal.unitWeight,
                    cost = scrapBasicInfoModal.scrapModal.unitCost,
                    scrapId = scrapBasicInfoModal.scrapDetailModal.scrapId
                }));
            }
            var errors = ModelState
                         .Where(x => x.Value.Errors.Count > 0)
                         .Select(x => new { x.Key, x.Value.Errors })
                         .ToArray();

            //ViewBag.scrapID = new SelectList(db.Scraps, "id", "partId", scrapDetail.scrapId);
            //ViewBag.machineId = new SelectList(db.Scraps, "id", "partId", scrapDetail.scrapId);
            //ViewBag.reasonID = new SelectList(db.ScrapReasons, "id", "description", scrapDetail.reasonId);
            //return View(scrapDetail);

            //return View();
            return(PartialView("_CreateNewScrapModal", scrapBasicInfoModal));
        }