Skip to content

Commit

Permalink
Merge pull request #1050 from xzzy/master2
Browse files Browse the repository at this point in the history
Add Payment Totals UI in frontend (moved from django UI)
  • Loading branch information
xzzy authored Feb 28, 2024
2 parents 876d81c + 25a3321 commit de4ac89
Show file tree
Hide file tree
Showing 7 changed files with 231 additions and 10 deletions.
50 changes: 48 additions & 2 deletions ledger/payments/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from ledger.payments.invoice.models import Invoice, InvoiceBPAY
from ledger.payments.bpoint.models import BpointTransaction, BpointToken
from ledger.payments.cash.models import CashTransaction, Region, District, DISTRICT_CHOICES, REGION_CHOICES
from ledger.payments.models import TrackRefund, LinkedInvoice, OracleAccountCode, RefundFailed, OracleInterfaceSystem
from ledger.payments.models import TrackRefund, LinkedInvoice, OracleAccountCode, RefundFailed, OracleInterfaceSystem, PaymentTotal
from ledger.payments.utils import systemid_check, update_payments, ledger_payment_invoice_calulations
from ledger.payments.invoice import utils as invoice_utils
from ledger.payments.facade import bpoint_facade
Expand Down Expand Up @@ -1102,6 +1102,52 @@ def FailedTransactionCompleted(request, *args, **kwargs):
return HttpResponse(json.dumps({'status': 500, 'message': 'error'}), content_type='application/json', status=500)
raise

def PaymentTotals(request, *args, **kwargs):
if helpers.is_payment_admin(request.user) is True:
try:
query = Q()
pagestart = int(request.GET.get('pagestart',0))
pageend = int(request.GET.get('pageend',10))
status = request.GET.get('status','')
system = request.GET.get('system','')
settlement_date = request.GET.get('settlement_date','')

# if len(status) > 0:
# query &= Q(status=status)
# if len(system) > 0:
# query &= Q(system_identifier__system_id=system)
if len(settlement_date) > 0:

settlement_date_django = datetime.strptime(settlement_date, "%d/%m/%Y")
query &= Q(settlement_date=settlement_date_django)

rf_array = {'status': 404, 'data': {'rows': [], 'totalrows': 0}}
rf = PaymentTotal.objects.filter(query)[pagestart:pageend]
rf_array['data']['totalrows'] = PaymentTotal.objects.filter(query).count()

for r in rf:
row = {}
row['id'] = r.id
row['oracle_system_id'] = r.oracle_system_id
row['oracle_system_id_code'] = r.oracle_system.system_id
row['settlement_date'] = r.settlement_date.strftime('%d %b %Y')
row['bpoint_gateway_total'] = str(r.bpoint_gateway_total)
row['ledger_bpoint_total'] = str(r.ledger_bpoint_total)
row['oracle_parser_total'] = str(r.oracle_parser_total)
row['oracle_receipt_total'] = str(r.oracle_receipt_total)
row['cash_total'] = str(r.cash_total)
row['bpay_total'] = str(r.bpay_total)
discrepancy_status = False
if r.bpoint_gateway_total != r.oracle_receipt_total:
discrepancy_status = True
row['discrepancy'] = discrepancy_status
row['updated'] = r.updated.strftime('%d/%m/%Y %H:%M:%S')
rf_array['data']['rows'].append(row)
return HttpResponse(json.dumps(rf_array), content_type='application/json')
except Exception as e:
print(traceback.print_exc())
raise

def FailedTransactions(request, *args, **kwargs):
if helpers.is_payment_admin(request.user) is True:
try:
Expand All @@ -1118,7 +1164,7 @@ def FailedTransactions(request, *args, **kwargs):
query &= Q(system_identifier__system_id=system)
if len(keyword) > 0:
query &= Q(Q(booking_reference=keyword) | Q(invoice_reference=keyword))
print (query)

