Ejemplo n.º 1
0
    /*******************************************************************************
    *  /// Static Methods
    *******************************************************************************/

    public static AbstractFormObject FromTextract(TextractDocument doc, FormType formType)
    {
        // Here we'll Determine the type of object (timesheet or mileage form) and then
        // return the correct type.

        // Grab the first page and make sure it is the front
        if (doc.PageCount() < 2)
        {
            throw new ArgumentException();
        }

        AbstractFormObject form;

        switch (formType)
        {
        case FormType.OR526_ATTENDANT:
        case FormType.OR507_RELIEF:
            form = new TimesheetForm();
            break;

        case FormType.OR004_MILEAGE:
            form = new MileageForm();
            break;

        default:
            throw new ArgumentException();
        }
        // Do a silly assignment because C# won't let me assign the variable in the foreach loop instead
        // and there is no default constructor
        Page        frontpage  = doc.GetPage(0);
        bool        frontfound = false;
        List <Page> backpages  = new List <Page>();

        // Improve front page detection
        foreach (var page in doc.Pages)
        {
            if (!frontfound)
            {
                // Search for Service Delivered On:
                foreach (var line in page.GetLines())
                {
                    // Ever form has "Service Delivered On:" on the front page, so we use
                    // this to determine if this is the front or back.
                    frontfound = line.ToString().Contains("vice Delivered O");
                    if (frontfound)
                    {
                        break;
                    }
                }
                if (frontfound)
                {
                    frontpage = page;
                }
                else
                {
                    backpages.Add(page);
                }
            }
            else
            {
                backpages.Add(page);
            }
        }

        if (!frontfound)
        {
            throw new ArgumentException();
        }
        var formitems = frontpage.GetFormItems();

        // Top Form Information

        form.clientName        = formitems[0].Value.ToString().Trim(); // Customer Name
        form.prime             = formitems[1].Value.ToString().Trim(); // Prime
        form.providerName      = formitems[2].Value.ToString().Trim(); // Provider Name
        form.providerNum       = formitems[3].Value.ToString().Trim(); // Provider Num
        form.brokerage         = formitems[4].Value.ToString().Trim(); // CM Organization
        form.scpaName          = formitems[5].Value.ToString().Trim(); // SC/PA Name
        form.serviceAuthorized = formitems[6].Value.ToString().Trim(); // Service

        // Table
        var tables = frontpage.GetTables();

        if (tables.Count == 0)
        {
            Console.WriteLine("No Table Information");
            return(form);
        }
        form.AddTables(tables);
        // Populate back form objects
        form.AddBackForm(backpages[0]);

        return(form);
    }