private String startApplication()
        {
            Console.Out.WriteLine("Program running...");

            String text = "";

            //Investor Lock Date

            /* DateFieldCriterion invLockEmpty = new DateFieldCriterion();
             * invLockEmpty.FieldName = "Fields.2220";
             * invLockEmpty.Value = DateFieldCriterion.EmptyDate;
             * invLockEmpty.MatchType = OrdinalFieldMatchType.Equals;
             *
             * //non empty CTC date
             * DateFieldCriterion ctcNonEmpty = new DateFieldCriterion();
             * ctcNonEmpty.FieldName = "Fields.Log.MS.Date.Clear to Close";
             * ctcNonEmpty.Value = DateFieldCriterion.NonEmptyDate;
             * ctcNonEmpty.MatchType = OrdinalFieldMatchType.Equals;
             *
             * //empty funding date
             * DateFieldCriterion fundDateEmpty = new DateFieldCriterion();
             * fundDateEmpty.FieldName = "Fields.Log.MS.Date.Funding";
             * fundDateEmpty.Value = DateFieldCriterion.EmptyDate;
             * fundDateEmpty.MatchType = OrdinalFieldMatchType.Equals;
             *
             * //or
             * DateFieldCriterion fundDateNotEmpty = new DateFieldCriterion();
             * fundDateNotEmpty.FieldName = "Fields.Log.MS.Date.Funding";
             * fundDateNotEmpty.Value = DateFieldCriterion.NonEmptyDate;
             * fundDateNotEmpty.MatchType = OrdinalFieldMatchType.Equals;*/

            StringFieldCriterion folderCri = new StringFieldCriterion();

            folderCri.FieldName = "Loan.LoanFolder";
            folderCri.Value     = "My Pipeline";
            folderCri.MatchType = StringFieldMatchType.Exact;

            StringFieldCriterion folderCri2 = new StringFieldCriterion();

            folderCri2.FieldName = "Loan.LoanFolder";
            folderCri2.Value     = "Completed Loans";
            folderCri2.MatchType = StringFieldMatchType.Exact;

            DateFieldCriterion purchDateNotEmpty = new DateFieldCriterion();

            purchDateNotEmpty.FieldName = "Fields.Log.MS.Date.Purchased";
            purchDateNotEmpty.Value     = DateFieldCriterion.NonEmptyDate;
            purchDateNotEmpty.MatchType = OrdinalFieldMatchType.Equals;

            DateFieldCriterion purchDateThisMonth = new DateFieldCriterion();

            purchDateThisMonth.FieldName = "Fields.Log.MS.Date.Purchased";
            purchDateThisMonth.Value     = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            purchDateThisMonth.MatchType = OrdinalFieldMatchType.GreaterThan;

            QueryCriterion fullQuery = purchDateThisMonth.And(purchDateNotEmpty).And(folderCri.Or(folderCri2));

            StringList fields = new StringList();
            Row        row    = new Row();

            row.setHeader(true);

            row.add("Investor");
            fields.Add("Fields.2825");

            row.add("Inv #");
            fields.Add("Fields.2826");

            row.add("Loan #");
            fields.Add("Fields.364");

            row.add("Borrower Name");
            fields.Add("Fields.4002");
            fields.Add("Fields.4000");

            row.add("Address");
            fields.Add("Fields.11");

            row.add("Rate");
            fields.Add("Fields.3");

            row.add("Loan Amount");
            fields.Add("Fields.1109");

            row.add("Funded");
            fields.Add("Fields.Log.MS.Date.Funding");

            row.add("Purchased");
            fields.Add("Fields.Log.MS.Date.Purchased");

            // row.add("Base YSP");
            fields.Add("Fields.2232");

            // row.add("Total Adj");
            fields.Add("Fields.2273");

            //  row.add("Net YSP");
            fields.Add("Fields.2274");

            // row.add("Net SRP");
            fields.Add("Fields.2276");

            row.add("Total Rebate");

            row.add("Rebate");

            row.add("Investor Interest");
            fields.Add("Fields.2834");

            row.add("Investor Fees");
            fields.Add("Fields.2373");
            fields.Add("Fields.2375");
            fields.Add("Fields.2377");
            fields.Add("Fields.2379");
            fields.Add("Fields.2381");
            fields.Add("Fields.2383");

            row.add("Appraisal");
            fields.Add("Fields.641");

            row.add("Credit Fee");
            fields.Add("Fields.640");

            row.add("Interest");
            fields.Add("Fields.334");

            row.add("Escrow Fees");
            fields.Add("Fields.NEWHUD2.X11");
            fields.Add("Fields.NEWHUD2.X14");
            fields.Add("Fields.NEWHUD.X808");
            fields.Add("Fields.NEWHUD.X810");
            fields.Add("Fields.NEWHUD.X812");
            fields.Add("Fields.NEWHUD.X814");
            fields.Add("Fields.NEWHUD.X816");
            fields.Add("Fields.NEWHUD.X818");
            fields.Add("Fields.NEWHUD.X639");

            row.add("Title Fees");
            fields.Add("Fields.NEWHUD.X572");
            fields.Add("Fields.NEWHUD.X639");
            fields.Add("Fields.NEWHUD.X215");
            fields.Add("Fields.NEWHUD.X216");
            fields.Add("Fields.1763");
            fields.Add("Fields.1768");
            fields.Add("Fields.1773");
            fields.Add("Fields.1778");
            fields.Add("Fields.NEWHUD.X1604");
            fields.Add("Fields.NEWHUD.X1612");

            row.add("Recording Fee");
            fields.Add("Fields.NEWHUD.X607");

            row.add("Processor");
            fields.Add("Fields.362");

            row.add("Loan Officer");
            fields.Add("Fields.317");

            //loan purpose
            fields.Add("Fields.19");

            report.Add(row);


            SortCriterionList sortOrder = new SortCriterionList();

            sortOrder.Add(new SortCriterion("Fields.Log.MS.Date.Purchased", SortOrder.Ascending));

            LoanReportCursor results = Program.mySession.getSession().Reports.OpenReportCursor(fields, fullQuery, sortOrder);

            Console.Out.WriteLine(results.ToString());

            int count = results.Count;

            Console.Out.WriteLine("Total Files" + ": " + count);


            //end program if results empty
            if (count == 0)
            {
                results.Close();
                Environment.Exit(0);
            }
            //local variables
            double rebateTotal   = 0;
            double escrowTotal   = 0;
            double titleTotal    = 0;
            double interestTotal = 0;
            //double warehouseFeeTotal = 0;
            //double warehouseIntTotal = 0;
            double appraisalTotal   = 0;
            double creditTotal      = 0;
            double recordingTotal   = 0;
            double investorFeeTotal = 0;
            double investorIntTotal = 0;

            text += "Total Files Purchased this Month-to-Date: <b>" + count + "</b><br/><br/>";
            text += "<div class='small'><ul>Fees and Income not included" +
                    "<li>warehouse fees and interest</li>" +
                    "<li>payoff fees refunded to borrower</li>" +
                    "</ul> </div>";

            //iterate through query and format
            foreach (LoanReportData data in results)
            {
                Row line = new Row();
                line.add(data["Fields.2825"].ToString());
                line.add(data["Fields.2826"].ToString());
                line.add(data["Fields.364"].ToString());

                line.add((data["Fields.4002"].ToString() + " " + data["Fields.4000"].ToString()).ToUpper());
                line.add(data["Fields.11"].ToString().ToUpper());
                line.add(Convert.ToDouble(data["Fields.3"]).ToString("F3"));
                int loanAmt = Convert.ToInt32(data["Fields.1109"]);
                line.add(loanAmt.ToString("C"));

                line.add(Convert.ToDateTime(data["Fields.Log.MS.Date.Funding"]).ToShortDateString());
                line.add(Convert.ToDateTime(data["Fields.Log.MS.Date.Purchased"]).ToShortDateString());

                //   line.add(Utility.toPercent(data["Fields.2232"]));
                //  line.add(Utility.toPercent(data["Fields.2273"]));
                //  line.add(Utility.toPercent(data["Fields.2274"]));
                //  line.add(Utility.toPercent(data["Fields.2276"]));
                Double rebate = (Convert.ToDouble(data["Fields.2274"]) + Convert.ToDouble(data["Fields.2276"]));
                if (rebate <= 0.0001)
                {
                    line.add(rebate.ToString("F3"), 1);
                    line.add(" ");
                }
                else
                {
                    line.add(rebate.ToString("F3"));
                    Double rebateAmt = (rebate - 100) * loanAmt * .01;
                    if (rebateAmt <= 0)
                    {
                        line.add(rebateAmt.ToString("C"), 2);
                    }
                    else
                    {
                        line.add(rebateAmt.ToString("C"));
                    }
                    rebateTotal += rebateAmt;
                }
                double investorInt = Convert.ToDouble(data["Fields.2834"]);
                line.add((investorInt * -1).ToString("C"));
                investorIntTotal += investorInt;


                double investorFees = Convert.ToDouble(data["Fields.2373"]) + Convert.ToDouble(data["Fields.2375"])
                                      + Convert.ToDouble(data["Fields.2377"]) + Convert.ToDouble(data["Fields.2379"])
                                      + Convert.ToDouble(data["Fields.2381"]) + Convert.ToDouble(data["Fields.2383"]);
                line.add((investorFees * -1).ToString("C"));
                investorFeeTotal += investorFees;

                double appraisalFee = (Convert.ToDouble(data["Fields.641"]));
                line.add((-1 * appraisalFee).ToString("C")); //appraisal fee
                appraisalTotal += appraisalFee;

                double creditFee = (Convert.ToDouble(data["Fields.640"]));
                line.add((creditFee * -1).ToString("C")); //Credit fee
                creditTotal += creditFee;

                double interest = Convert.ToDouble(data["Fields.334"]);
                line.add((interest).ToString("C")); //interest
                interestTotal += interest;


                String purpose = data["Fields.19"].ToString();
                if (purpose.Contains("Refi"))
                {
                    double escrowFees = Convert.ToDouble(data["Fields.NEWHUD2.X11"]) +
                                        Convert.ToDouble(data["Fields.NEWHUD.X808"]) + Convert.ToDouble(data["Fields.NEWHUD2.X14"]) +
                                        Convert.ToDouble(data["Fields.NEWHUD.X810"]) + Convert.ToDouble(data["Fields.NEWHUD.X812"]) +
                                        Convert.ToDouble(data["Fields.NEWHUD.X814"]) + Convert.ToDouble(data["Fields.NEWHUD.X816"]) +
                                        Convert.ToDouble(data["Fields.NEWHUD.X818"]);
                    line.add(escrowFees.ToString("C"));
                    escrowTotal += escrowFees;

                    double titleFees =
                        Convert.ToDouble(data["Fields.NEWHUD.X215"]) + Convert.ToDouble(data["Fields.NEWHUD.X216"]) +
                        Convert.ToDouble(data["Fields.1763"]) + Convert.ToDouble(data["Fields.1768"]) +
                        Convert.ToDouble(data["Fields.NEWHUD.X639"]) +
                        Convert.ToDouble(data["Fields.1773"]) + Convert.ToDouble(data["Fields.1778"]) +
                        Convert.ToDouble(data["Fields.NEWHUD.X1604"]) + Convert.ToDouble(data["Fields.NEWHUD.X1612"]);
                    titleTotal += titleFees;

                    //Convert.ToDouble(data["Fields.NEWHUD.X572"]) owner's title
                    line.add((-1 * titleFees).ToString("C"));

                    double recordingFee = Convert.ToDouble(data["Fields.NEWHUD.X607"]);
                    line.add((recordingFee * -1).ToString("C"));
                    recordingTotal += recordingFee;
                }
                else
                {
                    line.add("Purchase");
                    line.add("Purchase");
                    line.add("Purchase");
                }



                line.add(data["Fields.362"].ToString());
                line.add(data["Fields.317"].ToString());



                report.Add(line);
                Console.Out.Write("."); //status bar
            }

            //process last row
            Row totals = new Row();

            totals.setHeader(true);
            totals.add("");
            totals.add("");
            totals.add("");
            totals.add("");
            totals.add("");
            totals.add("");
            totals.add("");
            totals.add("Count");
            totals.add(count.ToString());
            totals.add("Total");
            totals.add(rebateTotal.ToString("C"));
            totals.add((-1 * investorIntTotal).ToString("C"));
            totals.add((-1 * investorFeeTotal).ToString("C"));
            totals.add((-1 * appraisalTotal).ToString("C"));
            totals.add((-1 * creditTotal).ToString("C"));
            totals.add((-1 * interestTotal).ToString("C"));
            totals.add(escrowTotal.ToString("C"));
            totals.add((-1 * titleTotal).ToString("C"));
            totals.add((-1 * recordingTotal).ToString("C"));
            totals.add("Grand Total");
            double sum = rebateTotal - investorIntTotal - investorFeeTotal
                         - appraisalTotal - creditTotal + interestTotal + escrowTotal
                         - titleTotal - recordingTotal;

            totals.add(sum.ToString("C"));

            report.Add(totals);

            Console.Out.WriteLine("");
            results.Close();

            text += formatReport(report);

            return(text);
        }
        private String startApplication()
        {
            log.Info("Program running...");

            String text = "";


            DateFieldCriterion cri = new DateFieldCriterion();

            cri.FieldName = "Fields.Log.MS.Date.Funding";
            cri.Value     = DateFieldCriterion.NonEmptyDate;
            cri.MatchType = OrdinalFieldMatchType.Equals;

            DateFieldCriterion cri2 = new DateFieldCriterion();

            cri2.FieldName = "Fields.Log.MS.Date.Purchased";
            cri2.Value     = DateFieldCriterion.EmptyDate;
            cri2.MatchType = OrdinalFieldMatchType.Equals;

            StringFieldCriterion folderCri = new StringFieldCriterion();

            folderCri.FieldName = "Loan.LoanFolder";
            folderCri.Value     = "My Pipeline";
            folderCri.MatchType = StringFieldMatchType.Exact;

            QueryCriterion fullQuery = folderCri.And(cri.And(cri2));

            StringList fields = new StringList();

            fields.Add("Fields.VEND.X263");
            fields.Add("Fields.352");
            fields.Add("Fields.364");
            fields.Add("Fields.37");
            fields.Add("Fields.4000");
            fields.Add("Fields.1109");
            fields.Add("Fields.362");
            fields.Add("Fields.317");
            fields.Add("Fields.Log.MS.Date.Funding");
            SortCriterionList sortOrder = new SortCriterionList();

            sortOrder.Add(new SortCriterion("Fields.Log.MS.Date.Funding"));

            LoanReportCursor results = Program.mySession.getSession().Reports.OpenReportCursor(fields, fullQuery, sortOrder);

            Console.Out.WriteLine(results.ToString());

            int count = results.Count;

            log.Info("Total Files Not Purchased " + DateTime.Now.ToShortDateString() + ": " + count);

            text += "Total Files Not Purchased: <b>" + count + "</b><br/><br/>";

            //headers
            Row row = new Row();

            row.setHeader(true);
            row.add("Investor");
            row.add("Inv #");
            row.add("Loan #");
            row.add("Borrower Name");
            //row.add("First Name");
            row.add("Loan Amount");
            row.add("Processor");
            row.add("Loan Officer");
            row.add("Funding Date");
            report.Add(row);


            foreach (LoanReportData data in results)
            {
                Row line = new Row();
                line.add(data["Fields.VEND.X263"].ToString());
                line.add(data["Fields.352"].ToString());
                line.add(data["Fields.364"].ToString());
                line.add(data["Fields.37"].ToString().ToUpper() + ", " + data["Fields.4000"].ToString().ToUpper());
                line.add(Convert.ToInt32(data["Fields.1109"]).ToString("C"));
                line.add(data["Fields.362"].ToString());
                line.add(data["Fields.317"].ToString());
                line.add(Math.Ceiling(DateTime.Now.Subtract(Convert.ToDateTime(data["Fields.Log.MS.Date.Funding"])).TotalDays).ToString());

                report.Add(line);
                Console.Out.Write("."); //status bar
            }
            Console.Out.WriteLine("");
            results.Close();

            text += formatReport(report);

            return(text);
        }
        private String startApplication()
        {
            log.Info("Program running...");

            String text = "";


            DateFieldCriterion cri = new DateFieldCriterion();

            cri.FieldName = "Fields.Log.MS.Date.Clear to Close";
            cri.Value     = DateFieldCriterion.EmptyDate;
            cri.MatchType = OrdinalFieldMatchType.Equals;

            DateFieldCriterion cri2 = new DateFieldCriterion();

            cri2.FieldName = "Fields.Log.MS.Date.Started";
            cri2.Value     = DateTime.Today.AddDays(-60); //last 60 days
            cri2.MatchType = OrdinalFieldMatchType.GreaterThanOrEquals;

            StringFieldCriterion folderCri = new StringFieldCriterion();

            folderCri.FieldName = "Loan.LoanFolder";
            folderCri.Value     = "My Pipeline";
            folderCri.MatchType = StringFieldMatchType.Exact;

            QueryCriterion fullQuery = folderCri.And(cri.And(cri2));

            StringList fields = new StringList();
            Row        row    = new Row();

            row.setHeader(true);

            row.add("Milestone");
            fields.Add("Fields.Log.MS.CurrentMilestone");

            row.add("Date Started");
            fields.Add("Fields.Log.MS.Date.Started");

            row.add("Date Submitted");
            fields.Add("Fields.Log.MS.Date.Submittal");

            row.add("Loan #");
            fields.Add("Fields.364");

            row.add("Borrower Name");
            fields.Add("Fields.4002");
            fields.Add("Fields.4000");

            row.add("Address");
            fields.Add("Fields.11");

            row.add("Loan Amount");
            fields.Add("Fields.1109");

            row.add("Purpose");
            fields.Add("Fields.19");

            row.add("Term");
            fields.Add("Fields.4");

            row.add("Rate");
            fields.Add("Fields.3");

            row.add("Locked Date");
            fields.Add("Fields.761");

            row.add("Processor");
            fields.Add("Fields.362");

            row.add("Loan Officer");
            fields.Add("Fields.317");

            report.Add(row);


            SortCriterionList sortOrder = new SortCriterionList();

            sortOrder.Add(new SortCriterion("Fields.Log.MS.Date.Started", SortOrder.Ascending));

            LoanReportCursor results = Program.mySession.getSession().Reports.OpenReportCursor(fields, fullQuery, sortOrder);

            Console.Out.WriteLine(results.ToString());

            int count = results.Count;

            log.Info("Total Files Not CTC " + ": " + count);

            text += "Total Files Not CTC last 60 days: <b>" + count + "</b><br/><br/>";


            //iterate through query and format
            foreach (LoanReportData data in results)
            {
                Row line = new Row();
                line.add(data["Fields.Log.MS.CurrentMilestone"].ToString());
                line.add(Convert.ToDateTime(data["Fields.Log.MS.Date.Started"]).ToShortDateString());
                line.add(Utility.toShortDate(data["Fields.Log.MS.Date.Submittal"]));
                line.add(data["Fields.364"].ToString());
                line.add(data["Fields.4002"].ToString().ToUpper() + ", " + data["Fields.4000"].ToString().ToUpper());
                line.add(data["Fields.11"].ToString().ToUpper());
                line.add(Convert.ToInt32(data["Fields.1109"]).ToString("C"));
                line.add(data["Fields.19"].ToString());
                line.add(Convert.ToInt32(data["Fields.4"]).ToString());
                line.add(Convert.ToDouble(data["Fields.3"]).ToString("F3"));
                line.add(Utility.toShortDate(data["Fields.761"]));
                line.add(data["Fields.362"].ToString());
                line.add(data["Fields.317"].ToString());



                report.Add(line);
                Console.Out.Write("."); //status bar
            }
            Console.Out.WriteLine("");
            results.Close();

            text += formatReport(report);

            return(text);
        }
