public ActionResult DeleteTest(string ID)
        {
            try
            {
                REF_TEST_TB         test = _uow.Repository <REF_TEST_TB>().GetById(Convert.ToInt32(ID));
                TestDeleteViewModel testDeleteViewModel = new TestDeleteViewModel()
                {
                    AnalysisMethod = test.SZ_ANALYSIS_METHOD,
                    Description    = test.SZ_DESCRIPTION,
                    EffectiveDate  = test.DT_EFFECTIVE == null ? "" : test.DT_EFFECTIVE.Value.ToShortDateString(),
                    ExpiredDate    = test.DT_EXPIRED == null ? "" : test.DT_EXPIRED.Value.ToShortDateString(),
                    SampleMedia    = test.SZ_SAMPLE_MEDIA,
                    SampleType     = test.SZ_SAMPLE_TYPE,
                    TestID         = test.N_TEST_SYSID,
                    Unit           = test.SZ_TITLE,
                    Message        = "",
                    ShowMessage    = false
                };

                return(View(testDeleteViewModel));
            }
            catch (Exception ex)
            {
                if (ex.InnerException == null)
                {
                    ViewBag.Message = "Function: TestController.DeleteTest_GET\n\nError: " + ex.Message;
                }
                else
                {
                    ViewBag.Message = "Function: TestController.DeleteTest_GET\n\nError: " + (ex.Message + "\n\nInnerException: " + ex.InnerException.Message);
                };
                Session["ErrorMessage"] = ViewBag.Message;
                return(RedirectToAction("InternalServerError", "Error"));
            };
        }
        public ActionResult Create(int ID, int?TestGroupID)
        {
            try
            {
                REF_TEST_TB test = _uow.Repository <REF_TEST_TB>().GetById(ID);

                TestCreateGroupViewModel model = new TestCreateGroupViewModel()
                {
                    ID = ID,
                    SelectedTestGroup = 0,
                    TestDescription   = test.SZ_DESCRIPTION,
                    TestGroups        = (List <SelectListItem>)_testRepo.GetTestGroupsSelectListByTestID(ID)
                };

                return(View(model));
            }
            catch (Exception ex)
            {
                if (ex.InnerException == null)
                {
                    ViewBag.Message = "Function: TestController.Create_GET\n\nError: " + ex.Message;
                }
                else
                {
                    ViewBag.Message = "Function: TestController.Create_GET\n\nError: " + (ex.Message + "\n\nInnerException: " + ex.InnerException.Message);
                };
                Session["ErrorMessage"] = ViewBag.Message;
                return(RedirectToAction("InternalServerError", "Error"));
            };
        }
        public ActionResult Edit(int ID)
        {
            try
            {
                var testEditViewModel = new TestEditViewModel();
                if (ID > 0)
                {
                    REF_TEST_TB test = _uow.Repository <REF_TEST_TB>().GetById(ID);
                    testEditViewModel.AnalysisMethod = test.SZ_ANALYSIS_METHOD;
                    testEditViewModel.Description    = test.SZ_DESCRIPTION;
                    testEditViewModel.EffectiveDate  = test.DT_EFFECTIVE == null ? "" : test.DT_EFFECTIVE.Value.ToShortDateString();
                    testEditViewModel.ExpiredDate    = test.DT_EXPIRED == null ? "" : test.DT_EXPIRED.Value.ToShortDateString();
                    testEditViewModel.SampleMedia    = test.SZ_SAMPLE_MEDIA;
                    testEditViewModel.SampleType     = test.SZ_SAMPLE_TYPE;
                    testEditViewModel.TestID         = test.N_TEST_SYSID;
                    testEditViewModel.Unit           = test.SZ_TITLE;
                }
                else
                {
                    testEditViewModel.AnalysisMethod = "";
                    testEditViewModel.Description    = "";
                    testEditViewModel.EffectiveDate  = "";
                    testEditViewModel.ExpiredDate    = "";
                    testEditViewModel.SampleMedia    = "";
                    testEditViewModel.SampleType     = "";
                    testEditViewModel.TestID         = ID;
                    testEditViewModel.Unit           = "";
                }

                return(View("Edit", testEditViewModel));
            }
            catch (Exception ex)
            {
                if (ex.InnerException == null)
                {
                    ViewBag.Message = "Function: TestController.Edit_GET\n\nError: " + ex.Message;
                }
                else
                {
                    ViewBag.Message = "Function: TestController.Edit_GET\n\nError: " + (ex.Message + "\n\nInnerException: " + ex.InnerException.Message);
                };
                Session["ErrorMessage"] = ViewBag.Message;
                return(RedirectToAction("InternalServerError", "Error"));
            };
        }
        public ActionResult Edit(TestEditViewModel Model)
        {
            bool saveFailed;

            do
            {
                saveFailed = false;
                try
                {
                    if (ModelState.IsValid)
                    {
                        int id = 0;
                        if (Model.TestID == 0) //new
                        {
                            REF_TEST_TB test = new REF_TEST_TB()
                            {
                                B_INACTIVE         = false,
                                DT_EFFECTIVE       = Model.EffectiveDate == "" ? (DateTime?)null : Convert.ToDateTime(Model.EffectiveDate),
                                DT_ENTERED         = DateTime.UtcNow,
                                DT_EXPIRED         = Model.ExpiredDate == "" ? (DateTime?)null : Convert.ToDateTime(Model.ExpiredDate),
                                DT_MODIFIED        = DateTime.UtcNow,
                                SZ_DESCRIPTION     = Model.Description,
                                SZ_ENTERED_BY      = _modifiedBy,
                                SZ_MODIFIED_BY     = _modifiedBy,
                                SZ_ANALYSIS_METHOD = Model.AnalysisMethod,
                                SZ_SAMPLE_MEDIA    = Model.SampleMedia,
                                SZ_SAMPLE_TYPE     = Model.SampleType,
                                SZ_TITLE           = Model.Unit
                            };
                            _uow.Repository <REF_TEST_TB>().Add(test);
                            _uow.SaveChanges();
                            DateTime    effectiveDate = Convert.ToDateTime(Model.EffectiveDate);
                            DateTime    expiredDate   = Convert.ToDateTime(Model.ExpiredDate);
                            REF_TEST_TB testFound     = _uow.Repository <REF_TEST_TB>().Find(u => u.SZ_ENTERED_BY == _modifiedBy &&
                                                                                             u.SZ_MODIFIED_BY == _modifiedBy && u.DT_EFFECTIVE == effectiveDate && u.DT_EXPIRED == expiredDate &&
                                                                                             u.SZ_DESCRIPTION == Model.Description && u.SZ_ANALYSIS_METHOD == Model.AnalysisMethod &&
                                                                                             u.SZ_SAMPLE_MEDIA == Model.SampleMedia && u.SZ_SAMPLE_TYPE == Model.SampleType &&
                                                                                             u.SZ_TITLE == Model.Unit).FirstOrDefault();
                            id = testFound.N_TEST_SYSID;
                        }
                        else //edit
                        {
                            REF_TEST_TB test = _uow.Repository <REF_TEST_TB>().GetById(Model.TestID);
                            test.DT_EFFECTIVE       = Convert.ToDateTime(Model.EffectiveDate);
                            test.DT_EXPIRED         = Convert.ToDateTime(Model.ExpiredDate);
                            test.DT_MODIFIED        = DateTime.UtcNow;
                            test.SZ_ANALYSIS_METHOD = Model.AnalysisMethod;
                            test.SZ_DESCRIPTION     = Model.Description;
                            test.SZ_MODIFIED_BY     = _modifiedBy;
                            test.SZ_SAMPLE_MEDIA    = Model.SampleMedia;
                            test.SZ_SAMPLE_TYPE     = Model.SampleType;
                            test.SZ_TITLE           = Model.Unit;
                            _uow.Repository <REF_TEST_TB>().Update(test);
                            _uow.SaveChanges();
                            id = Model.TestID;
                        }

                        return(RedirectToAction("Index", new { ID = id }));
                    }

                    return(View(Model));
                }
                catch (DbEntityValidationException ex)
                {
                    StringBuilder sb = new StringBuilder();

                    foreach (var failure in ex.EntityValidationErrors)
                    {
                        sb.AppendFormat("{0} failed validation:\n\n", failure.Entry.Entity.GetType());
                        foreach (var error in failure.ValidationErrors)
                        {
                            sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                            sb.AppendLine();
                        }
                    }
                    if (ex.InnerException == null)
                    {
                        ViewBag.Message = "Function: TestController.Edit_POST\n\nError: " + ex.Message + "\n\n" + sb;
                    }
                    else
                    {
                        ViewBag.Message = "Function: TestController.Edit_POST\n\nError: " + ex.Message + "\n\n" + sb + "\n\n" + ex.InnerException.Message;
                    };
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    saveFailed = true;

                    var entry = ex.Entries.Single();
                    entry.OriginalValues.SetValues(entry.GetDatabaseValues());
                }
                catch (DataException ex)
                {
                    if (ex.InnerException == null)
                    {
                        ViewBag.Message = "Function: TestController.Edit_POST\n\nError: " + ex.Message + "\n\nBaseException: " + ex.GetBaseException().Message;
                    }
                    else
                    {
                        ViewBag.Message = "Function: TestController.Edit_POST\n\nError: " + ex.Message + "\n\nBaseException: " + ex.GetBaseException().Message + "\n\nInnerException: " + ex.InnerException.Message;
                    };
                }
                catch (Exception ex)
                {
                    if (ex.InnerException == null)
                    {
                        ViewBag.Message = "Function: TestController.Edit_POST\n\nError: " + ex.Message;
                    }
                    else
                    {
                        ViewBag.Message = "Function: TestController.Edit_POST\n\nError: " + ex.Message + "\n\nBaseException: " + ex.InnerException.Message;
                    };
                };
            } while (saveFailed);

            Session["ErrorMessage"] = ViewBag.Message;
            return(RedirectToAction("InternalServerError", "Error"));
        }