#!/usr/bin/python

import csv
import sys

import selenium.common.exceptions

import pysapweb.rfp
import pysapweb.sap_profiles

def get_profile():
    try:
        browser = pysapweb.sap_profiles.load_firefox()
        return browser
    except selenium.common.exceptions.WebDriverException as e:
        print e.msg
        raise

def to_bool(val):
    if val == 'True':
        return True
    elif val == 'False':
        return False
    else:
        raise ValueError("Expected True or False, got '%s'" % (val, ))

def read_rfp_info(line):
    id = int(line['id'])
    name = line['name']
    addr_fields = ('street', 'city', 'state', 'postal')
    address = [line['addr.'+f] for f in addr_fields] + ['US']
    item_fields = ('date', 'gl', 'co', 'amount', 'desc')
    line_item = [line['item.'+f] for f in item_fields]
    payee = (to_bool(line['payee.mit']), line['payee.name'])
    return id, name, address, line_item, payee

def create_rfps(fd):
    reader = csv.DictReader(fd)
    browser = get_profile()
    for line in reader:
        id, name, address, line_item, payee = read_rfp_info(line)
        args = dict(
            name=name,
            payee=payee,
            line_items=(line_item, ),
        )
        if not payee[0]:
            args['address'] = address
        print "args=%s" % (args, )
        rfp = pysapweb.rfp.create(browser, **args)
        print "Created voucher %d -> RFP %s" % (id, rfp)

def create_test_rfp():
    browser = get_profile()
    address = ('69 School St', 'Cambridge', 'MA', '02139', 'US')
    line_items = (
        ('1/1/2014', '421000', '2720842', '12.50', 'test meeting food'),
    )
    rfp = pysapweb.rfp.create(browser,
        name='test RFP',
        payee=(False, 'Alex Dehnert'),
        address=address,
        line_items=line_items,
    )
    print "Created RFP %s" % (rfp, )

if __name__ == '__main__':
    create_rfps(sys.stdin)
