source: client/sapweb.py @ 3b7f125

Last change on this file since 3b7f125 was 42132d7, checked in by Alex Dehnert <adehnert@…>, 11 years ago

Working RFP downloader and creator

  • Property mode set to 100755
File size: 2.5 KB
Line 
1#!/usr/bin/env python
2
3import csv
4import os
5import sys
6import urllib2
7import urlparse
8
9import selenium.common.exceptions
10
11import pysapweb.rfp
12import pysapweb.sap_profiles
13
14use_browser = False
15use_browser = True
16
17def get_profile():
18    try:
19        browser = pysapweb.sap_profiles.load_firefox()
20        return browser
21    except selenium.common.exceptions.WebDriverException as e:
22        print e.msg
23        raise
24
25def to_bool(val):
26    if val == 'True':
27        return True
28    elif val == 'False':
29        return False
30    else:
31        raise ValueError("Expected True or False, got '%s'" % (val, ))
32
33def read_rfp_info(line):
34    id = int(line['id'])
35    name = line['name']
36    addr_fields = ('street', 'city', 'state', 'postal')
37    address = [line['addr.'+f] for f in addr_fields] + ['US']
38    item_fields = ('date', 'gl', 'co', 'amount', 'desc')
39    line_item = [line['item.'+f] for f in item_fields]
40    payee = (to_bool(line['payee.mit']), line['payee.name'])
41    return id, name, address, line_item, payee
42
43def download_doc(url, docs_dir):
44    parsed_url = urlparse.urlparse(url)
45    basename = os.path.basename(parsed_url.path)
46    doc_fn = os.path.join(docs_dir, basename)
47    doc_data = urllib2.urlopen(url).read()
48    with open(doc_fn, 'w') as doc_fd:
49        doc_fd.write(doc_data)
50    return doc_fn
51
52def create_rfps(fd, docs_dir):
53    reader = csv.DictReader(fd)
54    if use_browser:
55        browser = get_profile()
56    created = []
57    for line in reader:
58        id, name, address, line_item, payee = read_rfp_info(line)
59        doc_url = line['documentation']
60        doc_path = download_doc(doc_url, docs_dir)
61        args = dict(
62            name=name,
63            payee=payee,
64            line_items=(line_item, ),
65            receipts=(doc_path, ),
66        )
67        if not payee[0]:
68            args['address'] = address
69        if use_browser:
70            rfp = pysapweb.rfp.create(browser, **args)
71        else:
72            rfp = 123456
73        print "Created voucher %d -> RFP %s" % (id, rfp)
74        line['rfp_number'] = rfp
75        created.append(line)
76    return created
77
78def create_test_rfp():
79    browser = get_profile()
80    address = ('69 School St', 'Cambridge', 'MA', '02139', 'US')
81    line_items = (
82        ('1/1/2014', '421000', '2720842', '12.50', 'test meeting food'),
83    )
84    rfp = pysapweb.rfp.create(browser,
85        name='test RFP',
86        payee=(False, 'Alex Dehnert'),
87        address=address,
88        line_items=line_items,
89    )
90    print "Created RFP %s" % (rfp, )
91
92if __name__ == '__main__':
93    create_rfps(sys.stdin)
Note: See TracBrowser for help on using the repository browser.