public void SaveDocument()
        {
            newCostManagementProcessModel.CostManagementProcess = Cost_Management_Process_tbx.Text;

            List <Information> informations = new List <Information>();
            Information        information  = new Information();
            var DocumentID    = Document_Information_dgv.Rows[0].Cells[1].Value.ToString();
            var DocumentOwner = Document_Information_dgv.Rows[1].Cells[1].Value.ToString();
            var IssueDate     = Document_Information_dgv.Rows[2].Cells[1].Value.ToString();
            var LastSavedDate = Document_Information_dgv.Rows[3].Cells[1].Value.ToString();
            var FileName      = Document_Information_dgv.Rows[4].Cells[1].Value.ToString();

            information.DocumentID    = DocumentID;
            information.DocumentOwner = DocumentOwner;
            information.IssueDate     = IssueDate;
            information.LastSavedDate = LastSavedDate;
            information.FileName      = FileName;
            newCostManagementProcessModel.Information = information;

            List <History> histories = new List <History>();
            int            Document_HistoryRowCount = Document_History_dgv.RowCount;

            for (int i = 0; i < Document_HistoryRowCount - 1; i++)
            {
                History history = new History();
                var     Version = Document_History_dgv.Rows[i].Cells[0].Value?.ToString() ?? "";
                var     IsDate  = Document_History_dgv.Rows[i].Cells[1].Value?.ToString() ?? "";
                var     Changes = Document_History_dgv.Rows[i].Cells[2].Value?.ToString() ?? "";
                history.Version   = Version;
                history.IssueDate = IsDate;
                history.Changes   = Changes;
                histories.Add(history);
            }
            newCostManagementProcessModel.Histories = histories;

            List <Approval> approvals     = new List <Approval>();
            int             approvalCount = Document_Approvals_dgv.RowCount;

            for (int i = 0; i < approvalCount - 1; i++)
            {
                Approval approval  = new Approval();
                var      Role      = Document_Approvals_dgv.Rows[i].Cells[0].Value?.ToString() ?? "";
                var      Name      = Document_Approvals_dgv.Rows[i].Cells[1].Value?.ToString() ?? "";
                var      Signature = Document_Approvals_dgv.Rows[i].Cells[2].Value?.ToString() ?? "";
                var      Date      = Document_Approvals_dgv.Rows[i].Cells[3].Value?.ToString() ?? "";

                approval.Name      = Name;
                approval.Role      = Role;
                approval.Signature = Signature;
                approval.Date      = Date;

                approvals.Add(approval);
            }
            newCostManagementProcessModel.Approvals = approvals;

            newCostManagementProcessModel.Overview          = Overview_tbx.Text;
            newCostManagementProcessModel.DocumentExpense   = Document_Expense_tbx.Text;
            newCostManagementProcessModel.ApproveExpense    = Approve_Expense_tbx.Text;
            newCostManagementProcessModel.UpdateProjectPlan = Update_Project_Plan_tbx.Text;
            newCostManagementProcessModel.TeamMembers       = Team_Member_tbx.Text;
            newCostManagementProcessModel.ProjectAdmin      = Project_Administrator_tbx.Text;
            newCostManagementProcessModel.ProjectManager    = Project_Manager_tbx.Text;

            newCostManagementProcessModel.ExpenseForm     = Expense_Form_tbx.Text;
            newCostManagementProcessModel.ExpenseRegister = Expense_Register_tbx.Text;

            List <VersionControl <CostManagementProcessModel> .DocumentModel> documentModels = versionControl.DocumentModels;

            //MessageBox.Show(JsonConvert.SerializeObject(newCostManagementProcessModel), "save", MessageBoxButtons.OK);


            if (!versionControl.isEqual(currentCostManagementProcessModel, newCostManagementProcessModel))
            {
                VersionControl <CostManagementProcessModel> .DocumentModel documentModel = new VersionControl <CostManagementProcessModel> .DocumentModel(newCostManagementProcessModel, DateTime.Now, VersionControl <CostManagementProcessModel> .generateID());

                documentModels.Add(documentModel);

                versionControl.DocumentModels = documentModels;

                string json = JsonConvert.SerializeObject(versionControl);
                currentCostManagementProcessModel = JsonConvert.DeserializeObject <CostManagementProcessModel>(JsonConvert.SerializeObject(newCostManagementProcessModel));
                JsonHelper.saveDocument(json, Settings.Default.ProjectID, "CostManagementProcess");
                MessageBox.Show("Risk plan saved successfully", "save", MessageBoxButtons.OK);
            }
        }
        public void LoadDocument()
        {
            string          json         = JsonHelper.loadDocument(Settings.Default.ProjectID, "CostManagementProcess");
            List <string[]> documentInfo = new List <string[]>();

            newCostManagementProcessModel     = new CostManagementProcessModel();
            currentCostManagementProcessModel = new CostManagementProcessModel();
            if (json != "")
            {
                versionControl = JsonConvert.DeserializeObject <VersionControl <CostManagementProcessModel> >(json);
                newCostManagementProcessModel     = JsonConvert.DeserializeObject <CostManagementProcessModel>(versionControl.getLatest(versionControl.DocumentModels));
                currentCostManagementProcessModel = JsonConvert.DeserializeObject <CostManagementProcessModel>(versionControl.getLatest(versionControl.DocumentModels));

                Information information = currentCostManagementProcessModel.Information;
                documentInfo.Add(new string[] { "Document ID", information.DocumentID });
                documentInfo.Add(new string[] { "Document Owner", information.DocumentOwner });
                documentInfo.Add(new string[] { "Issue Date", information.IssueDate });
                documentInfo.Add(new string[] { "Last Save Date", information.LastSavedDate });
                documentInfo.Add(new string[] { "File Name", information.FileName });

                foreach (var row in documentInfo)
                {
                    Document_Information_dgv.Rows.Add(row);
                }
                Document_Information_dgv.AllowUserToAddRows = false;

                foreach (var row in currentCostManagementProcessModel.Histories)
                {
                    Document_History_dgv.Rows.Add(new string[] { row.Version, row.IssueDate, row.Changes });
                }

                foreach (var row in currentCostManagementProcessModel.Approvals)
                {
                    Document_Approvals_dgv.Rows.Add(new string[] { row.Role, row.Name, row.Signature, row.Date });
                }

                Cost_Management_Process_tbx.Text = currentCostManagementProcessModel.CostManagementProcess;
                Overview_tbx.Text              = currentCostManagementProcessModel.Overview;
                Document_Expense_tbx.Text      = currentCostManagementProcessModel.DocumentExpense;
                Approve_Expense_tbx.Text       = currentCostManagementProcessModel.ApproveExpense;
                Update_Project_Plan_tbx.Text   = currentCostManagementProcessModel.UpdateProjectPlan;
                Team_Member_tbx.Text           = currentCostManagementProcessModel.TeamMembers;
                Project_Administrator_tbx.Text = currentCostManagementProcessModel.ProjectAdmin;
                Project_Manager_tbx.Text       = currentCostManagementProcessModel.ProjectManager;
                Expense_Form_tbx.Text          = currentCostManagementProcessModel.ExpenseForm;
                Expense_Register_tbx.Text      = currentCostManagementProcessModel.ExpenseRegister;
            }
            else
            {
                versionControl = new VersionControl <CostManagementProcessModel>();
                versionControl.DocumentModels = new List <VersionControl <CostManagementProcessModel> .DocumentModel>();
                newCostManagementProcessModel = new CostManagementProcessModel();
                documentInfo.Add(new string[] { "Document ID", "" });
                documentInfo.Add(new string[] { "Document Owner", "" });
                documentInfo.Add(new string[] { "Issue Date", "" });
                documentInfo.Add(new string[] { "Last Save Date", "" });
                documentInfo.Add(new string[] { "File Name", "" });

                foreach (var row in documentInfo)
                {
                    Document_Information_dgv.Rows.Add(row);
                }
                Document_Information_dgv.AllowUserToAddRows = false;
            }
        }