public ActionResult Index(int?CompanyId)
        {
            if (CompanyId == null)
            {
                return(RedirectToAction("Index", "Home"));
            }
            Company company = db.FindCompany(CompanyId);

            if (company == null)
            {
                return(HttpNotFound());
            }
            // Check for Labor Vendor
            LaborTableModel ltm = new LaborTableModel()
            {
                Labors      = db.LaborTable.Where(l => l.CompanyId == CompanyId).ToList(),
                CompanyId   = CompanyId.Value,
                CompanyName = company.Name,
            };
            List <Vendor> vendors = db.Vendors.Where(v => v.CompanyId == CompanyId && (v.Type.Type & vendorTypeEnum.Labor) == vendorTypeEnum.Labor).ToList();

            foreach (LaborItem li in ltm.Labors)
            {
                li.selectList = new SelectList(vendors, "Id", "Name", li.VendorId);
            }
            ltm.bHasVendors = vendors.Count != 0;
            return(View(ltm));
        }
        public ActionResult Index(LaborTableModel ltm)
        {
            List <Vendor> vendors;

            if (ModelState.IsValid)
            {
                int i = -1;
                //db.Entry(cvm.company).State = EntityState.Modified;

                foreach (LaborItem li in ltm.Labors)
                {
                    i++;
                    switch (li.State)
                    {
                    case LMState.Added:
                        li.CompanyId = ltm.CompanyId;
                        db.LaborTable.Add(li);
                        li.State = LMState.Dirty;
                        break;

                    case LMState.Deleted:
                        // Make sure its not used. If it is, reset to "Dirty" and add an error message
                        if (db.StyleLaborItems.Where(sli => sli.LaborTableId == li.Id).Count() > 0)
                        {
                            li.State = LMState.Dirty;
                            ModelState.SetModelValue($"Labors[{i}].State", new ValueProviderResult("Dirty", "", System.Globalization.CultureInfo.InvariantCulture));
                            ModelState.AddModelError($"Labors[{i}].Name", $"You cannot delete {li.Name}: it is used by the following style(s):{StylesInUse(li)}");
                            break;
                        }
                        db.Entry(li).State = EntityState.Deleted;
                        db.LaborTable.Remove(li);
                        break;

                    case LMState.Dirty:
                        db.Entry(li).State = EntityState.Modified;
                        break;

                    case LMState.Unadded:
                    case LMState.Clean:
                    case LMState.Fixed:
                        break;
                    }
                }
            }
            vendors = db.Vendors.Where(v => v.CompanyId == ltm.CompanyId).ToList();
            if (ModelState.IsValid)
            {
                db.SaveChanges();

                int    CompanyId   = ltm.CompanyId;
                string CompanyName = ltm.CompanyName;

                ModelState.Clear();
                ltm = new LaborTableModel()
                {
                    Labors      = db.LaborTable.Where(l => l.CompanyId == CompanyId).ToList(),
                    CompanyId   = CompanyId,
                    CompanyName = CompanyName,
                };
                foreach (LaborItem li in ltm.Labors)
                {
                    li.selectList = new SelectList(vendors, "Id", "Name", li.VendorId);
                }
                ltm.bHasVendors = vendors.Count != 0;
                return(RedirectToAction("Index", "Companies"));
            }
            foreach (LaborItem li in ltm.Labors)
            {
                li.selectList = new SelectList(vendors, "Id", "Name", li.VendorId);
            }
            ltm.bHasVendors = vendors.Count != 0;
            return(View(ltm));
        }