private StringFieldCriterion selectLoanFolder()
        {
            StringFieldCriterion folderCri = new StringFieldCriterion();

            folderCri.FieldName = "Loan.LoanFolder";
            folderCri.MatchType = StringFieldMatchType.Exact;
            switch (reportNum)
            {
            case 8:
                folderCri.Value = "My Pipeline";
                break;

            case 9:
                folderCri.Value = "Completed Loans";
                break;

            case 10:
                folderCri.Value = "Serviced Loans";
                break;

            case 11:
                folderCri.Value = "Adverse Loans";
                break;

            case 12:
                folderCri.Value = "Prospective Clients";
                break;

            default:
                break;
            }
            log.Info("updating '" + folderCri.Value + "' folder");
            return(folderCri);
        }
        /// <summary>
        /// returns the guid for a given loan_number, using Encompass's search function
        /// </summary>
        /// <param name="session">an active Encompass session</param>
        /// <param name="loan_number">loan number of the loan</param>
        /// <returns>the guid (as a string) or String.Empty if not found.</returns>
        public static string GetGuidForLoanNumber(Session session, string loan_number)
        {
            StringFieldCriterion sfc = new StringFieldCriterion("Loan.LoanNumber", loan_number,
                                                                StringFieldMatchType.Exact, true);
            LoanIdentityList loanList = session.Loans.Query(sfc);
            string           guid     = String.Empty;

            //Loan.LoanNumber SHOULD be unique, but there is a timing bug
            //If multiple loans found, retun the last one
            foreach (LoanIdentity id in loanList)
            {
                guid = id.Guid;
            }
            return(guid);
        }
Example #3
0
        /// <summary>
        /// Entry point for the SDK Application
        /// </summary>
        static void Main(string[] args)
        {
            // Start the Encompass Session using a user's credentials
            Session session = new Session();

            session.Start(
                String.Format("https://{0}.ea.elliemae.net${0}", ConfigurationManager.AppSettings["InstanceID"]),
                ConfigurationManager.AppSettings["UserID"],
                ConfigurationManager.AppSettings["Password"]
                );

            // Query for a Loan
            StringFieldCriterion cri = new StringFieldCriterion()
            {
                FieldName = "Loan.LoanNumber",
                Value     = "1801EM000070"
            };

            // Run the query to get the Loan Identifier
            LoanIdentityList loanIds = session.Loans.Query(cri);

            if (loanIds.Count != 1)
            {
                Console.WriteLine("Loan number did not return a unique match");
                return;
            }

            // Open and lock the Loan
            string loanGuid = loanIds[0].Guid;

            using (Loan loan = session.Loans.Open(loanGuid, true, true))
            {
                loan.Fields["1887"].Value = DateTime.Today;
                loan.Commit();
                loan.Unlock();
            }

            // Close the session
            session.End();
        }
        public static LoanMetadata GetLoanMetadata(Session session, string loanGuid)
        {
            LoanMetadata meta = null;
            var          guid = new StringFieldCriterion();

            guid.FieldName = "GUID";
            guid.MatchType = StringFieldMatchType.CaseInsensitive;
            guid.Value     = loanGuid;

            var fields = new StringList();

            fields.Add(FIELD_LOAN_LASTMODIFIED);
            fields.Add(FIELD_LOAN_GUID);
            fields.Add(FIELD_LOAN_FOLDER);
            fields.Add(FIELD_LOAN_NUMBER);

            try
            {
                // Using Reports so that we can accomodate LoanFileSeqeuenceNumber when we add it to the reporting database
                var cursor = session.Reports.OpenReportCursor(fields, guid);
                if (cursor.Count > 0)
                {
                    var item = cursor.GetItem(0);
                    meta = new LoanMetadata
                    {
                        Guid         = (string)item[FIELD_LOAN_GUID],
                        LoanNumber   = (string)item[FIELD_LOAN_NUMBER],
                        LoanFolder   = (string)item[FIELD_LOAN_FOLDER],
                        LastModified = (DateTime)item[FIELD_LOAN_LASTMODIFIED]
                    };
                }
                cursor.Close();
            }
            catch
            {
                // noop; return null
            }
            return(meta);
        }
        public static Loan OpenLoanFromLoanNumber(Session session, string loan_number)
        {
            StringFieldCriterion sfc = new StringFieldCriterion("Loan.LoanNumber", loan_number,
                StringFieldMatchType.Exact, true);
            LoanIdentityList loanList = session.Loans.Query(sfc);
            string guid = null;

            //Loan.LoanNumber SHOULD be unique, but there is a timing bug
            //If multiple loans found, retun the last one
            foreach (LoanIdentity id in loanList)
            {
                guid = id.Guid;
            }
            if (!String.IsNullOrWhiteSpace(guid))
            {
                return session.Loans.Open(guid);
            }
            else
            {
                return null;
            }
        }
        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);
        }