rf_array = {'status': 404, 'data': {'rows': [], 'totalrows': 0}}
rf = RefundFailed.objects.filter(query)[pagestart:pageend]
rf_array['data']['totalrows'] = RefundFailed.objects.filter(query).count()
Expand Down
20 changes: 20 additions & 0 deletions ledger/payments/migrations/0033_auto_20240228_1852.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2024-02-28 10:52
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('payments', '0032_auto_20240228_1235'),
]

operations = [
migrations.AlterField(
model_name='oracleinterfacepermission',
name='access_type',
field=models.CharField(blank=True, choices=[('all_access', 'Full access to all Financial Tools'), ('view_ledger_tools', 'View Ledger Payment Tools'), ('manage_ledger_tool', 'Manage Ledger Payment Tools'), ('view_payment_totals', 'View Payment Totals')], default=None, max_length=100, null=True),
),
]
1 change: 1 addition & 0 deletions ledger/payments/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ class OracleInterfacePermission(models.Model):
('all_access', 'Full access to all Financial Tools'),
('view_ledger_tools', 'View Ledger Payment Tools'),
('manage_ledger_tool', 'Manage Ledger Payment Tools'),
('view_payment_totals', 'View Payment Totals'),
)

system = models.ForeignKey(OracleInterfaceSystem,related_name='oracle_interface_permission_recipients')
Expand Down
134 changes: 129 additions & 5 deletions ledger/payments/static/payments/js/ledger_payments.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,18 @@ var ledger_payments = {
'csrf_token': '',
'payment_info_url' : '/ledger/payments/api/ledger/payments-info',
'failed_transaction_url' : '/ledger/payments/api/ledger/failed-transactions',
'payment_total_url' : '/ledger/payments/api/ledger/payment-totals',
'payment_info': [],
'pagestart': 0,
'pageend': 10,
'formoptions': {'frstatus': '', 'frsystem':'','frkeyword': '' },
'formoptions': {'frstatus': '', 'frsystem':'','frkeyword': '' , 'ptsystem':'','ptkeyword': '','ptsettlement_date': ''},
'selected_id': null,
'system_interface_permssions' : {}
'system_interface_permssions' : {},
'ptdatepickerOptions':{
format: 'DD/MM/YYYY',
showClear:true,
useCurrent:false
},

},
load_payment_info: function() {
Expand Down Expand Up @@ -119,6 +125,11 @@ var ledger_payments = {
ledger_payments.var.pageend = pageend;
ledger_payments.load_failed_transactions();
},
update_page_payment_totals: function(pagestart,pageend) {
ledger_payments.var.pagestart = pagestart;
ledger_payments.var.pageend = pageend;
ledger_payments.load_payment_totals();
},
update_failed_transaction_status: function(selected_id) {
ledger_payments.var.selected_id = selected_id;
$('#ConfirmAction').modal('show');
Expand All @@ -142,9 +153,9 @@ var ledger_payments = {

ledger_payments.var.formoptions.frsystem = $("#fr-system").val();

$("#fr-keyword").change(function() {
ledger_payments.var.formoptions.frkeyword =this.value;
console.log(ledger_payments.var.formoptions.frkeyword);
$("#settlement_report").change(function() {
alert(this.value);
ledger_payments.var.formoptions.ptsettlement_date =this.value;
});

ledger_payments.var.formoptions.frkeyword = $("#fr-keyword").val();
Expand All @@ -163,6 +174,119 @@ var ledger_payments = {
// system_interface_permssions
ledger_payments.load_failed_transactions();
},
init_payment_totals: function() {

$('#settlementDatePicker').datetimepicker(ledger_payments.var.ptdatepickerOptions);
$("#pt-status").change(function() {
ledger_payments.var.formoptions.frstatus =this.value;
console.log(ledger_payments.var.formoptions.frstatus);
});

// ledger_payments.var.formoptions.frstatus = $("#pt-status").val();

$("#pt-system").change(function() {
ledger_payments.var.formoptions.frsystem =this.value;
console.log(ledger_payments.var.formoptions.frsystem);
});

ledger_payments.var.formoptions.frsystem = $("#pt-system").val();

$("#pt-keyword").change(function() {
ledger_payments.var.formoptions.ptkeyword =this.value;
console.log(ledger_payments.var.formoptions.ptkeyword);
});

ledger_payments.var.formoptions.frkeyword = $("#pt-keyword").val();

$("#pt-filter").click(function() {
ledger_payments.load_payment_totals();
});

var system_interface_permssions = $('#system_interface_permssions').val();
system_interface_permssions_obj = JSON.parse(system_interface_permssions);

ledger_payments.system_interface_permssions = system_interface_permssions_obj
// system_interface_permssions
ledger_payments.load_payment_totals();
},
load_payment_totals: function() {
var settlement_report = $("#settlement_report").val();
data = {}
$.ajax({
url: ledger_payments.var.payment_total_url+"?pagestart="+ledger_payments.var.pagestart+"&pageend="+ledger_payments.var.pageend+"&system="+ledger_payments.var.formoptions.frsystem+"&settlement_date="+settlement_report,
method: "GET",
//headers: {'X-CSRFToken' : ledger_payments.var.csrf_token},
//data: JSON.stringify({'payload': data,}),
contentType: "application/json",
success: function(data) {
var html = "";
if (data.data.rows.length > 0) {
for (let i = 0; i < data.data.rows.length; i++) {
html+= "<tr>";
html+= "<td>"+data.data.rows[i]['oracle_system_id_code']+"</td>";
html+= "<td>"+data.data.rows[i]['settlement_date']+"</td>";
html+= "<td>"+data.data.rows[i]['bpoint_gateway_total']+"</td>";
html+= "<td>"+data.data.rows[i]['ledger_bpoint_total']+"</td>";
html+= "<td>"+data.data.rows[i]['oracle_parser_total']+"</td>";
html+= "<td>"+data.data.rows[i]['oracle_receipt_total']+"</td>";
html+= "<td>"+data.data.rows[i]['cash_total']+"</td>";
html+= "<td>"+data.data.rows[i]['bpay_total']+"</td>";
html+= "<td align='center'>";
if (data.data.rows[i]['discrepancy'] == false) {
html+= '<i class="bi bi-check-circle-fill" style="color:#00d900;"></i>';
} else {
html+= '<i class="bi bi-x-circle-fill" style="color:#d90000"></i>';
}
"</td>";
html+= "<td>"+data.data.rows[i]['updated']+"</td>";
html+= "</tr>";
}
}

$('#payment-totals-table tbody').html(html);

var pageiterate = data.data.totalrows / 10;
var totalpages = parseInt(pageiterate);

if (pageiterate > parseInt(pageiterate)) {
totalpages = parseInt(pageiterate) + 1;
}

var pages = "";
pages+='<ul class="pagination justify-content-center">';
pages+='<li class="page-item disabled">';
// pages+='<a class="page-link" href="#" tabindex="-1">Previous</a>';
pages+='</li>';
var pagelimit = 10;
var pstart = 0;
var pend = 0 + pagelimit;
for (let i = 1; i <= totalpages; i++) {
pages+='<li class="page-item ';
if (ledger_payments.var.pagestart == pstart && ledger_payments.var.pageend == pend) {
pages+=' active';
}
pages+= '"><a class="page-link" href="javascript:void(0);" onclick="ledger_payments.update_page_payment_totals('+pstart+','+pend+');">'+i+'</a></li>';
pstart = pstart + pagelimit;
pend = pend + pagelimit;
}
// pages+='<li class="page-item active">';
// pages+='<a class="page-link" href="#">2</a>';
// pages+='</li>';
//pages+='<li class="page-item"><a class="page-link" href="#">3</a></li>';
pages+='<li class="page-item">';
// pages+='<a class="page-link" href="#">Next</a>';
pages+='</li>';
pages+='</ul>';

$('#pages').html(pages);
},
error: function(errMsg) {
$('#LoadingPopup').modal('hide');
}
});
},


save_failed_transaction: function(rfid) {
$("#LoadingPopup").modal('show');
$('#ConfirmAction').modal('hide');
Expand Down
7 changes: 5 additions & 2 deletions ledger/payments/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
CheckOracleCodeView,
RefundOracleView,
FailedTransactions,
FailedTransactionCompleted
FailedTransactionCompleted,
PaymentTotals
)

from ledger.payments.bpay.dashboard.app import application as bpay
Expand All @@ -39,6 +40,7 @@
url(r'api/ledger/oracle-codes-lookup$', CheckOracleCodeView, name='ledger-oracle-codes'),
url(r'api/ledger/oracle-payment-transfer$', RefundOracleView, name='ledger-oracle-refunds'),
url(r'api/ledger/failed-transactions$', FailedTransactions, name='failed-transactions'),
url(r'api/ledger/payment-totals$', PaymentTotals, name='payment-totals'),
url(r'api/ledger/failed-transaction-complete/(?P<rfid>\d+)/$', FailedTransactionCompleted, name='failed-transaction-completed'),
url(r'api/report-allocated$', ReportCreateAllocatedView.as_view(),name='ledger-report-allocated'),
url(r'api/report$', ReportCreateView.as_view(),name='ledger-report'),
Expand All @@ -63,5 +65,6 @@
url(r'payments/oracle/payments$', views.OraclePayments.as_view(), name='oracle-payments'),

url(r'payments/error$',views.PaymentErrorView.as_view(), name='payments-error'),
url(r'payments/oracle/failed-transactions$', views.FailedTransaction.as_view(), name='failed-transactions')
url(r'payments/oracle/failed-transactions$', views.FailedTransaction.as_view(), name='failed-transactions'),
url(r'payments/oracle/payment-totals$', views.PaymentTotals.as_view(), name='failed-transactions')
]
4 changes: 3 additions & 1 deletion ledger/payments/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1159,6 +1159,7 @@ def get_oracle_interface_system_permissions(system_id, email):
'all_access': False,
'view_ledger_tools' : False,
'manage_ledger_tool' : False,
'view_payment_totals' : False,
}

ois = OracleInterfaceSystem.objects.filter(system_id=system_id)
Expand All @@ -1171,7 +1172,8 @@ def get_oracle_interface_system_permissions(system_id, email):
system_interface_permssions['view_ledger_tools'] = True
if oisp.access_type == 'manage_ledger_tool':
system_interface_permssions['manage_ledger_tool'] = True

if oisp.access_type == 'view_payment_totals':
system_interface_permssions['view_payment_totals'] = True
return system_interface_permssions


Expand Down
25 changes: 25 additions & 0 deletions ledger/payments/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,31 @@ def get(self, request, *args, **kwargs):
basket = basket_models.Basket.objects.get(id=basket_hash_split[0])
return render(request, self.template_name, {'basket': basket})

class PaymentTotals(generic.TemplateView):
template_name = 'dpaw_payments/payment_totals.html'

def get_context_data(self, **kwargs):
ctx = super(PaymentTotals,self).get_context_data(**kwargs)
if helpers.is_payment_admin(self.request.user) is True:
system_id = self.request.GET.get('system_id','')
ois = payments_models.OracleInterfaceSystem.objects.filter(system_id=system_id)
ois_found = False
ois_permissions = []
if ois.count() > 0:
ois_found = True
isp = payments_utils.get_oracle_interface_system_permissions(system_id,self.request.user.email)

ctx['oracle_systems'] = payments_models.OracleInterfaceSystem.objects.all()
ctx['system_id'] = system_id

ctx['system_interface_permssions'] = isp
ctx['system_interface_permssions_json'] = json.dumps(isp)
ctx['ois_found'] = ois_found

else:
self.template_name = 'dpaw_payments/forbidden.html'
return ctx

class FailedTransaction(generic.TemplateView):
template_name = 'dpaw_payments/failed_transaction.html'

Expand Down

0 comments on commit de4ac89

Please sign in to comment.