public ActionResult EditSequence(int id, int reasonCodeTypeId, int?page)
        {
            //Get Item From Database
            ReasonCodeGroup group = new ReasonCodeGroup();

            group = reasonCodeGroupRepository.GetGroup(id);

            //Check Exists
            if (group == null)
            {
                ViewData["ActionMethod"] = "EditSequenceGet";
                return(View("RecordDoesNotExistError"));
            }
            //Check Access
            RolesRepository rolesRepository = new RolesRepository();

            if (!rolesRepository.HasWriteAccessToReasonCodeGroup(id))
            {
                ViewData["Message"] = "You do not have access to this item";
                return(View("Error"));
            }

            ReasonCodeItemSequenceRepository reasonCodeItemSequenceRepository = new ReasonCodeItemSequenceRepository();

            ReasonCodeGroupReasonCodeTypeSequencingVM reasonCodeGroupReasonCodeTypeSequencingVM = new ReasonCodeGroupReasonCodeTypeSequencingVM();

            reasonCodeGroupReasonCodeTypeSequencingVM.SequenceItems    = reasonCodeItemSequenceRepository.GetReasonCodeItemSequences(id, reasonCodeTypeId, page ?? 1);
            reasonCodeGroupReasonCodeTypeSequencingVM.ReasonCodeGroup  = group;
            reasonCodeGroupReasonCodeTypeSequencingVM.ReasonCodeTypeId = reasonCodeTypeId;
            reasonCodeGroupReasonCodeTypeSequencingVM.Page             = page ?? 1;

            return(View(reasonCodeGroupReasonCodeTypeSequencingVM));
        }
        public ActionResult EditSequence(ReasonCodeGroupReasonCodeTypeSequencingVM reasonCodeGroupReasonCodeTypeSequencingVM, FormCollection collection)
        {
            int reasonCodeGroupId = reasonCodeGroupReasonCodeTypeSequencingVM.ReasonCodeGroup.ReasonCodeGroupId;
            int reasonCodeTypeId  = reasonCodeGroupReasonCodeTypeSequencingVM.ReasonCodeTypeId;
            int page = reasonCodeGroupReasonCodeTypeSequencingVM.Page;

            //Check Exists
            ReasonCodeGroup reasonCodeGroup = new ReasonCodeGroup();

            reasonCodeGroup = reasonCodeGroupRepository.GetGroup(reasonCodeGroupId);
            if (reasonCodeGroup == null)
            {
                return(View("Error"));
            }

            //Check Access Rights
            RolesRepository rolesRepository = new RolesRepository();

            if (!rolesRepository.HasWriteAccessToReasonCodeGroup(reasonCodeGroupId))
            {
                ViewData["Message"] = "You do not have access to this item";
                return(View("Error"));
            }
            string[] sequences = collection["RCSequence"].Split(new char[] { ',' });

            int sequence = (page - 1 * 5) - 2;

            if (sequence < 0)
            {
                sequence = 1;
            }

            XmlDocument    doc            = new XmlDocument();
            XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            XmlElement     root           = doc.DocumentElement;

            doc.InsertBefore(xmlDeclaration, root);
            XmlElement rootElement = doc.CreateElement(string.Empty, "SequenceXML", string.Empty);

            doc.AppendChild(rootElement);

            foreach (string s in sequences)
            {
                string[] reasonCodeItemPK = s.Split(new char[] { '_' });

                int reasonCodeItemId = Convert.ToInt32(reasonCodeItemPK[0]);
                int versionNumber    = Convert.ToInt32(reasonCodeItemPK[1]);

                XmlElement itemElement = doc.CreateElement(string.Empty, "Item", string.Empty);

                XmlElement      sequenceElement = doc.CreateElement(string.Empty, "Sequence", string.Empty);
                XmlCDataSection sequenceText    = doc.CreateCDataSection(HttpUtility.HtmlEncode(sequence.ToString()));
                sequenceElement.AppendChild(sequenceText);
                itemElement.AppendChild(sequenceElement);

                XmlElement      reasonCodeItemIdElement = doc.CreateElement(string.Empty, "ReasonCodeItemId", string.Empty);
                XmlCDataSection reasonCodeItemIdText    = doc.CreateCDataSection(HttpUtility.HtmlEncode(reasonCodeItemId.ToString()));
                reasonCodeItemIdElement.AppendChild(reasonCodeItemIdText);
                itemElement.AppendChild(reasonCodeItemIdElement);

                XmlElement      versionNumberElement = doc.CreateElement(string.Empty, "VersionNumber", string.Empty);
                XmlCDataSection versionNumberText    = doc.CreateCDataSection(HttpUtility.HtmlEncode(versionNumber.ToString()));
                versionNumberElement.AppendChild(versionNumberText);
                itemElement.AppendChild(versionNumberElement);

                rootElement.AppendChild(itemElement);

                sequence = sequence + 1;
            }

            try
            {
                ReasonCodeItemSequenceRepository reasonCodeItemSequenceRepository = new ReasonCodeItemSequenceRepository();
                reasonCodeItemSequenceRepository.UpdateReasonCodeItemSequences(doc.OuterXml);
            }
            catch (SqlException ex)
            {
                //Versioning Error
                if (ex.Message == "SQLVersioningError")
                {
                    ViewData["ReturnURL"] = "/ReasonCodeItem.mvc/EditSequence?ReasonCodeTypeId=" + reasonCodeTypeId + "&id=" + reasonCodeGroupId + "?page=" + page;
                    return(View("VersionError"));
                }
                LogRepository logRepository = new LogRepository();
                logRepository.LogError(ex.Message);

                ViewData["Message"] = "There was a problem with your request, please see the log file or contact an administrator for details";
                return(View("Error"));
            }

            return(RedirectToAction("List", new { id = reasonCodeGroupId }));
        }