Example #7
0
        private void BatchUpdater()
        {
            Session newSession = new Session();

            newSession.Start("https://TEBE11147866.ea.elliemae.net$TEBE11147866", "admin", "Y0uT@lk!ngT0M3?");
            String currentUser = EncompassApplication.Session.UserID;

            //Excel prep and call
            Microsoft.Office.Interop.Excel.Application userApp       = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook    userWorkbook  = userApp.Workbooks.Open(@"\\ftwfs02\Groups\POS\Encompass Support\Batch_Updater1.csv");
            Microsoft.Office.Interop.Excel._Worksheet  userWorksheet = userWorkbook.Sheets[1];
            Microsoft.Office.Interop.Excel.Range       userRange     = userWorksheet.UsedRange;
            //userWorksheet.Cells.NumberFormat = "General";
            try
            {
                //set shortcut for loan call
                Loan loan = EncompassApplication.CurrentLoan;

                //row/column setup
                int rCnt     = 1;
                int cCnt     = 1;
                int rowCount = userRange.Rows.Count;
                int colCount = userRange.Columns.Count;

                string   r1c2string = "";
                string   r1c3string = "";
                string   r1c4string = "";
                string   r1c5string = "";
                string   r1c6string = "";
                var      batchT     = loan.Fields["CX.PC.BATCH.TYPE"].Value;
                string   batchType  = batchT.ToString();
                DateTime dateRan    = new DateTime();
                dateRan = DateTime.Now;


                double colData1 = 0;
                string colDatSt = colData1.ToString();

                cCnt++;
                var r1c2 = userWorksheet.Cells[rCnt, cCnt].Value2;
                r1c2string = r1c2.ToString();
                cCnt++;
                var r1c3 = userWorksheet.Cells[rCnt, cCnt].Value2;
                if (r1c3 != null)
                {
                    r1c3string = r1c3.ToString();
                    cCnt++;
                }
                var r1c4 = userWorksheet.Cells[rCnt, cCnt].Value2;
                if (r1c4 != null)
                {
                    r1c4string = r1c4.ToString();
                    cCnt++;
                }
                var r1c5 = userWorksheet.Cells[rCnt, cCnt].Value2;
                if (r1c5 != null)
                {
                    r1c5string = r1c5.ToString();
                    cCnt++;
                }
                var r1c6 = userWorksheet.Cells[rCnt, cCnt].Value2;
                if (r1c6 != null)
                {
                    r1c6string = r1c6.ToString();
                    cCnt++;
                }


                cCnt = 1;


                rCnt = 2;
                cCnt = 2;
                var    colData2       = userWorksheet.Cells[rCnt, cCnt].Text;
                string colData2string = "";
                cCnt++;
                var    colData3       = userWorksheet.Cells[rCnt, cCnt].Text;
                string colData3string = "";
                cCnt++;
                var    colData4       = userWorksheet.Cells[rCnt, cCnt].Text;
                string colData4string = "";
                cCnt++;
                var    colData5       = userWorksheet.Cells[rCnt, cCnt].Text;
                string colData5string = "";
                cCnt++;
                var    colData6       = userWorksheet.Cells[rCnt, cCnt].Text;
                string colData6string = "";
                cCnt = 1;


                for (rCnt = 2; rCnt <= rowCount; rCnt++)
                {
                    if (userWorksheet.Cells[rCnt, cCnt].Value2 is null)
                    {
                        break;
                    }
                    colData1 = (double)userWorksheet.Cells[rCnt, cCnt].Value2;
                    colDatSt = colData1.ToString();
                    if (colData1.ToString().Substring(0, 1) == "6")
                    {
                        colDatSt = "00" + colDatSt;
                        colData1 = Convert.ToDouble(colDatSt);
                    }
                    cCnt++;

                    colData2       = userWorksheet.Cells[rCnt, cCnt].Text;
                    colData2string = colData2.ToString();

                    //Additional columns as needed
                    cCnt++;
                    colData3 = userWorksheet.Cells[rCnt, cCnt].Text;
                    if (colData3 != "")
                    {
                        colData3string = colData3.ToString();
                        cCnt++;
                    }
                    colData4 = userWorksheet.Cells[rCnt, cCnt].Text;
                    if (colData4 != "")
                    {
                        colData4string = colData4.ToString();
                        cCnt++;
                    }
                    colData5 = userWorksheet.Cells[rCnt, cCnt].Text;
                    if (colData5 != "")
                    {
                        colData5string = colData5.ToString();
                        cCnt++;
                    }
                    colData6 = userWorksheet.Cells[rCnt, cCnt].Text;
                    if (colData6 != "")
                    {
                        colData6string = colData6.ToString();
                        cCnt++;
                    }

                    cCnt = 1;

                    StringFieldCriterion cri = new StringFieldCriterion();
                    cri.FieldName = "Loan.LoanNumber";
                    cri.Value     = colDatSt;
                    BatchUpdate batch = new BatchUpdate(cri);
                    batch.Fields.Add(r1c2string, colData2string);
                    if (colData3string != "")
                    {
                        batch.Fields.Add(r1c3string, colData3string);
                    }
                    if (colData4string != "")
                    {
                        batch.Fields.Add(r1c4string, colData4string);
                    }
                    if (colData5string != "")
                    {
                        batch.Fields.Add(r1c5string, colData5string);
                    }
                    if (colData6string != "")
                    {
                        batch.Fields.Add(r1c6string, colData6string);
                    }
                    batch.Fields.Add("CX.PC.BATCH.COLL.TRACK", currentUser);
                    batch.Fields.Add("CX.PC.BATCH.COL.DATE", dateRan);
                    batch.Fields.Add("CX.PC.BATCH.IRON.MOUNTAIN", batchType);
                    EncompassApplication.Session.Loans.SubmitBatchUpdate(batch);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Something went wrong.  Please click YES to save on the next popup, rebuild the spreadsheet and run the Batch Update again.");
            }
            finally
            {
                userRange.Delete(XlDeleteShiftDirection.xlShiftUp);
                string fileName = @"\\ftwfs02\Groups\POS\Encompass Support\Batch_Updater1.csv";
                string folder   = System.IO.Path.GetDirectoryName(fileName);
                if (System.IO.Directory.Exists(folder))
                {
                    userWorkbook.Close(true, fileName, null);
                }
                userApp.Quit();
                Marshal.ReleaseComObject(userWorksheet);
                Marshal.ReleaseComObject(userWorkbook);
                Marshal.ReleaseComObject(userApp);
                newSession.End();
            }


            //userRange.Delete(XlDeleteShiftDirection.xlShiftUp);
            //string fileName = @"H:\Encompass Support\Batch_Updater2.csv";
            //string folder = System.IO.Path.GetDirectoryName(fileName);
            //if (System.IO.Directory.Exists(folder))
            //{

            //    userWorkbook.Close(true, fileName, null);
            //}

            //userApp.Quit();
            //Marshal.ReleaseComObject(userWorksheet);
            //Marshal.ReleaseComObject(userWorkbook);
            //Marshal.ReleaseComObject(userApp);
            //newSession.End();
        }
        private List <LoanActionResult> UnassignRole(IProgress <string> progress, Role roleSelected, List <string> loanNumbersToUnassign)
        {
            List <LoanActionResult> response = new List <LoanActionResult>();

            int count = 0;

            foreach (var loanNumber in loanNumbersToUnassign)
            {
                count++;
                string loanProgress = $"{count}/{loanNumbersToUnassign.Count}. {loanNumber}.";

                progress.Report($"{loanProgress} Searching for loan..");
                var loanResult = new LoanActionResult()
                {
                    WasSuccessful = true
                };
                try
                {
                    StringFieldCriterion loanNumberCri = new StringFieldCriterion();
                    loanNumberCri.FieldName = "Loan.LoanNumber";
                    loanNumberCri.Value     = loanNumber;
                    loanNumberCri.MatchType = StringFieldMatchType.Exact;
                    loanNumberCri.Include   = true;

                    QueryCriterion fullQuery = loanNumberCri;

                    LoanIdentityList ids = EncompassApplication.Session.Loans.Query(fullQuery);

                    if (ids.Count == 0) // if no loans found
                    {
                        progress.Report($"{loanProgress} Cannot find loan.");

                        loanResult.Result = $"Cannot find loan";;
                        response.Add(loanResult);

                        // logger.Info((rowIndex - 1) + "/" + (rowCount - 1) + ". Cannot find loan number \"" + loanNumberCri + "\". Going to next.");
                        continue; // skip the remainder of this iteration
                    }

                    //logger.Info((rowIndex - 1) + "/" + (rowCount - 1) + ". Opening loan guid: " + ids[0].Guid);

                    progress.Report($"{loanProgress} Opening loan..");

                    Loan currentLoan = EncompassApplication.Session.Loans.Open(ids[0].Guid);
                    loanResult.LoanNumber = currentLoan.LoanNumber;

                    if (currentLoan.GetCurrentLocks().Count > 0)
                    {
                        string msg = $"Loan opened by {currentLoan.GetCurrentLock().LockedBy}";
                        progress.Report($"{loanProgress} {msg}");

                        loanResult.Result = msg;
                        response.Add(loanResult);

                        //loanSummaryCell.Value = $"Loan opened by {currentLoan.GetCurrentLock().LockedBy}";
                        currentLoan.Close();
                        continue;
                    }

                    currentLoan.Lock();

                    bool   needToSaveLoan = false;
                    string userName       = "";
                    foreach (LoanAssociate loanAssociate in currentLoan.Associates)
                    {
                        if (loanAssociate.WorkflowRole == roleSelected)
                        {
                            if (loanAssociate.User != null)
                            {
                                userName = loanAssociate.User.FullName;
                                loanAssociate.Unassign();
                                needToSaveLoan = true;
                            }
                        }
                    }

                    if (needToSaveLoan)
                    {
                        string msg = $"'{roleSelected.Name}' role successfully unassigned";
                        progress.Report($"{loanProgress} {msg}. Saving...");

                        currentLoan.Commit();
                        loanResult.Result = msg;
                    }
                    else
                    {
                        string msg = $"'{roleSelected.Name}' role not found on loan";
                        progress.Report($"{loanProgress} {msg}.");

                        loanResult.Result = msg;
                    }

                    currentLoan.Close();
                }
                catch (Exception ex)
                {
                    loanResult.WasSuccessful = false;

                    progress.Report($"{loanProgress} ERROR HIT {ex.ToString()}.");

                    loanResult.ErrorMessage = ex.ToString();
                }

                response.Add(loanResult);
            }

            return(response);
        }
        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);
        }
