Skip to content

Commit

Permalink
Merge pull request #153 from shibaken/working
Browse files Browse the repository at this point in the history
working to main
  • Loading branch information
shibaken authored Dec 13, 2023
2 parents 4e58a26 + 98023d2 commit 28f19ee
Show file tree
Hide file tree
Showing 17 changed files with 246 additions and 126 deletions.
26 changes: 21 additions & 5 deletions mooringlicensing/components/approvals/api.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import traceback
from django.core.paginator import Paginator, EmptyPage
from confy import env
import datetime
import pytz
Expand Down Expand Up @@ -112,11 +113,21 @@ class GetSticker(views.APIView):
renderer_classes = [JSONRenderer, ]

def get(self, request, format=None):
search_term = request.GET.get('term', '')
search_term = request.GET.get('search_term', '')
page_number = request.GET.get('page_number', 1)
items_per_page = 10

if search_term:
data = Sticker.objects.filter(number__icontains=search_term)[:10]
data = Sticker.objects.filter(number__icontains=search_term)
paginator = Paginator(data, items_per_page)
try:
current_page = paginator.page(page_number)
my_objects = current_page.object_list
except EmptyPage:
my_objects = []

data_transform = []
for sticker in data:
for sticker in my_objects:
approval_history = sticker.approvalhistory_set.order_by('id').first() # Should not be None, but could be None for the data generated at the early stage of development.
if approval_history and approval_history.approval:
data_transform.append({
Expand All @@ -134,7 +145,12 @@ def get(self, request, format=None):
# Should not reach here
pass

return Response({"results": data_transform})
return Response({
"results": data_transform,
"pagination": {
"more": current_page.has_next()
}
})
return Response()


Expand Down Expand Up @@ -349,7 +365,7 @@ def get_queryset(self):
all = Approval.objects.all() # We may need to exclude the approvals created from the Waiting List Application

# target_email_user_id = int(self.request.GET.get('target_email_user_id', 0))
target_email_user_id = int(self.request.data.get('target_email_user_id', 0))
target_email_user_id = int(self.request.GET.get('target_email_user_id', 0))

if is_internal(self.request):
if target_email_user_id:
Expand Down
13 changes: 9 additions & 4 deletions mooringlicensing/components/compliances/api.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import logging
import traceback
# import os
# import datetime
Expand Down Expand Up @@ -49,6 +50,8 @@
from mooringlicensing.helpers import is_customer, is_internal
from rest_framework_datatables.pagination import DatatablesPageNumberPagination

logger = logging.getLogger(__name__)


class ComplianceViewSet(viewsets.ModelViewSet):
serializer_class = ComplianceSerializer
Expand Down Expand Up @@ -372,9 +375,6 @@ def filter_queryset(self, request, queryset, view):
if filter_compliance_status and not filter_compliance_status.lower() == 'all':
queryset = queryset.filter(customer_status=filter_compliance_status)

# getter = request.query_params.get
# fields = self.get_fields(getter)
# ordering = self.get_ordering(getter, fields)
fields = self.get_fields(request)
ordering = self.get_ordering(request, view, fields)
queryset = queryset.order_by(*ordering)
Expand All @@ -383,8 +383,13 @@ def filter_queryset(self, request, queryset, view):

try:
queryset = super(ComplianceFilterBackend, self).filter_queryset(request, queryset, view)

# Custom search
# search_term = request.GET.get('search[value]') # This has a search term.
# email_users = EmailUser.objects.filter(Q(first_name__icontains=search_term) | Q(last_name__icontains=search_term) | Q(email__icontains=search_term)).values_list('id', flat=True)
# q_set = Compliance.objects.filter(submitter__in=list(email_users))
except Exception as e:
print(e)
logger.error(f'ComplianceFilterBackend raises an error: [{e}]. Query may not work correctly.')
setattr(view, '_datatables_total_count', total_count)
return queryset

Expand Down
2 changes: 0 additions & 2 deletions mooringlicensing/components/main/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,7 @@ class CommunicationsLogEntry(models.Model):
subject = models.CharField(max_length=200, blank=True, verbose_name="Subject / Description")
text = models.TextField(blank=True)

# customer = models.ForeignKey(EmailUser, null=True, related_name='+')
customer = models.IntegerField(null=True) # EmailUserRO
# staff = models.ForeignKey(EmailUser, null=True, related_name='+')
staff = models.IntegerField(null=True, blank=True) # EmailUserRO

created = models.DateTimeField(auto_now_add=True, null=False, blank=False)
Expand Down
2 changes: 2 additions & 0 deletions mooringlicensing/components/payments_ml/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ def generate_line_item(application_type, fee_amount_adjusted, fee_constructor, i
return {
'ledger_description': ledger_description,
'oracle_code': application_type.get_oracle_code_by_date(target_datetime.date()),
# 'price_incl_tax': float(fee_amount_adjusted),
# 'price_excl_tax': float(calculate_excl_gst(fee_amount_adjusted)) if fee_constructor.incur_gst else float(fee_amount_adjusted),
'price_incl_tax': total_amount,
'price_excl_tax': total_amount_excl_tax,
'quantity': 1,
Expand Down
124 changes: 84 additions & 40 deletions mooringlicensing/components/proposals/api.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
from django.core.paginator import Paginator, EmptyPage
import os
import traceback
import pathlib
Expand Down Expand Up @@ -146,61 +147,103 @@ class GetVessel(views.APIView):
renderer_classes = [JSONRenderer, ]

def get(self, request, format=None):
search_term = request.GET.get('term', '')
search_term = request.GET.get('search_term', '')
page_number = request.GET.get('page_number', 1)
items_per_page = 10

if search_term:
data_transform = []

### VesselDetails
ml_data = VesselDetails.filtered_objects.filter(
Q(vessel__rego_no__icontains=search_term) |
Q(vessel_name__icontains=search_term)
).values(
'vessel__id',
'vessel__rego_no',
'vessel_name'
)[:10]
for vd in ml_data:
Q(vessel__rego_no__icontains=search_term) |
Q(vessel_name__icontains=search_term)
).values(
'vessel__id',
'vessel__rego_no',
'vessel_name'
)
paginator = Paginator(ml_data, items_per_page)
try:
current_page = paginator.page(page_number)
my_objects = current_page.object_list
except EmptyPage:
logger.debug(f'VesselDetails empty')
my_objects = []

for vd in my_objects:
data_transform.append({
'id': vd.get('vessel__id'),
'rego_no': vd.get('vessel__rego_no'),
'text': vd.get('vessel__rego_no') + ' - ' + vd.get('vessel_name'),
'entity_type': 'ml',
})
})

### DcvVessel
dcv_data = DcvVessel.objects.filter(
Q(rego_no__icontains=search_term) |
Q(vessel_name__icontains=search_term)
).values(
'id',
'rego_no',
'vessel_name'
)[:10]
for dcv in dcv_data:
Q(rego_no__icontains=search_term) |
Q(vessel_name__icontains=search_term)
).values(
'id',
'rego_no',
'vessel_name'
)
paginator2 = Paginator(dcv_data, items_per_page)
try:
current_page2 = paginator2.page(page_number)
my_objects2 = current_page2.object_list
except EmptyPage:
logger.debug(f'DcvVessel empty')
my_objects2 = []

