private void saveDocument()
        {
            newProjectClosureReportModel.DocumentID    = dataGridViewDocumentInformation.Rows[0].Cells[1].Value.ToString();
            newProjectClosureReportModel.DocumentOwner = dataGridViewDocumentInformation.Rows[1].Cells[1].Value.ToString();
            newProjectClosureReportModel.IssueDate     = dataGridViewDocumentInformation.Rows[2].Cells[1].Value.ToString();
            newProjectClosureReportModel.LastSavedDate = dataGridViewDocumentInformation.Rows[3].Cells[1].Value.ToString();
            newProjectClosureReportModel.FileName      = dataGridViewDocumentInformation.Rows[4].Cells[1].Value.ToString();

            int versionRowsCount = dataGridViewDocumentHistory.Rows.Count;

            newProjectClosureReportModel.DocumentHistories = new List <ProjectClosureReportModel.DocumentHistory>();
            for (int i = 0; i < versionRowsCount - 1; i++)
            {
                var version   = dataGridViewDocumentHistory.Rows[i].Cells[0].Value?.ToString() ?? "";
                var issueDate = dataGridViewDocumentHistory.Rows[i].Cells[1].Value?.ToString() ?? "";
                var changes   = dataGridViewDocumentHistory.Rows[i].Cells[2].Value?.ToString() ?? "";

                newProjectClosureReportModel.DocumentHistories
                .Add(new ProjectClosureReportModel.DocumentHistory(version, issueDate, changes));
            }

            int approvalRowsCount = dataGridViewDocumentApprovals.Rows.Count;

            newProjectClosureReportModel.DocumentApprovals = new List <ProjectClosureReportModel.DocumentApproval>();
            for (int i = 0; i < approvalRowsCount - 1; i++)
            {
                var role      = dataGridViewDocumentApprovals.Rows[i].Cells[0].Value?.ToString() ?? "";
                var name      = dataGridViewDocumentApprovals.Rows[i].Cells[1].Value?.ToString() ?? "";
                var signature = dataGridViewDocumentApprovals.Rows[i].Cells[2].Value?.ToString() ?? "";
                var date      = dataGridViewDocumentApprovals.Rows[i].Cells[3].Value?.ToString() ?? "";
                newProjectClosureReportModel.DocumentApprovals
                .Add(new ProjectClosureReportModel.DocumentApproval(role, name, signature, date));
            }

            newProjectClosureReportModel.ProjectCompletionDescription = txtProjectCompletion.Text;


            int completionCritCount = dataGridViewCompletionCriteria.Rows.Count;

            newProjectClosureReportModel.CompletionCriterion = new List <ProjectClosureReportModel.CompletionCriteria>();
            for (int i = 0; i < completionCritCount - 1; i++)
            {
                var category  = dataGridViewCompletionCriteria.Rows[i].Cells[0].Value?.ToString() ?? "";
                var criteria  = dataGridViewCompletionCriteria.Rows[i].Cells[1].Value?.ToString() ?? "";
                var satisfied = dataGridViewCompletionCriteria.Rows[i].Cells[2].Value?.ToString() ?? "";

                newProjectClosureReportModel.CompletionCriterion
                .Add(new ProjectClosureReportModel.CompletionCriteria(category, criteria, satisfied));
            }

            int outstandingItemsCount = dataGridViewOutstandingItems.Rows.Count;

            newProjectClosureReportModel.OutstandingItems = new List <ProjectClosureReportModel.OutstandingItem>();
            for (int i = 0; i < outstandingItemsCount - 1; i++)
            {
                var item   = dataGridViewOutstandingItems.Rows[i].Cells[0].Value?.ToString() ?? "";
                var action = dataGridViewOutstandingItems.Rows[i].Cells[1].Value?.ToString() ?? "";
                var date   = dataGridViewOutstandingItems.Rows[i].Cells[2].Value?.ToString() ?? "";

                newProjectClosureReportModel.OutstandingItems
                .Add(new ProjectClosureReportModel.OutstandingItem(item, action, date));
            }

            newProjectClosureReportModel.ProjectClosureDescription = txtProjectClosure.Text;

            int deliverablesCount = dataGridViewDeliverables.Rows.Count;

            newProjectClosureReportModel.Deliverables = new List <ProjectClosureReportModel.Deliverable>();
            for (int i = 0; i < deliverablesCount - 1; i++)
            {
                var deliverable = dataGridViewDeliverables.Rows[i].Cells[0].Value?.ToString() ?? "";
                var action      = dataGridViewDeliverables.Rows[i].Cells[1].Value?.ToString() ?? "";
                var date        = dataGridViewDeliverables.Rows[i].Cells[2].Value?.ToString() ?? "";

                newProjectClosureReportModel.Deliverables
                .Add(new ProjectClosureReportModel.Deliverable(deliverable, action, date));
            }

            int documentationCount = dataGridViewDocumentation.Rows.Count;

            newProjectClosureReportModel.Documentations = new List <ProjectClosureReportModel.Documentation>();
            for (int i = 0; i < documentationCount - 1; i++)
            {
                var documemt = dataGridViewDocumentation.Rows[i].Cells[0].Value?.ToString() ?? "";
                var action   = dataGridViewDocumentation.Rows[i].Cells[1].Value?.ToString() ?? "";
                var date     = dataGridViewDocumentation.Rows[i].Cells[2].Value?.ToString() ?? "";

                newProjectClosureReportModel.Documentations
                .Add(new ProjectClosureReportModel.Documentation(documemt, action, date));
            }

            int supplierCount = dataGridViewSippliers.Rows.Count;

            newProjectClosureReportModel.Suppliers = new List <ProjectClosureReportModel.Supplier>();
            for (int i = 0; i < supplierCount - 1; i++)
            {
                var contract = dataGridViewSippliers.Rows[i].Cells[0].Value?.ToString() ?? "";
                var action   = dataGridViewSippliers.Rows[i].Cells[1].Value?.ToString() ?? "";
                var date     = dataGridViewSippliers.Rows[i].Cells[2].Value?.ToString() ?? "";

                newProjectClosureReportModel.Suppliers
                .Add(new ProjectClosureReportModel.Supplier(contract, action, date));
            }

            int resourceCount = dataGridViewResources.Rows.Count;

            newProjectClosureReportModel.Resources = new List <ProjectClosureReportModel.Resource>();
            for (int i = 0; i < resourceCount - 1; i++)
            {
                var resource = dataGridViewResources.Rows[i].Cells[0].Value?.ToString() ?? "";
                var action   = dataGridViewResources.Rows[i].Cells[1].Value?.ToString() ?? "";
                var date     = dataGridViewResources.Rows[i].Cells[2].Value?.ToString() ?? "";

                newProjectClosureReportModel.Resources
                .Add(new ProjectClosureReportModel.Resource(resource, action, date));
            }

            int commiCount = dataGridViewCommunications.Rows.Count;

            newProjectClosureReportModel.Communications = new List <ProjectClosureReportModel.Communication>();
            for (int i = 0; i < commiCount - 1; i++)
            {
                var communication = dataGridViewCommunications.Rows[i].Cells[0].Value?.ToString() ?? "";
                var action        = dataGridViewCommunications.Rows[i].Cells[1].Value?.ToString() ?? "";
                var method        = dataGridViewCommunications.Rows[i].Cells[2].Value?.ToString() ?? "";
                var date          = dataGridViewCommunications.Rows[i].Cells[3].Value?.ToString() ?? "";

                newProjectClosureReportModel.Communications
                .Add(new ProjectClosureReportModel.Communication(communication, action, method, date));
            }

            newProjectClosureReportModel.ApprovalRole = "...";
            newProjectClosureReportModel.ApprovalName = txtName.Text;
            newProjectClosureReportModel.ApprovalDate = txtDate.Text;
            newProjectClosureReportModel.ApprovalRole = txtSignature.Text;

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

            if (!versionControl.isEqual(currentProjectClosureReportModel, newProjectClosureReportModel))
            {
                VersionControl <ProjectClosureReportModel> .DocumentModel documentModel = new VersionControl <ProjectClosureReportModel>
                                                                                          .DocumentModel(newProjectClosureReportModel, DateTime.Now, VersionControl <ProjectClosureReportModel> .generateID());

                documentModels.Add(documentModel);

                string json = JsonConvert.SerializeObject(versionControl);
                currentProjectClosureReportModel = JsonConvert.DeserializeObject <ProjectClosureReportModel>(JsonConvert.SerializeObject(newProjectClosureReportModel));
                JsonHelper.saveDocument(json, Settings.Default.ProjectID, "ProjectClosureReport");
                MessageBox.Show("Project Closure Form saved successfully", "save", MessageBoxButtons.OK);
            }
            else
            {
                MessageBox.Show("No changes was made!", "save", MessageBoxButtons.OK);
            }
        }
        private void loadDocument()
        {
            string          json         = JsonHelper.loadDocument(Settings.Default.ProjectID, "ProjectClosureReport");
            List <string[]> documentInfo = new List <string[]>();

            newProjectClosureReportModel     = new ProjectClosureReportModel();
            currentProjectClosureReportModel = new ProjectClosureReportModel();

            if (json != "")
            {
                versionControl = JsonConvert.DeserializeObject <VersionControl <ProjectClosureReportModel> >(json);
                newProjectClosureReportModel     = JsonConvert.DeserializeObject <ProjectClosureReportModel>(versionControl.getLatest(versionControl.DocumentModels));
                currentProjectClosureReportModel = JsonConvert.DeserializeObject <ProjectClosureReportModel>(versionControl.getLatest(versionControl.DocumentModels));

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

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

                foreach (var row in currentProjectClosureReportModel.DocumentHistories)
                {
                    dataGridViewDocumentHistory.Rows.Add(new string[] { row.Version, row.IssueDate, row.Changes });
                }

                foreach (var row in currentProjectClosureReportModel.DocumentApprovals)
                {
                    dataGridViewDocumentApprovals.Rows.Add(new string[] { row.Role, row.Name, row.Signature, row.DateApproved });
                }

                txtProjectCompletion.Text = currentProjectClosureReportModel.ProjectCompletionDescription;

                foreach (var row in currentProjectClosureReportModel.CompletionCriterion)
                {
                    dataGridViewCompletionCriteria.Rows.Add(new string[] { row.CompletionCategory, row.completionCriteria, row.Satisfied });
                }

                foreach (var row in currentProjectClosureReportModel.OutstandingItems)
                {
                    dataGridViewOutstandingItems.Rows.Add(new string[] { row.outstandingItem, row.ActionRequired, row.CompletionDate });
                }

                txtProjectClosure.Text = newProjectClosureReportModel.ProjectClosureDescription;

                foreach (var row in currentProjectClosureReportModel.Deliverables)
                {
                    dataGridViewDeliverables.Rows.Add(new string[] { row.ProjectDeliverable, row.ActionRequired, row.CompletionDate });
                }

                foreach (var row in currentProjectClosureReportModel.Documentations)
                {
                    dataGridViewDocumentation.Rows.Add(new string[] { row.ProjectDocument, row.ActionRequired, row.CompletionDate });
                }

                foreach (var row in currentProjectClosureReportModel.Suppliers)
                {
                    dataGridViewSippliers.Rows.Add(new string[] { row.SupplierContract, row.ActionRequired, row.CompletionDate });
                }

                foreach (var row in currentProjectClosureReportModel.Resources)
                {
                    dataGridViewResources.Rows.Add(new string[] { row.ProjectResource, row.ActionRequired, row.CompletionDate });
                }

                foreach (var row in currentProjectClosureReportModel.Communications)
                {
                    dataGridViewCommunications.Rows.Add(new string[] { row.Audience, row.Message, row.Method, row.CommunicationDate });
                }

                txtName.Text      = newProjectClosureReportModel.ApprovalName;
                txtDate.Text      = newProjectClosureReportModel.ApprovalDate;
                txtSignature.Text = newProjectClosureReportModel.ApprovalSignature;
            }
            else
            {
                versionControl = new VersionControl <ProjectClosureReportModel>();
                versionControl.DocumentModels = new List <VersionControl <ProjectClosureReportModel> .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;
            }
        }