views.py 3.53 KB
Newer Older
Administrator committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
from outils.common_imports import *
from outils.for_view_imports import *


from envelops.models import CagetteEnvelops
from members.models import CagetteMember

def index(request):
    """Display envelops"""
    must_identify = False

    must_identify = getattr(settings, 'BRINKS_MUST_IDENTIFY', False)

    context = {'title': 'Enveloppes',
               'couchdb_server': settings.COUCHDB['url'],
               'must_identify': must_identify,
               'db': settings.COUCHDB['dbs']['envelops']}

    template = loader.get_template('envelops/index.html')

    return HttpResponse(template.render(context, request))

def archive_envelop(request):
24
    """Save members payment and archive the envelop"""
Administrator committed
25 26 27 28 29
    m = CagetteEnvelops()
    res_payments = []
    res_envelop = ""

    envelop = json.loads(request.body.decode())
30
    
Administrator committed
31 32 33 34 35 36 37 38 39 40 41 42
    # save each partner payment
    for partner_id in envelop['envelop_content']:
        # If payment_id in payment details: payment already saved. Skip saving.
        if not ('payment_id' in envelop['envelop_content'][partner_id]):
            try:    #Additionnal security to ensure process
                data = {
                    'partner_id' : int(partner_id),
                    'partner_name' : envelop['envelop_content'][partner_id]['partner_name'],
                    'amount' : envelop['envelop_content'][partner_id]['amount'],
                    'type' : envelop['type']
                }

43 44 45
                if 'invoice_id' in envelop['envelop_content'][partner_id]:
                    data['invoice_id'] = int(envelop['envelop_content'][partner_id]['invoice_id'])

Administrator committed
46 47 48 49 50 51
                res = m.save_payment(data)
            except Exception as e:
                res = {
                    "done": False,
                    "error": repr(e)
                }
François committed
52
                coop_logger.error("Payment error : %s \n %s", str(data), str(e))
Administrator committed
53

54
            if res['done'] is True:
Administrator committed
55 56 57
                # Immediately save a token than this payment has been saved
                #   If an error occurs, this payment won't be saved again
                envelop['envelop_content'][partner_id]['payment_id'] = res['payment_id']
Damien Moulard committed
58
                updated_envelop = m.c_db.updateDoc(envelop)
Administrator committed
59 60 61 62 63 64 65
                envelop['_rev'] = updated_envelop['_rev']
            else:
                # Handling error when saving payment, return data to display error message
                res['partner_id'] = partner_id
                try:
                    res['partner_name'] = envelop['envelop_content'][partner_id]['partner_name']
                    res['amount'] = envelop['envelop_content'][partner_id]['amount']
François committed
66
                except Exception as e:
Administrator committed
67
                    res['error'] = "Wrong envelop structure"
François committed
68
                    coop_logger.error("Wrong envelop structure : %s",  str(e))
Administrator committed
69 70 71 72 73
                res_payments.append(res)

                try:
                    # Log the error
                    msg = 'Erreur lors de l\'enregistrement du paiement ' + envelop['type']
François committed
74
                    msg += ' ' + str(envelop['envelop_content'][partner_id]['amount']) + ' euros '
Administrator committed
75 76
                    msg += ' (' + res['error'] + ')'
                    CagetteMember(int(partner_id)).attach_message(msg)
François committed
77 78
                except Exception as e:
                    coop_logger.error("Cannot attach payment error message to member : %s",  str(e))
Administrator committed
79 80

    try:
81
        # archive envelop in couchdb
82
        res_envelop = m.archive_envelop(envelop)
Administrator committed
83 84 85 86
    except Exception as e:
        res_envelop = "error"

    return JsonResponse({'error_payments': res_payments, 'envelop': res_envelop})