Repository: liberapay/liberapay.com

Issue:
Team donation gives error RECEIVING_PREFERENCE_MANDATES_MANUAL_ACTION 
On my ledger it says:

November 5, 2018
anonymous donation for your role in the Liberapay team (25 months of £0.20) — pending — error message: RECEIVING_PREFERENCE_MANDATES_MANUAL_ACTION

A bit unclear for me the user. Not clear if I should take action or this will be fixes with some manual action by admin?


Discussion:
+1 to this. I'm having the same issue while trying to donate to an individual account. A confirmation email by Paypal says the transaction was successful. What happened to the money?
(_a bit of a shot in the dark here_)

Wouldn't that be that one needs to connect to his paypal account to accept the donation since it's not a currency set up as **automatically accepted** in his paypal account?

Update: now I'm not seeing that error anymore, but the donation wasn't made effective, still appears as pending renovation (while the money was effectively sent via Paypal). 

Maybe there is a "gap" in the system where, if you send a payment to a payment processor that is not connected by the receiver, instead of just not making the payment effective, the payment is made effective _outside_ Liberapay but not registered or correctly associated with that receiver _inside_ Liberapay?
I got the error again. I had this the other way when I got a donation from Liberapay team. The receiver has to accept the payment in PayPal. Maybe it was because of currency conversion? I don't know for sure. After that it completes. 

For the giver it looks like this.
![PayPal message](https://user-images.githubusercontent.com/7106279/51168618-1063e580-18aa-11e9-8768-9af1916377e1.png)
![Liberapay message](https://user-images.githubusercontent.com/7106279/51168619-1063e580-18aa-11e9-920b-a2c8e50ffdfa.png)



Resolving patch:
diff --git a/liberapay/utils/history.py b/liberapay/utils/history.py
--- a/liberapay/utils/history.py
+++ b/liberapay/utils/history.py
@@ -450,15 +450,17 @@ def iter_payin_events(db, participant, period_start, period_end, minimize=False)
     id = participant.id
     params = locals()
     payins = db.all("""
-        SELECT pi.ctime, pi.amount, pi.status, pi.error, pi.amount_settled, pi.fee
+        SELECT pi.id, pi.ctime, pi.amount, pi.status, pi.error, pi.amount_settled, pi.fee
+             , r.network AS payin_method
           FROM payins pi
+          JOIN exchange_routes r ON r.id = pi.route
          WHERE pi.payer = %(id)s
            AND pi.ctime >= %(period_start)s
            AND pi.ctime < %(period_end)s
            AND (pi.status = 'succeeded' OR NOT %(minimize)s)
     """, params, back_as=dict)
     outgoing_transfers = db.all("""
-        SELECT tr.ctime, tr.payin, tr.recipient, tr.context, tr.status, tr.error
+        SELECT tr.id, tr.ctime, tr.payin, tr.recipient, tr.context, tr.status, tr.error
              , tr.amount, tr.unit_amount, tr.n_units, tr.period
              , p.username AS recipient_username, p2.username AS team_name
           FROM payin_transfers tr
@@ -470,10 +472,13 @@ def iter_payin_events(db, participant, period_start, period_end, minimize=False)
            AND (tr.status = 'succeeded' OR NOT %(minimize)s)
     """, params, back_as=dict)
     incoming_transfers = db.all("""
-        SELECT tr.ctime, tr.payin, tr.payer, tr.context, tr.status, tr.error
+        SELECT tr.id, tr.ctime, tr.payin, tr.payer, tr.context, tr.status, tr.error
              , tr.amount, tr.unit_amount, tr.n_units, tr.period
              , p.username AS payer_username, p2.username AS team_name
+             , r.network AS payin_method
           FROM payin_transfers tr
+          JOIN payins pi ON pi.id = tr.payin
+          JOIN exchange_routes r ON r.id = pi.route
           JOIN participants p ON p.id = tr.payer
      LEFT JOIN participants p2 ON p2.id = tr.team
          WHERE tr.recipient = %(id)s


Test patch: