diff --git a/mooring/api.py b/mooring/api.py index 6773bfd27e..6a5f442cda 100644 --- a/mooring/api.py +++ b/mooring/api.py @@ -2018,12 +2018,13 @@ def retrieve(self, request, pk=None, ratis_id=None, format=None, show_all=False) for bp in v[2][date_rotate]['booking_period']: bp['status'] = 'open' bp['date'] = str(date_rotate) - + if avbp_map: if bp['id'] in avbp_map: bp['status'] = avbp_map[bp['id']] bp['booking_row_id'] = avbp_map2[bp['id']] bp['past_booking'] = False + #if date_rotate <= datetime.now().date(): # bp['past_booking'] = True bp_dt = datetime.strptime(str(bp['date'])+' '+str(bp['start_time']), '%Y-%m-%d %H:%M:%S') @@ -2180,6 +2181,7 @@ def create_admissions_booking(request, *args, **kwargs): admissionsBooking.customer = customer admissionsBooking.totalCost = total + admissionsBooking.created_by = request.user admissionsBooking.save() admissionsLine.cost = total admissionsLine.save() @@ -2612,9 +2614,12 @@ def list(self, request, *args, **kwargs): recordsTotal = None recordsFiltered = None res = None - + canceled = request.GET.get('canceled','False') + bt = [0,1] + if canceled == str('True'): + bt = [0,1,4] try: - data = AdmissionsBooking.objects.filter(booking_type__in=(0, 1)).order_by('-pk') + data = AdmissionsBooking.objects.filter(booking_type__in=bt).order_by('-pk') groups = MooringAreaGroup.objects.filter(members__in=[request.user,]) # If groups then we need to filter data by groups. if groups.count() > 0: @@ -2716,6 +2721,15 @@ class BookingViewSet(viewsets.ModelViewSet): def list(self, request, *args, **kwargs): from django.db import connection, transaction try: + + user_groups = MooringAreaGroup.objects.filter(members__in=[request.user]) + sql_group = "" + for ug in user_groups: + if sql_group == "": + sql_group = "mooring_mooringareagroup_moorings.mooringareagroup_id ="+str(ug.id) + else: + sql_group = sql_group+" OR mooring_mooringareagroup_moorings.mooringareagroup_id ="+str(ug.id) + search = request.GET.get('search[value]') draw = request.GET.get('draw') if request.GET.get('draw') else 1 start = request.GET.get('start') if request.GET.get('draw') else 1 @@ -2786,8 +2800,10 @@ def list(self, request, *args, **kwargs): sql += ' and mooring_booking.booking_type = 4 ' sqlCount += ' and mooring_booking.booking_type = 4 ' else: - sql += ' and (mooring_booking.booking_type != 3 and mooring_booking.booking_type != 4 )' - sqlCount += ' and (mooring_booking.booking_type != 3 and mooring_booking.booking_type != 4) ' +# sql += ' and (mooring_booking.booking_type != 3 and mooring_booking.booking_type != 4 )' +# sqlCount += ' and (mooring_booking.booking_type != 3 and mooring_booking.booking_type != 4) ' + sql += ' and (mooring_booking.booking_type != 3)' + sqlCount += ' and (mooring_booking.booking_type != 3) ' # sql += ' and mooring_booking.is_canceled = %(canceled)s' # sqlCount += ' and mooring_booking.is_canceled = %(canceled)s' @@ -2823,7 +2839,8 @@ def list(self, request, *args, **kwargs): #print(sql) cursor = connection.cursor() - cursor.execute("Select count(*) from mooring_booking ") + #cursor.execute("Select count(*) from mooring_booking ") + cursor.execute("select count(*) from mooring_booking left join mooring_mooringsitebooking on mooring_booking.id = mooring_mooringsitebooking.booking_id left join mooring_mooringsite on mooring_mooringsitebooking.campsite_id = mooring_mooringsite.id left join mooring_mooringareagroup_moorings on mooring_mooringsite.mooringarea_id = mooring_mooringareagroup_moorings.mooringarea_id where ("+sql_group+")") recordsTotal = cursor.fetchone()[0] cursor.execute(sqlCount, sqlParams) recordsFiltered = cursor.fetchone()[0] @@ -2837,11 +2854,13 @@ def list(self, request, *args, **kwargs): bookings_qs = Booking.objects.filter(id__in=[b['id'] for b in data]).prefetch_related('mooringarea', 'campsites', 'campsites__campsite', 'customer', 'regos', 'history', 'invoices', 'canceled_by') + booking_map = {b.id: b for b in bookings_qs} clean_data = [] for bk in data: cg = None - booking = booking_map[bk['id']] + booking = booking_map[bk['id']] + cg = booking.mooringarea bk['editable'] = booking.editable if booking.booking_type == 4: @@ -2861,7 +2880,7 @@ def list(self, request, *args, **kwargs): bk['canceled_by'] = booking.canceled_by.get_full_name() if booking.canceled_by else '' bk['cancelation_time'] = booking.cancelation_time if booking.cancelation_time else '' bk['paid'] = booking.paid - bk['invoices'] = [ i.invoice_reference for i in booking.invoices.all()] + bk['invoices'] = [i.invoice_reference for i in booking.invoices.all()] bk['active_invoices'] = [ i.invoice_reference for i in booking.invoices.all() if i.active] bk['guests'] = booking.guests bk['campsite_names'] = booking.campsite_name_list @@ -2869,10 +2888,16 @@ def list(self, request, *args, **kwargs): bk['firstname'] = booking.details.get('first_name','') bk['lastname'] = booking.details.get('last_name','') bk['admissions'] = { 'id' :booking.admission_payment.id, 'amount': booking.admission_payment.totalCost } if booking.admission_payment else None - + msb = MooringsiteBooking.objects.filter(booking=booking.id) msb_list = [] + in_mg = False for book in msb: + mooring_area_groups = MooringAreaGroup.objects.filter(moorings__in=[book.campsite.mooringarea]) + for ug in user_groups: + for mag in mooring_area_groups: + if ug.id == mag.id: + in_mg = True msb_list.append([book.campsite.name, book.campsite.mooringarea.park.district.region.name, book.from_dt, book.to_dt]) msb_list.sort(key=lambda item: item[2]) bk['mooringsite_bookings'] = msb_list @@ -2899,12 +2924,15 @@ def list(self, request, *args, **kwargs): refund_statuses = ['All','Partially Refunded','Not Refunded','Refunded'] if refund_status in refund_statuses: if refund_status == 'All': - clean_data.append(bk) + if in_mg is True: + clean_data.append(bk) else: if refund_status == booking.refund_status: - clean_data.append(bk) + if in_mg is True: + clean_data.append(bk) else: - clean_data.append(bk) + if in_mg is True: + clean_data.append(bk) return Response(OrderedDict([ ('recordsTotal', recordsTotal), @@ -3041,7 +3069,7 @@ def update(self, request, *args, **kwargs): 'num_infant' : guests['infants'], 'num_mooring' : guests['mooring'], } - + data = utils.update_booking(request,instance,booking_details) serializer = BookingSerializer(data) @@ -3074,6 +3102,7 @@ def partial_update(self, request, pk): value = itm[1] detail[key] = value request.POST['details'] = detail + serializer = self.get_serializer(booking, data=request.data, partial=True) if serializer.is_valid(): serializer.save() @@ -3868,6 +3897,30 @@ def get(self, request, format=None): return JsonResponse(data) +class GetProfileAdmin(views.APIView): + renderer_classes = [JSONRenderer,] + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + # Check if the user has any address and set to residential address + if request.user.is_staff: + user = EmailUser.objects.get(email=request.GET.get('email_address')) + serializer = UserSerializer(user) + data = serializer.data + groups = MooringAreaGroup.objects.filter(members__in=[user,]) + groups_text = [] + for group in groups: + groups_text.append(group.name) + data['is_inventory'] = is_inventory(user) + data['is_admin'] = is_admin(user) + data['is_payment_officer'] = is_payment_officer(user) + data['groups'] = groups_text + return JsonResponse(data) + else: + data['status'] = 'permission denied' + return JsonResponse(data) + + class UpdateProfilePersonal(views.APIView): renderer_classes = [JSONRenderer,] permission_classes = [IsAuthenticated] diff --git a/mooring/forms.py b/mooring/forms.py index 1e8d274e7d..4134194f1d 100644 --- a/mooring/forms.py +++ b/mooring/forms.py @@ -57,7 +57,7 @@ class BookingPeriodOptionForm(forms.ModelForm): #mooring_group = ChoiceField(choices=[],) class Meta: model = models.BookingPeriodOption - fields = ['period_name','option_description','small_price','medium_price','large_price','start_time','finish_time','change_group','cancel_group'] + fields = ['period_name','option_description','small_price','medium_price','large_price','start_time','finish_time','change_group','cancel_group','caption'] def __init__(self, *args, **kwargs): # User must be passed in as a kwarg. diff --git a/mooring/frontend/admissions/src/costs.vue b/mooring/frontend/admissions/src/costs.vue index 16e9dff31b..282e1fa0f4 100644 --- a/mooring/frontend/admissions/src/costs.vue +++ b/mooring/frontend/admissions/src/costs.vue @@ -152,6 +152,17 @@ export default { return ""; } } + }, { + data: 'mooring_group', + orderable: false, + mRender: function(data, type, full){ + if(data){ + var column = " " + full.mooring_group + "" + return column; + } else { + return ""; + } + } }, { data: 'editable', orderable: false, @@ -174,7 +185,7 @@ export default { }, }, priceHistoryDtHeaders:[ - "ID", "Period Start", "Period End", "Adult", "Child", "Infant" ,"Family", "Action" + "ID", "Period Start", "Period End", "Adult", "Child", "Infant" ,"Family", "Collecting Agency","Action" ] } diff --git a/mooring/frontend/admissions/src/priceHistory/parkPriceHistoryDetail.vue b/mooring/frontend/admissions/src/priceHistory/parkPriceHistoryDetail.vue index 922e9760ea..6ae8b0fd61 100644 --- a/mooring/frontend/admissions/src/priceHistory/parkPriceHistoryDetail.vue +++ b/mooring/frontend/admissions/src/priceHistory/parkPriceHistoryDetail.vue @@ -98,7 +98,7 @@
- +