Skip to content

Commit

Permalink
Merge pull request #502 from awf-dbca/order-search-fix
Browse files Browse the repository at this point in the history
Order search fix
  • Loading branch information
xzzy authored Dec 31, 2024
2 parents ea33446 + cfcdf42 commit f8408ce
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 31 deletions.
12 changes: 6 additions & 6 deletions mooringlicensing/components/approvals/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,14 +296,14 @@ def filter_queryset(self, request, queryset, view):
).values_list("proposal_id", flat=True))

#Search by vessel registration
q_set = queryset.filter(
queryset = queryset.filter(
Q(current_proposal__id__in=proposal_applicant_proposals)|
Q(current_proposal__submitter__in=system_user_ids)|
Q(id__in=VesselOwnershipOnApproval.objects.filter(vessel_ownership__vessel__rego_no__icontains=search_text).values_list('approval__id', flat=True))|
Q(current_proposal__vessel_details__vessel__rego_no__icontains=search_text)
)

queryset = super_queryset.union(q_set)
queryset = queryset.distinct() | super_queryset
except Exception as e:
logger.error(e)

Expand All @@ -312,17 +312,17 @@ def filter_queryset(self, request, queryset, view):

#special handling for ordering by holder
special_ordering = False
HOLDER = 'holder'
REVERSE_HOLDER = '-holder'
HOLDER = 'current_proposal__proposal_applicant'
REVERSE_HOLDER = '-current_proposal__proposal_applicant'
if HOLDER in ordering:
special_ordering = True
ordering.remove(HOLDER)
queryset = queryset.annotate(holder=Concat('current_proposal__proposal_applicant__first_name',Value(" "),'current_proposal__proposal_applicant__last_name'))
queryset = queryset.annotate(current_proposal__proposal_applicant=Concat('current_proposal__proposal_applicant__first_name',Value(" "),'current_proposal__proposal_applicant__last_name'))
queryset = queryset.order_by(HOLDER)
if REVERSE_HOLDER in ordering:
special_ordering = True
ordering.remove(REVERSE_HOLDER)
queryset = queryset.annotate(holder=Concat('current_proposal__proposal_applicant__first_name',Value(" "),'current_proposal__proposal_applicant__last_name'))
queryset = queryset.annotate(current_proposal__proposal_applicant=Concat('current_proposal__proposal_applicant__first_name',Value(" "),'current_proposal__proposal_applicant__last_name'))
queryset = queryset.order_by(REVERSE_HOLDER)

if len(ordering):
Expand Down
64 changes: 60 additions & 4 deletions mooringlicensing/components/proposals/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -610,17 +610,17 @@ def filter_queryset(self, request, queryset, view):

#special handling for ordering by applicant
special_ordering = False
APPLICANT = 'applicant'
REVERSE_APPLICANT = '-applicant'
APPLICANT = 'proposal_applicant'
REVERSE_APPLICANT = '-proposal_applicant'
if APPLICANT in ordering:
special_ordering = True
ordering.remove(APPLICANT)
queryset = queryset.annotate(applicant_full_name=Concat('proposal_applicant__first_name',Value(" "),'proposal_applicant__last_name'))
queryset = queryset.annotate(proposal_applicant_full_name=Concat('proposal_applicant__first_name',Value(" "),'proposal_applicant__last_name'))
queryset = queryset.order_by(APPLICANT+"_full_name")
if REVERSE_APPLICANT in ordering:
special_ordering = True
ordering.remove(REVERSE_APPLICANT)
queryset = queryset.annotate(applicant_full_name=Concat('proposal_applicant__first_name',Value(" "),'proposal_applicant__last_name'))
queryset = queryset.annotate(proposal_applicant_full_name=Concat('proposal_applicant__first_name',Value(" "),'proposal_applicant__last_name'))
queryset = queryset.order_by(REVERSE_APPLICANT+"_full_name")

if len(ordering):
Expand All @@ -632,8 +632,64 @@ def filter_queryset(self, request, queryset, view):
setattr(view, '_datatables_filtered_count', total_count)
return queryset

class ProposalSiteLicenseeMooringRequestFilterBackend(DatatablesFilterBackend):
def filter_queryset(self, request, queryset, view):

total_count = queryset.count()
filter_query = Q()

try:
super_queryset = super(ProposalSiteLicenseeMooringRequestFilterBackend, self).filter_queryset(request, queryset, view).distinct()
except Exception as e:
logger.exception(f'Failed to filter the queryset. Error: [{e}]')

search_text = request.GET.get('search[value]')
if search_text:

system_user_ids = list(SystemUser.objects.annotate(full_name=Concat('legal_first_name',Value(" "),'legal_last_name',output_field=CharField()))
.filter(
Q(legal_first_name__icontains=search_text) | Q(legal_last_name__icontains=search_text) | Q(email__icontains=search_text) | Q(full_name__icontains=search_text)
).values_list("ledger_id", flat=True))

proposal_applicant_proposals = list(ProposalApplicant.objects.annotate(full_name=Concat('first_name',Value(" "),'last_name',output_field=CharField()))
.filter(
Q(first_name__icontains=search_text) | Q(last_name__icontains=search_text) | Q(email__icontains=search_text) | Q(full_name__icontains=search_text)
).values_list("proposal_id", flat=True))

queryset = queryset.filter(Q(proposal__id__in=proposal_applicant_proposals)|Q(proposal__submitter__in=system_user_ids))
queryset = queryset.distinct() | super_queryset

queryset = queryset.filter(filter_query)

fields = self.get_fields(request)
ordering = self.get_ordering(request, view, fields)

#special handling for ordering by applicant
special_ordering = False
APPLICANT = 'proposal__proposal_applicant'
REVERSE_APPLICANT = '-proposal__proposal_applicant'
if APPLICANT in ordering:
special_ordering = True
ordering.remove(APPLICANT)
queryset = queryset.annotate(proposal__proposal_applicant_full_name=Concat('proposal__proposal_applicant__first_name',Value(" "),'proposal__proposal_applicant__last_name'))
queryset = queryset.order_by(APPLICANT+"_full_name")
if REVERSE_APPLICANT in ordering:
special_ordering = True
ordering.remove(REVERSE_APPLICANT)
queryset = queryset.annotate(proposal__proposal_applicant_full_name=Concat('proposal__proposal_applicant__first_name',Value(" "),'proposal__proposal_applicant__last_name'))
queryset = queryset.order_by(REVERSE_APPLICANT+"_full_name")

if len(ordering):
queryset = queryset.order_by(*ordering)
elif not special_ordering:
queryset = queryset.order_by('-id')

total_count = queryset.count()
setattr(view, '_datatables_filtered_count', total_count)
return queryset

class SiteLicenseeMooringRequestPaginatedViewSet(viewsets.ReadOnlyModelViewSet):
filter_backends = (ProposalSiteLicenseeMooringRequestFilterBackend,)
pagination_class = DatatablesPageNumberPagination
queryset = ProposalSiteLicenseeMooringRequest.objects.none()
serializer_class = ListProposalSiteLicenseeMooringRequestSerializer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

<script>
import datatable from '@/utils/vue/datatable.vue'
import Vue from 'vue'
import { api_endpoints, helpers, constants } from '@/utils/hooks'
export default {
name: 'TableCompliances',
Expand Down Expand Up @@ -71,12 +70,11 @@ export default {
},
responsive: true,
serverSide: true,
searching: false,
searching: true,
ajax: {
"url": api_endpoints.site_licensee_mooring_requests + '?format=datatables',
"dataSrc": 'data',
},
// dom: 'lBfrtip',
dom: 'lBfrtp',
buttons: buttons,
columns: [
Expand All @@ -87,7 +85,6 @@ export default {
searchable: false,
visible: false,
'render': function(row, type, full){
console.log(full)
return full.id
}
},
Expand All @@ -108,7 +105,8 @@ export default {
visible: true,
'render': function(row, type, full){
return full.proposal_number
}
},
name: "proposal__lodgement_number",
},
{
// 3. Mooring
Expand All @@ -118,23 +116,25 @@ export default {
visible: true,
'render': function(row, type, full){
return full.mooring_name
}
},
name: "mooring__name",
},
{
// 4. Applicant
data: "applicant_name",
orderable: true,
searchable: true,
searchable: false,
visible: true,
'render': function(row, type, full){
return full.applicant_name
}
},
name: "proposal__proposal_applicant",
},
{
// 5. Status
data: "proposal_status",
orderable: true,
searchable: true,
searchable: false,
visible: true,
'render': function(row, type, full){
if (full.approved_by_endorser) {
Expand All @@ -144,13 +144,14 @@ export default {
} else {
return full.proposal_status
}
}
},
name: "proposal__processing_status",
},
{
// 10. Action
data: "can_endorse",
orderable: true,
searchable: true,
orderable: false,
searchable: false,
visible: true,
'render': function(row, type, full){
//return 'View<br />Endorse<br />Decline'
Expand All @@ -162,12 +163,8 @@ export default {
&& !full.declined_by_endorser
&& !full.approved_by_endorser
){
// links += `<a href='/aua_for_endorsement/${full.uuid}/endorse/'>Endorse</a><br/>`;
// links += `<a href='/aua_for_endorsement/${full.uuid}/decline/'>Decline</a><br/>`;
// links += `<a href='#${full.id}' data-request-new-sticker='${full.id}'>Request New Sticker</a><br/>`
links += `<a href='#${full.id}' data-approve-endorsement='${full.uuid}' data-approve-endorsement-mooring='${full.mooring_name}'>Endorse</a><br/>`
links += `<a href='#${full.id}' data-decline-endorsement='${full.uuid}' data-approve-endorsement-mooring='${full.mooring_name}'>Decline</a><br/>`
// links += `<a href='/aua_for_endorsement/${full.uuid}/decline/'>Decline</a><br/>`;
}
return links
}
Expand Down Expand Up @@ -210,9 +207,6 @@ export default {
},
components:{
datatable
},
watch: {
},
computed: {
is_external: function() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ export default {
'render': function(row, type, full){
return full.holder;
},
name: 'holder'
name: 'current_proposal__proposal_applicant'
}
},
columnPreferredMooringBay: function() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ export default {
}
return ''
},
name: 'applicant'
name: 'proposal_applicant'
}
},
column_assigned_to: function(){
Expand Down

0 comments on commit f8408ce

Please sign in to comment.