From 9997cb80a55594dbfd5722c1aa362054d8598553 Mon Sep 17 00:00:00 2001 From: Jason Moore Date: Tue, 31 Dec 2024 12:37:32 +0800 Subject: [PATCH] Change Itemised report to a date range --- .../migrations/0036_auto_20241107_1450.py | 20 ++++++ ledgergw/api.py | 23 +++++-- ledgergw/reports.py | 4 +- ledgergw/serialisers.py | 3 +- ledgergw/templates/ledgergw/web/reports.html | 67 +++++++++++++++++-- 5 files changed, 104 insertions(+), 13 deletions(-) create mode 100644 ledger/payments/migrations/0036_auto_20241107_1450.py diff --git a/ledger/payments/migrations/0036_auto_20241107_1450.py b/ledger/payments/migrations/0036_auto_20241107_1450.py new file mode 100644 index 000000000..0754b02ce --- /dev/null +++ b/ledger/payments/migrations/0036_auto_20241107_1450.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2024-11-07 06:50 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('payments', '0035_auto_20240702_2229'), + ] + + 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'), ('reports_access', 'Reports Access')], default=None, max_length=100, null=True), + ), + ] diff --git a/ledgergw/api.py b/ledgergw/api.py index 4ee100248..f63d8b398 100644 --- a/ledgergw/api.py +++ b/ledgergw/api.py @@ -1751,21 +1751,34 @@ def get(self, request, format=None): report = None data = { - "date": request.GET.get('date'), + "date_to": request.GET.get('settlement_date_to'), + "date_from": request.GET.get('settlement_date_from'), } + + serializer = SettlementReportSerializer(data=data) serializer.is_valid(raise_exception=True) - filename = 'Itemised-Transaction-Report-{}'.format(str(serializer.validated_data['date'])) + + diff_between_dates = (serializer.validated_data['date_to'] - serializer.validated_data['date_from']) + diff_between_dates_in_days = diff_between_dates.days + if diff_between_dates_in_days > 31: + raise serializers.ValidationError('This report has a max limit of 31 days. Please try a smaller date range.') + + if diff_between_dates_in_days < 0: + raise serializers.ValidationError('There is an error with the dates you entered. Please check your dates and try again.') + + filename = 'Itemised-Transaction-Report-from-{}-to-{}'.format(serializer.validated_data['date_from'].strftime("%Y-%m-%d"),serializer.validated_data['date_to'].strftime("%Y-%m-%d")) # Generate Report - report = reports.itemised_transaction_report(serializer.validated_data['date'],system) + report = reports.itemised_transaction_report(serializer.validated_data['date_from'],serializer.validated_data['date_to'],system) if report: response = HttpResponse(FileWrapper(report), content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="{}.csv"'.format(filename) return response else: - raise serializers.ValidationError('No report was generated.') + raise serializers.ValidationError('No report was generated.') else: - raise serializers.ValidationError('Forbidden Access.') + raise serializers.ValidationError('Forbidden Access.') + except serializers.ValidationError: raise except Exception as e: diff --git a/ledgergw/reports.py b/ledgergw/reports.py index ef71c35cd..e0bb54a81 100644 --- a/ledgergw/reports.py +++ b/ledgergw/reports.py @@ -434,9 +434,9 @@ def booking_bpoint_settlement_report(_date,system): raise -def itemised_transaction_report(_date,system): +def itemised_transaction_report(_date_from,_date_to,system): try: - invoices = Invoice.objects.filter(settlement_date=_date,reference__startswith=system) + invoices = Invoice.objects.filter(settlement_date__gte=_date_from,settlement_date__lte=_date_to,reference__startswith=system).order_by('settlement_date') strIO = StringIO() fieldnames = ['Invoice Number','Invoice Date','Order Number','Oracle code','Description','Settlement Date','Quantity','Tax Incl','Tax Excl','GST'] diff --git a/ledgergw/serialisers.py b/ledgergw/serialisers.py index 9cd489a39..9502d43df 100644 --- a/ledgergw/serialisers.py +++ b/ledgergw/serialisers.py @@ -7,7 +7,8 @@ class ReportSerializer(serializers.Serializer): end = serializers.DateTimeField(input_formats=['%d/%m/%Y']) class SettlementReportSerializer(serializers.Serializer): - date = serializers.DateTimeField(input_formats=['%d/%m/%Y']) + date_from = serializers.DateTimeField(input_formats=['%d/%m/%Y']) + date_to= serializers.DateTimeField(input_formats=['%d/%m/%Y']) class OracleSerializer(serializers.Serializer): date = serializers.DateField(input_formats=['%d/%m/%Y','%Y-%m-%d']) diff --git a/ledgergw/templates/ledgergw/web/reports.html b/ledgergw/templates/ledgergw/web/reports.html index 5eda34423..bb2bd0639 100644 --- a/ledgergw/templates/ledgergw/web/reports.html +++ b/ledgergw/templates/ledgergw/web/reports.html @@ -313,21 +313,40 @@

Itemised Transactions Report

+
- +
- + + + + +
+
+ +
+
+
+ +
+
+ +
+ +
+
+
@@ -415,6 +434,7 @@

Itemised Transactions Report

reports.var.paymentauditDatePicker = $('#paymentauditDatePicker').datepicker(reports.var.datepickerOptions); reports.var.timepaymentauditreportDatePicker = $('#timepaymentauditreportDatePicker').datepicker(reports.var.datepickerOptions); reports.var.itemisedtransreportDatePicker = $('#itemisedtransreportDatePicker').datepicker(reports.var.datepickerOptions); + reports.var.itemisedtransreportToDatePicker = $('#itemisedtransreportToDatePicker').datepicker(reports.var.datepickerOptions); reports.var.flatDateStartPicker.on('dp.hide',function (e) { reports.var.flatDateEndPicker.data("DateTimePicker").date(null); reports.var.flatDateEndPicker.data("DateTimePicker").minDate(e.date); @@ -549,15 +569,52 @@

Itemised Transactions Report

}, ItemisedTransactionReport: function() { - var settlement_date = moment(reports.var.itemisedtransreportDatePicker.datepicker("getDate")).format('DD/MM/YYYY'); - var report_url = reports.var.itemised_transactions_url+"?system="+reports.var.system_id+"&date="+settlement_date; - window.location.assign(report_url); + var settlement_date_from = moment(reports.var.itemisedtransreportDatePicker.datepicker("getDate")).format('DD/MM/YYYY'); + var settlement_date_to = moment(reports.var.itemisedtransreportToDatePicker.datepicker("getDate")).format('DD/MM/YYYY'); + var report_url = reports.var.itemised_transactions_url+"?system="+reports.var.system_id+"&settlement_date_from="+settlement_date_from+"&settlement_date_to="+settlement_date_to; + + + fetch(report_url) + .then(resp => { + + if (resp.status != 200) { + + return resp.text() ; + + } + return resp.blob(); + } + + ) + .then(blob => { + + if (typeof blob == 'string') { + return Promise.reject(blob); + } + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + // the filename you want + a.download = 'itemised_transaction_report_'+moment(reports.var.itemisedtransreportDatePicker.datepicker("getDate")).format('DD-MM-YYYY')+'-'+moment(reports.var.itemisedtransreportToDatePicker.datepicker("getDate")).format('DD-MM-YYYY')+'.csv'; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + alert('File downloaded successfully!'); + + }) + .catch(err => { + alert('ERROR: '+err) + + }); + // window.location.assign(report_url); } + } reports.init();