//
// This code is part of Document Solutions for Word demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using System.Globalization;
using GrapeCity.Documents.Word;
namespace DsWordWeb.Demos
{
// This data template sample prints the closing disclosure page
// of a loan application. It uses data from the sample database,
// adding a few calculated values based on the sample data.
public class DataTplClosingDisclosure
{
public GcWordDocument CreateDocx(int _ = 0)
{
using var ds = new DataSet();
// Read the sample's data from DsWordTplDataSet.xml:
ds.ReadXml(Path.Combine("Resources", "data", "DsWordTplDataSet.xml"));
var dtClosing = ds.Tables["ClosingDisclosure"];
var row = dtClosing.Rows[0];
// Calculate monthly loan payments using a standard formula:
var monthlyPay = CalcMonthlyPayment(Convert.ToDecimal(row["loanAmnt"]), Convert.ToDecimal(row["loanInt"]), Convert.ToInt32(row["loanTerm"]));
// Other calculated data:
var calc = new
{
totMon1 = monthlyPay + Convert.ToDecimal(row["insurance"]) + Convert.ToDecimal(row["escrow"]),
totMon8 = monthlyPay + Convert.ToDecimal(row["escrow"]),
closingCosts = Convert.ToDecimal(row["loanCosts"]) + Convert.ToDecimal(row["otherCosts"]) - Convert.ToDecimal(row["lenderCredit"]),
};
// Combined data for the template:
var data = new
{
// issueDate = row["issueDate"].ToString(),
issueDate = Convert.ToDateTime(row["issueDate"]).ToString("s"),
closingDate = Convert.ToDateTime(row["closingDate"]).ToString("s"),
disDate = Convert.ToDateTime(row["disDate"]).ToString("s"),
agent = row["agent"].ToString(),
fileNo = row["fileNo"].ToString(),
propAddr = row["propAddr"].ToString(),
salePrice = Convert.ToDecimal(row["salePrice"]),
borrower = row["borrower"].ToString(),
seller = row["seller"].ToString(),
lender = row["lender"].ToString(),
loanTerm = Convert.ToInt32(row["loanTerm"]),
purpose = row["purpose"].ToString(),
product = row["product"].ToString(),
loanID = row["loanID"].ToString(),
micNum = row["micNum"].ToString(),
loanAmnt = Convert.ToDecimal(row["loanAmnt"]),
loanInt = Convert.ToDecimal(row["loanInt"]),
penalty = Convert.ToDecimal(row["penalty"]),
insurance = Convert.ToDecimal(row["insurance"]),
escrow = Convert.ToDecimal(row["escrow"]),
taxes = Convert.ToDecimal(row["taxes"]),
cash2close = Convert.ToDecimal(row["cash2close"]),
loanCosts = Convert.ToDecimal(row["loanCosts"]),
otherCosts = Convert.ToDecimal(row["otherCosts"]),
lenderCredit = Convert.ToDecimal(row["lenderCredit"]),
monthlyPay,
calc.totMon1,
calc.totMon8,
calc.closingCosts,
};
// Load the template DOCX, add the data source and process the template:
var doc = new GcWordDocument();
doc.Load(Path.Combine("Resources", "WordDocs", "Closing_Disclosure_Template.docx"));
doc.DataTemplate.DataSources.Add("ds", data);
doc.DataTemplate.Process(CultureInfo.GetCultureInfo("en-US"));
// Done:
return doc;
}
// We use this formula to calculate loan payments for the sample:
// https://cdn.vertex42.com/ExcelArticles/Images/amortization-calculation-formula.png
private static decimal CalcMonthlyPayment(decimal principal, decimal yearlyInterest, int years)
{
var r = (double)(yearlyInterest / 12);
var n = 12 * years;
var q = Math.Pow(1 + r, n);
var a = (double)principal * ((r * q) / (q - 1));
return (decimal)a;
}
public static List<string[]> GetSampleParamsList()
{
return new List<string[]>()
{
new string[] { "@data-templates/Closing Disclosure", "Generate the closing disclosure page of a loan application", null },
new string[] { "@use-data-tpl/Closing Disclosure", "Generate the closing disclosure page of a loan application", null },
};
}
}
}