public void saveDocument()
        {
            newRequestForProposalModel.projectName = projectModel.ProjectName;

            newRequestForProposalModel.documentInformations = new List <RequestForProposalModel.DocumentInformation>();
            foreach (DataGridViewRow row in dataGridViewDocumentInformation.Rows)
            {
                RequestForProposalModel.DocumentInformation newInfo = new RequestForProposalModel.DocumentInformation();
                newInfo.type        = row.Cells[0].Value?.ToString() ?? "";
                newInfo.information = row.Cells[1].Value?.ToString() ?? "";
                newRequestForProposalModel.documentInformations.Add(newInfo);
            }

            newRequestForProposalModel.documentHistories = new List <RequestForProposalModel.DocumentHistory>();
            foreach (DataGridViewRow row in dataGridViewDocumentHistory.Rows)
            {
                RequestForProposalModel.DocumentHistory newHistory = new RequestForProposalModel.DocumentHistory();
                newHistory.version   = row.Cells[0].Value?.ToString() ?? "";
                newHistory.issueDate = row.Cells[1].Value?.ToString() ?? "";
                newHistory.changes   = row.Cells[2].Value?.ToString() ?? "";
                newRequestForProposalModel.documentHistories.Add(newHistory);
            }

            newRequestForProposalModel.documentApprovals = new List <RequestForProposalModel.DocumentApproval>();
            foreach (DataGridViewRow row in dataGridViewDocumentApprovals.Rows)
            {
                RequestForProposalModel.DocumentApproval newApproval = new RequestForProposalModel.DocumentApproval();
                newApproval.role         = row.Cells[0].Value?.ToString() ?? "";
                newApproval.name         = row.Cells[1].Value?.ToString() ?? "";
                newApproval.signature    = row.Cells[2].Value?.ToString() ?? "";
                newApproval.approvalDate = row.Cells[3].Value?.ToString() ?? "";
                newRequestForProposalModel.documentApprovals.Add(newApproval);
            }

            newRequestForProposalModel.introductionDescription     = txtChangeProcess.Text;
            newRequestForProposalModel.introductionOverview        = txtOverview.Text;
            newRequestForProposalModel.introductionPurpose         = txtPurpose.Text;
            newRequestForProposalModel.introductionAcknowledgement = txtAcknowledgement.Text;
            newRequestForProposalModel.introductionRecipients      = txtRecipients.Text;
            newRequestForProposalModel.introductionProcess         = txtProcess.Text;
            newRequestForProposalModel.introductionRules           = txtRules.Text;
            newRequestForProposalModel.introductionQuestions       = txtQuestions.Text;

            newRequestForProposalModel.companyDescription = txtCompany.Text;
            newRequestForProposalModel.companyVision      = txtVision.Text;
            newRequestForProposalModel.companyObjectives  = txtObjectives.Text;
            newRequestForProposalModel.companySize        = txtSize.Text;
            newRequestForProposalModel.companyLocation    = txtLocation.Text;

            newRequestForProposalModel.companyTypeAndNumberOfCustomers        = txtTypeAndNumberOfCustomers.Text;
            newRequestForProposalModel.companyMarketSegment                   = txtMarketSegment.Text;
            newRequestForProposalModel.companyKnowledgeOfIndustryAndExpertise = txtKnowledgeOfIndustryAndExpertise.Text;

            newRequestForProposalModel.solutionDescription = txtSolution.Text;

            newRequestForProposalModel.solutions = new List <RequestForProposalModel.Solution>();
            foreach (DataGridViewRow row  in dataGridViewSolution.Rows)
            {
                RequestForProposalModel.Solution newSolution = new RequestForProposalModel.Solution();
                newSolution.solutionAndComponents = row.Cells[0].Value?.ToString() ?? "";
                newSolution.quantity = row.Cells[1].Value?.ToString() ?? "";
                newSolution.price    = row.Cells[2].Value?.ToString() ?? "";
                newRequestForProposalModel.solutions.Add(newSolution);
            }

            newRequestForProposalModel.implementationDescription = txtImplementation.Text;

            newRequestForProposalModel.otherInformationDescription     = txtOtherInformation.Text;
            newRequestForProposalModel.otherInformationConfidentiality = txtConfidentiality.Text;
            newRequestForProposalModel.otherInformationDocumentation   = txtDocumentation.Text;

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

            if (!versionControl.isEqual(currentRequestForProposalModel, newRequestForProposalModel))
            {
                VersionControl <RequestForProposalModel> .DocumentModel documentModel = new VersionControl <RequestForProposalModel>
                                                                                        .DocumentModel(newRequestForProposalModel, DateTime.Now, VersionControl <RequestForProposalModel> .generateID());

                documentModels.Add(documentModel);

                versionControl.DocumentModels = documentModels;
                string json = JsonConvert.SerializeObject(versionControl);
                currentRequestForProposalModel = JsonConvert.DeserializeObject <RequestForProposalModel>(JsonConvert.SerializeObject(newRequestForProposalModel));
                JsonHelper.saveDocument(json, Settings.Default.ProjectID, "RequestForProposal");
                MessageBox.Show("Request for Proposal saved successfully", "save", MessageBoxButtons.OK);
            }
            else
            {
                MessageBox.Show("No changes were made!", "save", MessageBoxButtons.OK);
            }
        }
        public void loadDocument()
        {
            string          json         = JsonHelper.loadDocument(Settings.Default.ProjectID, "RequestForProposal");
            List <string[]> documentInfo = new List <string[]>();

            newRequestForProposalModel     = new RequestForProposalModel();
            currentRequestForProposalModel = new RequestForProposalModel();

            if (json != "")
            {
                versionControl                 = JsonConvert.DeserializeObject <VersionControl <RequestForProposalModel> >(json);
                newRequestForProposalModel     = JsonConvert.DeserializeObject <RequestForProposalModel>(versionControl.getLatest(versionControl.DocumentModels));
                currentRequestForProposalModel = JsonConvert.DeserializeObject <RequestForProposalModel>(versionControl.getLatest(versionControl.DocumentModels));

                foreach (var row in currentRequestForProposalModel.documentInformations)
                {
                    dataGridViewDocumentInformation.Rows.Add(new string[] { row.type, row.information });
                }

                foreach (RequestForProposalModel.DocumentHistory row in currentRequestForProposalModel.documentHistories)
                {
                    dataGridViewDocumentHistory.Rows.Add(new string[] { row.version, row.issueDate.ToString(), row.changes });
                }

                foreach (RequestForProposalModel.DocumentApproval row in currentRequestForProposalModel.documentApprovals)
                {
                    dataGridViewDocumentApprovals.Rows.Add(new string[] { row.role, row.name, "", row.approvalDate.ToString() });
                }

                txtRequestForProposalProcessProject.Text = projectModel.ProjectName;

                txtChangeProcess.Text   = currentRequestForProposalModel.introductionDescription;
                txtOverview.Text        = currentRequestForProposalModel.introductionOverview;
                txtPurpose.Text         = currentRequestForProposalModel.introductionPurpose;
                txtAcknowledgement.Text = currentRequestForProposalModel.introductionAcknowledgement;
                txtRecipients.Text      = currentRequestForProposalModel.introductionRecipients;
                txtProcess.Text         = currentRequestForProposalModel.introductionProcess;
                txtRules.Text           = currentRequestForProposalModel.introductionRules;
                txtQuestions.Text       = currentRequestForProposalModel.introductionQuestions;

                txtCompany.Text    = currentRequestForProposalModel.companyDescription;
                txtVision.Text     = currentRequestForProposalModel.companyVision;
                txtObjectives.Text = currentRequestForProposalModel.companyObjectives;
                txtSize.Text       = currentRequestForProposalModel.companySize;
                txtLocation.Text   = currentRequestForProposalModel.companyLocation;

                txtTypeAndNumberOfCustomers.Text        = currentRequestForProposalModel.companyTypeAndNumberOfCustomers;
                txtMarketSegment.Text                   = currentRequestForProposalModel.companyMarketSegment;
                txtKnowledgeOfIndustryAndExpertise.Text = currentRequestForProposalModel.companyKnowledgeOfIndustryAndExpertise;

                txtSolution.Text = currentRequestForProposalModel.solutionDescription;

                foreach (RequestForProposalModel.Solution row in currentRequestForProposalModel.solutions)
                {
                    dataGridViewSolution.Rows.Add(new string[] { row.solutionAndComponents, row.quantity, "", row.price });
                }

                txtImplementation.Text   = currentRequestForProposalModel.implementationDescription;
                txtOtherInformation.Text = currentRequestForProposalModel.otherInformationDescription;
                txtConfidentiality.Text  = currentRequestForProposalModel.otherInformationConfidentiality;
                txtDocumentation.Text    = currentRequestForProposalModel.otherInformationDocumentation;
            }
            else
            {
                versionControl = new VersionControl <RequestForProposalModel>();
                versionControl.DocumentModels = new List <VersionControl <RequestForProposalModel> .DocumentModel>();
                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)
                {
                    dataGridViewDocumentInformation.Rows.Add(row);
                }
                dataGridViewDocumentInformation.AllowUserToAddRows = false;
            }
        }