for dcv in my_objects2:
data_transform.append({
'id': dcv.get('id'),
'rego_no': dcv.get('rego_no'),
'text': dcv.get('rego_no') + ' - ' + dcv.get('vessel_name'),
'entity_type': 'dcv',
})
})

## order results
data_transform.sort(key=lambda item: item.get("id"))
return Response({"results": data_transform})

return Response({
"results": data_transform,
"pagination": {
"more": current_page.has_next() or current_page2.has_next()
}
})
return Response()


class GetMooring(views.APIView):
renderer_classes = [JSONRenderer, ]

def get(self, request, format=None):
search_term = request.GET.get('search_term', '')
page_number = request.GET.get('page_number', 1)
items_per_page = 10
private_moorings = request.GET.get('private_moorings')
search_term = request.GET.get('term', '')

if search_term:
if private_moorings:
# data = Mooring.private_moorings.filter(name__icontains=search_term).values('id', 'name')[:10]
data = Mooring.private_moorings.filter(name__icontains=search_term).values('id', 'name')
else:
# data = Mooring.objects.filter(name__icontains=search_term).values('id', 'name')[:10]
data = Mooring.objects.filter(name__icontains=search_term).values('id', 'name')
data_transform = [{'id': mooring['id'], 'text': mooring['name']} for mooring in data]
return Response({"results": data_transform})
paginator = Paginator(data, items_per_page)
try:
current_page = paginator.page(page_number)
my_objects = current_page.object_list
except EmptyPage:
my_objects = []

data_transform = [{'id': mooring['id'], 'text': mooring['name']} for mooring in my_objects]

return Response({
"results": data_transform,
"pagination": {
"more": current_page.has_next()
}
})
return Response()


Expand Down Expand Up @@ -566,9 +609,10 @@ def get_queryset(self):

if is_internal(self.request):
if target_email_user_id:
# Internal user may be accessing here via search person result.
target_user = EmailUser.objects.get(id=target_email_user_id)
user_orgs = [org.id for org in target_user.mooringlicensing_organisations.all()]
all = all.filter(Q(org_applicant_id__in=user_orgs) | Q(submitter=target_user.id) | Q(site_licensee_email=target_user.email))
user_orgs = Organisation.objects.filter(delegates__contains=[target_user.id])
all = all.filter(Q(org_applicant__in=user_orgs) | Q(submitter=target_user.id) | Q(site_licensee_email=target_user.email))
return all
elif is_customer(self.request):
orgs = Organisation.objects.filter(delegates__contains=[request_user.id])
Expand Down Expand Up @@ -1874,7 +1918,7 @@ class VesselViewSet(viewsets.ModelViewSet):
@detail_route(methods=['POST',], detail=True)
@basic_exception_handler
def find_related_bookings(self, request, *args, **kwargs):
return Response({})
# return Response({})
vessel = self.get_object()
booking_date_str = request.data.get("selected_date")
booking_date = None
Expand All @@ -1901,23 +1945,23 @@ def find_related_approvals(self, request, *args, **kwargs):
for vd in vd_set:
for prop in vd.proposal_set.all():
if (
prop.approval and
selected_date >= prop.approval.start_date and
selected_date <= prop.approval.expiry_date and
# ensure vessel has not been sold
prop.vessel_ownership and not prop.vessel_ownership.end_date
):
prop.approval and
selected_date >= prop.approval.start_date and
selected_date <= prop.approval.expiry_date and
# ensure vessel has not been sold
prop.vessel_ownership and not prop.vessel_ownership.end_date
):
if prop.approval not in approval_list:
approval_list.append(prop.approval)
else:
for vd in vd_set:
for prop in vd.proposal_set.all():
if (
prop.approval and
prop.approval.status == 'current' and
# ensure vessel has not been sold
prop.vessel_ownership and not prop.vessel_ownership.end_date
):
prop.approval and
prop.approval.status == 'current' and
# ensure vessel has not been sold
prop.vessel_ownership and not prop.vessel_ownership.end_date
):
if prop.approval not in approval_list:
approval_list.append(prop.approval)

Expand Down
Loading

0 comments on commit 28f19ee

Please sign in to comment.