git ssb

0+

cel / ledger-scripts



Commit 1cd94911c9b181f322211784578d7c6b2b62356b

Add PayPal importer script

Charles Lehner committed on 10/29/2015, 6:51:16 PM
Parent: 86d53ff02fe53e9e4c1faab25ee410bf38724a1f

Files changed

Makefilechanged
README.mdchanged
paypal2ledgeradded
MakefileView
@@ -1,6 +1,7 @@
11 symlinks = merge-ledger getquote gethistoric cryptotrade2ledger \
2- dwolla2ledger fidelity2ledger lbcsv2ledger mint2ledger
2+ dwolla2ledger fidelity2ledger lbcsv2ledger mint2ledger \
3+ paypal2ledger
34
45 prefix = /usr/local
56 exec_prefix = $(prefix)
67 bindir = $(exec_prefix)/bin
README.mdView
@@ -65,8 +65,12 @@
6565 [transactions page](https://crypto-trade.com/member/transactions), and for each
6666 page of results, copy and paste the table into a text file such that each row
6767 from the table is in its own line, with the values in the cells separated by tabs.
6868
69+#### `paypal2ledger`
70+Import full PayPal CSV transactions history (including shopping carts).
71+Currently this script is buggy so the results have to be manually fixed.
72+
6973 #### Coinbase
7074
7175 Two scripts are provided for processing two types of CSV files that Coinbase
7276 exports. For best results, run both, merge the results, and then reconcile it
paypal2ledgerView
@@ -1,0 +1,170 @@
1+#!/usr/bin/awk -f
2+
3+BEGIN {
4+ FPAT = "([^,]*)|(\"[^\"]+\")"
5+ txid = ""
6+ prev_txid = ""
7+ receipt_id = ""
8+ tx_total = 0
9+}
10+
11+$1 == "Date" { next }
12+
13+function unquote(str) {
14+ if (match(str, /^".*"$/)) {
15+ return substr(str, 2, RLENGTH - 2)
16+ }
17+ return str
18+}
19+
20+function format_money(amount, currency) {
21+ amount = sprintf("%0.2f", amount)
22+ if(currency == "USD")
23+ return "$" amount
24+ else
25+ return amount " " currency
26+}
27+
28+function format_date(date) {
29+# input: m/d/yyyy
30+# output: yyyy/m/d
31+ len = length(date)
32+ year = substr(date, len-3)
33+ return year "/" substr(date, 1, len-5)
34+}
35+
36+function start_tx() {
37+ payee = unquote($4)
38+ payee_after = 0
39+ if (tx_payee) {
40+ payee2 = payee " ; " tx_payee
41+ if (length(payee2) > 72) {
42+ payee_after = 1
43+ } else {
44+ payee = payee2
45+ }
46+ }
47+ printf "%s %s\n",
48+ format_date(unquote($1)), payee
49+ if (payee_after) {
50+ printf " ; %s\n", tx_payee
51+ }
52+}
53+
54+function finish_tx() {
55+ if (!tx_account) {
56+ tx_account = "Expenses"
57+ }
58+
59+ if (tx_starting) {
60+ tx_total = -amt
61+ }
62+ if (tx_total) {
63+ # extra expenses (e.g. shipping)
64+ printf " %-32s %16s\n", tx_account,
65+ format_money(tx_total, tx_currency)
66+
67+ # funds external source (e.g. bank account)
68+ if (funds_source_amt) {
69+ printf " %-32s %16s\n", funds_source,
70+ format_money(funds_source_amt, currency)
71+ tx_total = funds_source_amt
72+ } else {
73+ tx_total = 0
74+ }
75+ }
76+ # amount paid by paypal balance
77+ if (!tx_total) {
78+ printf " %s\n", "Assets:PayPal"
79+ }
80+
81+ tx_total = 0
82+ funds_source_amt = 0
83+ tx_account = ""
84+ tx_payee = ""
85+ tx_currency = ""
86+}
87+
88+{
89+ prev_txid = txid
90+ prev_receipt_id = receipt_id
91+ txid = unquote($13)
92+}
93+
94+receipt_id = unquote($31) {
95+ receipt_amt = unquote($36)
96+}
97+
98+txid != prev_txid && receipt_id != prev_txid &&
99+ txid != prev_receipt_id &&
100+ (!receipt_id || receipt_id != prev_receipt_id) {
101+ finish_tx()
102+ printf "\n"
103+}
104+
105+{
106+ type = unquote($5)
107+ status = unquote($6)
108+ #print "TX", txid, "PTX", prev_txid, "R", receipt_id
109+ currency = unquote($7)
110+ amt = unquote($8)
111+ gsub(/,/, "", amt)
112+ tx_starting = 0
113+}
114+
115+!tx_payee {
116+ tx_payee = unquote($16)
117+}
118+
119+!tx_currency {
120+ tx_currency = currency
121+}
122+
123+NR<3 || (txid != prev_txid && receipt_id != prev_txid &&
124+ txid != prev_receipt_id &&
125+ (!receipt_id || receipt_id != prev_receipt_id)) {
126+ tx_starting = 1
127+ tx_total -= amt ###
128+ start_tx()
129+}
130+
131+END {
132+ finish_tx()
133+}
134+
135+status != "Completed" {
136+ printf " ; %s %s\n", txid, status
137+ #next
138+}
139+
140+type == "Shopping Cart Item" {
141+ desc = unquote($16)
142+ if (desc && desc != tx_payee) {
143+ printf " ; %s\n", desc
144+ }
145+
146+ printf " %-32s %16s\n", "Expenses:Shopping",
147+ format_money(amt, currency)
148+ amt *= -1
149+}
150+
151+type ~ /Received/ {
152+ tx_account = "Income"
153+}
154+
155+type ~ /Withdraw Funds to a Bank Account|Credit to Credit Card/ {
156+ tx_account = "Assets:" unquote($4)
157+}
158+
159+{
160+ tx_total += amt
161+}
162+
163+type ~ /Donation Sent/ {
164+ tx_account = "Expenses:Donations"
165+}
166+
167+type ~ /Add Funds|Charge From Credit Card/ {
168+ funds_source = "Assets:" unquote($4)
169+ funds_source_amt = -amt
170+}

Built with git-ssb-web