Ejemplo n.º 4
0
        private String startApplication()
        {
            log.Info("Program running...");

            String text = "";

            //Investor Lock Date
            DateFieldCriterion invLockEmpty = new DateFieldCriterion();

            invLockEmpty.FieldName = "Fields.2220";
            invLockEmpty.Value     = DateFieldCriterion.EmptyDate;
            invLockEmpty.MatchType = OrdinalFieldMatchType.Equals;

            //non empty CTC date
            DateFieldCriterion ctcNonEmpty = new DateFieldCriterion();

            ctcNonEmpty.FieldName = "Fields.Log.MS.Date.Clear to Close";
            ctcNonEmpty.Value     = DateFieldCriterion.NonEmptyDate;
            ctcNonEmpty.MatchType = OrdinalFieldMatchType.Equals;

            //empty funding date
            DateFieldCriterion fundDateEmpty = new DateFieldCriterion();

            fundDateEmpty.FieldName = "Fields.Log.MS.Date.Funding";
            fundDateEmpty.Value     = DateFieldCriterion.EmptyDate;
            fundDateEmpty.MatchType = OrdinalFieldMatchType.Equals;

            //or
            DateFieldCriterion fundDateNotEmpty = new DateFieldCriterion();

            fundDateNotEmpty.FieldName = "Fields.Log.MS.Date.Funding";
            fundDateNotEmpty.Value     = DateFieldCriterion.NonEmptyDate;
            fundDateNotEmpty.MatchType = OrdinalFieldMatchType.Equals;

            StringFieldCriterion folderCri = new StringFieldCriterion();

            folderCri.FieldName = "Loan.LoanFolder";
            folderCri.Value     = "My Pipeline";
            folderCri.MatchType = StringFieldMatchType.Exact;

            DateFieldCriterion purchDateEmpty = new DateFieldCriterion();

            purchDateEmpty.FieldName = "Fields.Log.MS.Date.Purchased";
            purchDateEmpty.Value     = DateFieldCriterion.EmptyDate;
            purchDateEmpty.MatchType = OrdinalFieldMatchType.Equals;

            QueryCriterion fullQuery = folderCri.And((ctcNonEmpty.And(fundDateEmpty)));

            StringList fields = new StringList();
            Row        row    = new Row();

            row.setHeader(true);

            row.add("Investor");
            fields.Add("Fields.2825");

            row.add("Inv #");
            fields.Add("Fields.2826");

            row.add("Loan #");
            fields.Add("Fields.364");

            row.add("Borrower Name");
            fields.Add("Fields.4002");
            fields.Add("Fields.4000");

            row.add("Address");
            fields.Add("Fields.11");

            row.add("Rate");
            fields.Add("Fields.3");

            row.add("Loan Amount");
            fields.Add("Fields.1109");

            row.add("Milestone");
            fields.Add("Fields.Log.MS.CurrentMilestone");

            row.add("Date Started");
            fields.Add("Fields.Log.MS.Date.Started");

            row.add("Base YSP");
            fields.Add("Fields.2232");

            row.add("Total Adj");
            fields.Add("Fields.2273");

            row.add("Net YSP");
            fields.Add("Fields.2274");

            row.add("Net SRP");
            fields.Add("Fields.2276");

            row.add("Total Rebate");


            row.add("Locked");
            fields.Add("Fields.2400");

            row.add("Victoria Lock Date");
            fields.Add("Fields.761");
            fields.Add("Fields.2149");

            row.add("Inv Lock Date");
            fields.Add("Fields.2220");

            row.add("Inv Lock Exp");
            fields.Add("Fields.2222");

            row.add("P/S/I");
            fields.Add("Fields.1811");

            row.add("Purpose");
            fields.Add("Fields.19");

            row.add("Processor");
            fields.Add("Fields.362");

            row.add("Loan Officer");
            fields.Add("Fields.317");

            report.Add(row);


            SortCriterionList sortOrder = new SortCriterionList();

            sortOrder.Add(new SortCriterion("Fields.Log.MS.CurrentMilestone", SortOrder.Descending));
            sortOrder.Add(new SortCriterion("Fields.2149", SortOrder.Ascending));

            LoanReportCursor results = Program.mySession.getSession().Reports.OpenReportCursor(fields, fullQuery, sortOrder);

            Console.Out.WriteLine(results.ToString());

            int count = results.Count;

            log.Info("Total Files" + ": " + count);

            text += "Total Files CTC, Not Funded: <b>" + count + "</b><br/><br/>";


            //iterate through query and format
            foreach (LoanReportData data in results)
            {
                Row line = new Row();
                line.add(data["Fields.2825"].ToString());
                line.add(data["Fields.2826"].ToString());
                line.add(data["Fields.364"].ToString());

                line.add((data["Fields.4002"].ToString() + " " + data["Fields.4000"].ToString()).ToUpper());
                line.add(data["Fields.11"].ToString().ToUpper());
                line.add(Convert.ToDouble(data["Fields.3"]).ToString("F3"));
                line.add(Convert.ToInt32(data["Fields.1109"]).ToString("C"));


                line.add(data["Fields.Log.MS.CurrentMilestone"].ToString());

                line.add(Convert.ToDateTime(data["Fields.Log.MS.Date.Started"]).ToShortDateString());

                line.add(Utility.toPercent(data["Fields.2232"]));
                line.add(Utility.toPercent(data["Fields.2273"]));
                line.add(Utility.toPercent(data["Fields.2274"]));
                line.add(Utility.toPercent(data["Fields.2276"]));

                line.add((Convert.ToDouble(data["Fields.2274"]) + Convert.ToDouble(data["Fields.2276"])).ToString("F3"));


                line.add(data["Fields.2400"].ToString());
                line.add(Utility.toShortDate(data["Fields.2149"]));
                line.add(Utility.toShortDate(data["Fields.2220"]));
                line.add(Utility.toShortDate(data["Fields.2222"]));


                //occupancy
                line.add(data["Fields.1811"].ToString().Substring(0, 1));

                String purpose = data["Fields.19"].ToString();
                if (purpose.Equals("Cash-Out Refinance"))
                {
                    line.add("C/O Refi");
                }
                else if (purpose.Equals("NoCash-Out Refinance"))
                {
                    line.add("No C/O Refi");
                }
                else if (purpose.Equals("Purchase"))
                {
                    line.add("Purch");
                }
                else
                {
                    line.add(purpose);
                }

                line.add(data["Fields.362"].ToString());
                line.add(data["Fields.317"].ToString());



                report.Add(line);
                Console.Out.Write("."); //status bar
            }
            Console.Out.WriteLine("");
            results.Close();

            text += formatReport(report);

            return(text);
        }
        private String startApplication()
        {
            log.Info("Program running...");

            String text = "";


            DateFieldCriterion cri = new DateFieldCriterion();

            cri.FieldName = "Fields.Log.MS.Date.Clear to Close";
            cri.Value     = DateFieldCriterion.EmptyDate;
            cri.MatchType = OrdinalFieldMatchType.Equals;

            DateFieldCriterion cri2 = new DateFieldCriterion();

            cri2.FieldName = "Fields.Log.MS.Date.Started";
            cri2.Value     = DateTime.Today.AddDays(-1 * days); //last num days
            cri2.MatchType = OrdinalFieldMatchType.GreaterThanOrEquals;

            StringFieldCriterion folderCri = new StringFieldCriterion();

            folderCri.FieldName = "Loan.LoanFolder";
            folderCri.Value     = "My Pipeline";
            folderCri.MatchType = StringFieldMatchType.Exact;

            QueryCriterion fullQuery = folderCri.And(cri.And(cri2));

            StringList fields = new StringList();
            Row        header = new Row();

            header.setHeader(true);
            header.add("Milestone");
            fields.Add("Fields.Log.MS.CurrentMilestone");

            header.add("Date Started");
            fields.Add("Fields.Log.MS.Date.Started");

            header.add("Date Submitted");
            fields.Add("Fields.Log.MS.Date.Submittal");

            header.add("Loan #");
            fields.Add("Fields.364");

            header.add("Borrower Name");
            fields.Add("Fields.4002");
            fields.Add("Fields.4000");

            header.add("Address");
            fields.Add("Fields.11");

            header.add("Loan Amount");
            fields.Add("Fields.1109");

            header.add("Purpose");
            fields.Add("Fields.19");

            header.add("Term");
            fields.Add("Fields.4");

            header.add("Rate");
            fields.Add("Fields.3");

            header.add("Locked Date");
            fields.Add("Fields.761");

            header.add("Processor");
            fields.Add("Fields.362");

            header.add("Loan Officer");
            fields.Add("Fields.317");

            header.add("Milestone Notes");
            fields.Add("Fields.Log.MS.Stage");
            fields.Add("Fields.Log.MS.Comments.Approval");
            fields.Add("Fields.Log.MS.Comments.Clear to Close");
            fields.Add("Fields.Log.MS.Comments.Completion");
            fields.Add("Fields.Log.MS.Comments.Cond Approval");
            fields.Add("Fields.Log.MS.Comments.Docs Drawn");
            fields.Add("Fields.Log.MS.Comments.Docs Signing");
            fields.Add("Fields.Log.MS.Comments.Funding");
            fields.Add("Fields.Log.MS.Comments.Processing");
            fields.Add("Fields.Log.MS.Comments.Purchased");
            fields.Add("Fields.Log.MS.Comments.Ready for Docs");
            fields.Add("Fields.Log.MS.Comments.Resubmittal");
            fields.Add("Fields.Log.MS.Comments.Sent to Title");
            fields.Add("Fields.Log.MS.Comments.Shipping");
            fields.Add("Fields.Log.MS.Comments.Started");
            fields.Add("Fields.Log.MS.Comments.Submittal");


            report.Add(header);


            SortCriterionList sortOrder = new SortCriterionList();

            sortOrder.Add(new SortCriterion("Fields.362", SortOrder.Ascending));
            sortOrder.Add(new SortCriterion("Fields.Log.MS.Date.Started", SortOrder.Descending));

            LoanReportCursor results = Program.mySession.getSession().Reports.OpenReportCursor(fields, fullQuery, sortOrder);

            //Console.Out.WriteLine(results.ToString());

            int count = results.Count;

            log.Info("Total Files" + ": " + count);

            text += "Total Files:<b>" + count + "</b> active last " + days + " days<br/><br/>";

            String currProcessor = "";//"null" string

            count = 0;

            //iterate through query and format
            foreach (LoanReportData data in results)
            {
                if (!currProcessor.Equals(data["Fields.362"].ToString()))
                {
                    Row subheader = new Row();
                    subheader.setHeader(true);
                    subheader.add("Processor: ");
                    subheader.add(currProcessor);
                    subheader.add("Count: " + count);
                    report.Add(subheader);
                    text += formatReport(report);
                    text += "<br/><br/>";

                    // reset
                    count = 0;
                    report.Clear();
                    currProcessor = data["Fields.362"].ToString();

                    report.Add(header);
                }
                count++;
                Row line = new Row();
                line.add(data["Fields.Log.MS.CurrentMilestone"].ToString());
                line.add(Convert.ToDateTime(data["Fields.Log.MS.Date.Started"]).ToShortDateString());

                if (Math.Ceiling(DateTime.Now.Subtract(Convert.ToDateTime(data["Fields.Log.MS.Date.Started"])).TotalDays) > 60)
                {
                    line.setWarn(true);
                }
                line.add(Utility.toShortDate(data["Fields.Log.MS.Date.Submittal"]));
                line.add(data["Fields.364"].ToString());
                line.add(data["Fields.4002"].ToString().ToUpper() + ", " + data["Fields.4000"].ToString().ToUpper());
                line.add(data["Fields.11"].ToString().ToUpper());
                line.add(Convert.ToInt32(data["Fields.1109"]).ToString("C"));
                line.add(data["Fields.19"].ToString());
                line.add(Convert.ToInt32(data["Fields.4"]).ToString());
                line.add(Convert.ToDouble(data["Fields.3"]).ToString("F3"));
                line.add(Utility.toShortDate(data["Fields.761"]));
                line.add(data["Fields.362"].ToString());
                line.add(data["Fields.317"].ToString());
                //milestone comments
                string nextMilestone = data["Fields.Log.MS.Stage"].ToString();

                //string notes = "";
                StringList log = new StringList();
                log.Add(data["Fields.Log.MS.Comments.Started"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Processing"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Submittal"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Cond Approval"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Resubmittal"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Clear to Close"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Ready for Docs"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Docs Drawn"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Docs Signing"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Funding"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Purchased"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Shipping"].ToString());
                log.Add(data["Fields.Log.MS.Comments.Completion"].ToString());
                String notes = "";
                foreach (string l in log)
                {
                    if (l.Trim().Length != 0)
                    {
                        using (StringReader reader = new StringReader(l.ToString()))
                        {
                            string li = "";
                            while ((li = reader.ReadLine()) != null)
                            {
                                notes += li.Trim() + "<br/>";
                            }
                        }
                    }
                }
                line.add(notes);

                if (Program.debug)
                {
                    line.add(data.Guid);
                }


                report.Add(line);
                Console.Out.Write("."); //status bar
            }
            Console.Out.WriteLine("");
            results.Close();

            //text += formatReport(report);

            return(text);
        }