Example #10
0
        private static void ConditionReport(string SellerID, string LimitedSet, string newFileName)
        {
            try
            {
                //login to server
                Session session = new Session();
                session.Start("https://be11147937.ea.elliemae.net$be11147937", "sdkreport", "CqR3Fdt3LTKwVKCr");

                using (session)
                {
                    //build loan query
                    DateFieldCriterion tpoSubmitted = new DateFieldCriterion();
                    tpoSubmitted.FieldName = "Fields.TPO.X90";
                    tpoSubmitted.Value = DateFieldCriterion.NonEmptyDate;
                    tpoSubmitted.MatchType = OrdinalFieldMatchType.Equals;
                    tpoSubmitted.Precision = DateFieldMatchPrecision.Exact;

                    StringFieldCriterion sellerID = new StringFieldCriterion();
                    sellerID.FieldName = "Fields.TPO.X15";
                    sellerID.Value = SellerID;
                    sellerID.MatchType = StringFieldMatchType.Exact;
                    if (SellerID.ToUpper().Equals("ALL"))
                    {
                        sellerID.Value = "";
                        sellerID.Include = false;                        
                    }
                    else { sellerID.Include = true; }

                    NumericFieldCriterion allCondCount = new NumericFieldCriterion();
                    allCondCount.FieldName = "Fields.UWC.ALLCOUNT";
                    allCondCount.Value = 0;
                    allCondCount.MatchType = OrdinalFieldMatchType.GreaterThan;

                    StringFieldCriterion msPurchaseAC = new StringFieldCriterion();
                    msPurchaseAC.FieldName = "Fields.Log.MS.Status.Purchase - AC";
                    msPurchaseAC.Value = "Achieved";
                    msPurchaseAC.MatchType = StringFieldMatchType.Contains;
                    msPurchaseAC.Include = false;

                    StringFieldCriterion loanFolder = new StringFieldCriterion();
                    loanFolder.FieldName = "Loan.LoanFolder";
                    loanFolder.Value = "Corr. Active";
                    loanFolder.MatchType = StringFieldMatchType.Exact;
                    loanFolder.Include = true;

                    QueryCriterion query = loanFolder.And(sellerID.And(allCondCount.And(tpoSubmitted.And(msPurchaseAC))));

                    //get loans
                    LoanIdentityList ids = session.Loans.Query(query);
                    Console.WriteLine("Found " + ids.Count + " loans");
                    if (ids.Count > 0)
                    {
                        //Found Loans build Excel file
                        FileInfo newFile = new FileInfo(@"output\" + newFileName);
                        if (newFile.Exists)
                        {
                            newFile.Delete();
                            newFile = new FileInfo(@"output\"+newFileName);
                        }
                     
                        using (ExcelPackage package = new ExcelPackage(newFile))
                        {
                            //add a new worksheet
                            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Conditions");
                            //write header row
                            worksheet.Cells["A1"].Value = "Seller Name";
                            worksheet.Cells["B1"].Value = "Seller Loan Num";
                            worksheet.Cells["C1"].Value = "DH Loan Num";
                            worksheet.Cells["D1"].Value = "Borrower Name";
                            worksheet.Cells["E1"].Value = "Property State";
                            worksheet.Cells["F1"].Value = "Loan Purpose";
                            worksheet.Cells["G1"].Value = "Occupancy";
                            worksheet.Cells["H1"].Value = "Last Finished Milestone";
                            worksheet.Cells["I1"].Value = "Last Finished Milestone Date";
                            worksheet.Cells["J1"].Value = "Date Condition Added";
                            worksheet.Cells["K1"].Value = "Condition Status";
                            worksheet.Cells["L1"].Value = "Condition Type";
                            worksheet.Cells["M1"].Value = "Condition Title";
                            worksheet.Cells["N1"].Value = "Condition Details";
                            worksheet.Cells["O1"].Value = "Added By";
                            worksheet.Cells["P1"].Value = "For Intenal Use";
                            worksheet.Cells["Q1"].Value = "For External Use";
                            int row = 2;

                            foreach (LoanIdentity id in ids)
                            {
                                Loan loan = session.Loans.Open(id.Guid);
                                LogUnderwritingConditions conds = loan.Log.UnderwritingConditions;
                                //we only want the report to contain loans with conditions
                                if (conds.Count > 0)
                                {
                                    var ClosedList = new List<ConditionStatus> { (ConditionStatus)7, (ConditionStatus)8, (ConditionStatus)12 };
                                    Console.WriteLine("Found " + conds.Count + " total conditions in Loan: " + loan.LoanNumber);
                                    if (LimitedSet.ToUpper().Equals("LIMITED"))
                                    {
                                        Console.WriteLine("Only Pulling Open Conditions");
                                    }

                                    foreach (UnderwritingCondition cond in conds)
                                    {
                                        if (LimitedSet.ToUpper().Equals("ALL") || (!LimitedSet.ToUpper().Equals("ALL") && !ClosedList.Contains(cond.Status)))
                                        {
                                            //fill in row details here
                                            worksheet.Cells[row, 1].Value = loan.Fields["TPO.X14"];
                                            worksheet.Cells[row, 2].Value = loan.Fields["CX.DH.SELLERLOANNUM"];
                                            worksheet.Cells[row, 3].Value = loan.Fields["364"];
                                            worksheet.Cells[row, 4].Value = loan.Fields["4002"] + ", " + loan.Fields["4000"];
                                            worksheet.Cells[row, 5].Value = loan.Fields["14"];
                                            worksheet.Cells[row, 6].Value = loan.Fields["19"];
                                            worksheet.Cells[row, 7].Value = loan.Fields["1811"];
                                            worksheet.Cells[row, 8].Value = loan.Fields["LOG.MS.LASTCOMPLETED"];
                                            worksheet.Cells[row, 9].Value = loan.Fields["MS.STATUSDATE"].ToDate().Date;
                                            worksheet.Cells[row, 10].Value = cond.DateAdded.Date;
                                            worksheet.Cells[row, 11].Value = cond.Status.ToString();
                                            worksheet.Cells[row, 12].Value = cond.PriorTo.ToString();
                                            worksheet.Cells[row, 13].Value = cond.Title.ToString();
                                            worksheet.Cells[row, 14].Value = cond.Description.ToString().Replace("\"", "'");
                                            worksheet.Cells[row, 15].Value = cond.AddedBy.ToString();
                                            worksheet.Cells[row, 16].Value = cond.ForInternalUse.ToString();
                                            worksheet.Cells[row, 17].Value = cond.ForExternalUse.ToString();

                                            row++;
                                        }
                                    }
                                    row++;
                                }
                            }

                            //format range as table
                            var range = worksheet.Cells[1, 1, row - 2, 17];
                            var xltable = worksheet.Tables.Add(range, null);
                            xltable.TableStyle = TableStyles.Medium14;
                            //finish up worksheet
                            worksheet.Cells.AutoFitColumns(0);
                            worksheet.Column(9).Style.Numberformat.Format = "m/d/yyyy";
                            worksheet.Column(10).Style.Numberformat.Format = "m/d/yyyy";
                            worksheet.Column(14).Style.WrapText = true;
                            worksheet.PrinterSettings.RepeatRows = worksheet.Cells["1:1"];
                            worksheet.View.PageLayoutView = false;
                            worksheet.View.PageLayoutView = false;
                            //finish up package
                            package.Save();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unknown Error:");
                Console.WriteLine("\r\n\r\n{0}", ex);
            }

        } // End ConditionReport
Example #11
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(-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);
        }
Example #13
0
        private void button1_Click_1(object sender, EventArgs e)
        {
            btnGetActualField.Enabled = false;
            if (encompassLoan == null)
            {
                var session = new Session();
                session.Start(dfsServerAddress.Text, dfsUserName.Text, dfsPassword.Text);

                var loanNumberCriterion =
                    new StringFieldCriterion {
                    FieldName = "Loan.LoanNumber", Value = dfsLoanNumber.Text
                };

                var queryCriterionLoanFolder = new StringFieldCriterion
                {
                    FieldName = "Loan.LoanFolder",
                    Value     = "(Trash)",
                    MatchType = StringFieldMatchType.Exact,
                    Include   = false
                };

                var queryCriterion = loanNumberCriterion.And(queryCriterionLoanFolder);

                using (var pipelineCursor = session.Loans.QueryPipeline(queryCriterion, PipelineSortOrder.None))
                {
                    //  Check cursor
                    if (pipelineCursor == null)
                    {
                        throw new InvalidOperationException(
                                  $"Pipeline query yielded no results (loan number: '{dfsLoanNumber.Text}').");
                    }

                    //  Check pipeline data
                    if (pipelineCursor.Count == 0)
                    {
                        pipelineCursor.Close();
                        throw new InvalidOperationException(
                                  $"Pipeline cursor does not contain any data (loan number: '{dfsLoanNumber.Text}').");
                    }
                    var data = pipelineCursor.GetItem(0);
                    if (data == null)
                    {
                        pipelineCursor.Close();
                        throw new InvalidOperationException(
                                  $"Pipeline data from cursor is null (loan number: '{dfsLoanNumber.Text}').");
                    }

                    //  Open loan
                    var loanName = data.LoanIdentity.LoanName;
                    pipelineCursor.Close();
                    if (string.IsNullOrWhiteSpace(loanName))
                    {
                        throw new InvalidOperationException(
                                  $"Loan name retrieved from pipeline data is null or empty (loan number: '{dfsLoanNumber.Text}').");
                    }

                    encompassLoan = session.Loans.Folders[data.LoanIdentity.LoanFolder].OpenLoan(loanName);
                }
            }
            btnGetActualField.Enabled = true;
            try
            {
                var field = encompassLoan.Fields[dfsFieldId.Text];

                var encompassField = new EncompassFieldDescriptor
                {
                    FieldID     = field.ID,
                    ReadOnly    = field.ReadOnly,
                    Description = field.Descriptor.Description,
                    Format      = field.Descriptor.Format.ToString(),
                };

                actualFields.Add(encompassField);
                grdFields.DataSource = null;
                grdFields.DataSource = actualFields;
                AdjustGridColumnWidth();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
        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);
        }
        private void startApplication()
        {
            log.Debug("Program running...");

            //setup folder query
            StringFieldCriterion folderCri = selectLoanFolder();

            //execute encompass query
            LoanReportCursor results = encompassQueryBuilder(folderCri);
            int total = results.Count;
            int count = 0;

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


            //query list for mySql
            //List<MySqlCommand> queries = new List<MySqlCommand>();

            log.Debug("connecting to MySQL...");
            db_connect connection = new db_connect();

            connection.connect();
            log.Debug("connected to MySQL");
            MySqlCommand cmd = new MySqlCommand();

            cmd.Connection = connection.getConnection();


            foreach (LoanReportData data in results)
            {
                Dictionary <String, String> map = dbQueryBuilder(data);

                /*cmd.CommandText = string.Format(
                 *  "INSERT INTO loans(guid, investor, investorNum, createdAt, b1_lname, b1_fname, loanAmt, loanNum, fundedDate, processor, loan_officer, purchasedDate) " +
                 *  "values(@v1, @v2, @v3, @createdAt, @v4, @v5, @v6, @v7, @v8, @v9, @v10, " +
                 *  "@v11, @currMilestone) " +
                 *  "ON DUPLICATE KEY UPDATE guid=@v1, investor=@v2, investorNum=@v3, updatedAt=@updatedAt, b1_lname=@v4, b1_fname=@v5, "+
                 *  "loanAmt=@v6, loanNum=@v7, fundedDate=@v8, processor=@v9, loan_officer=@v10, " +
                 *  "purchasedDate=@v11"
                 *  );*/

                var now = timestamp.ToString("yyyy - MM - dd HH: mm:ss");


                StringBuilder insert = new StringBuilder();
                insert.Append("INSERT INTO loans(guid, createdAt, loanFolder ");
                //cols
                foreach (String key in map.Keys)
                {
                    insert.Append(", " + key);
                }
                //values
                insert.Append(") ");
                StringBuilder values = new StringBuilder();
                values.Append("VALUES('" + data.Guid + "', '" + now + "', '" + folderCri.Value + "'");
                foreach (String key in map.Keys)
                {
                    if (map[key] != null)
                    {
                        values.Append(", '" + MySqlHelper.EscapeString(" " + map[key]) + "'");
                    }
                    else
                    {
                        values.Append(", NULL");
                    }
                }
                values.Append(") ");
                StringBuilder update2 = new StringBuilder();
                update2.Append("ON DUPLICATE KEY UPDATE updatedAt='" + now + "', loanFolder='" + folderCri.Value + "'");
                foreach (String key in map.Keys)
                {
                    if (map[key] != null)
                    {
                        update2.Append(", " + key + "='" + MySqlHelper.EscapeString(" " + map[key]) + "'");
                    }
                    else
                    {
                        update2.Append(", " + key + "=NULL");
                    }
                }

                //mysql command
                cmd.CommandText = insert.ToString() + values.ToString() + update2.ToString();

                /* cmd.Parameters.Clear();
                 * cmd.Parameters.AddWithValue("@v1", data.Guid);
                 * cmd.Parameters.AddWithValue("@v2", map["investor"]);
                 * cmd.Parameters.AddWithValue("@v3", map["investorNum"]);
                 * cmd.Parameters.AddWithValue("@createdAt", timestamp.ToString("yyyy-MM-dd HH:mm:ss"));
                 * cmd.Parameters.AddWithValue("@updatedAt", timestamp.ToString("yyyy-MM-dd HH:mm:ss"));
                 * cmd.Parameters.AddWithValue("@v4", map["b1_lname"]);
                 * cmd.Parameters.AddWithValue("@v5", map["b1_fname"]);
                 * cmd.Parameters.AddWithValue("@v6", map["loanAmt"]);
                 * cmd.Parameters.AddWithValue("@v7", map["loanNum"]);
                 * cmd.Parameters.AddWithValue("@v8", map["fundedDate"]);
                 * cmd.Parameters.AddWithValue("@v9", map["processor"]);
                 * cmd.Parameters.AddWithValue("@v10", map["loanOfficer"]);
                 * cmd.Parameters.AddWithValue("@v11", map["purchasedDate"]);
                 * cmd.Prepare();*/

                cmd.ExecuteNonQuery();

                //status output
                count++;
                if (count % 10 == 0)
                {
                    Console.Write("\r{0}   ", "writing: " + count + "/" + total);
                }
            }
            Console.Out.WriteLine("");
            results.Close();

            TimeSpan time = DateTime.Now.Subtract(timestamp);

            /*connection.addLog("db_update", "updated: " + folderCri.Value + total + " rows in " +
             *  String.Format("{0} min {1}.{2} sec"
             *      , time.Minutes
             *      , time.Seconds
             *      , time.Milliseconds) );*/

            connection.close();

            log.Info("Finished updating db in " +
                     String.Format("{0} min {1}.{2} sec"
                                   , time.Minutes
                                   , time.Seconds
                                   , time.Milliseconds));
        }