def track_shipment_display(request): try: lr_obj = LrNumber.objects.get(lr_number__iexact=request.GET.get('shipment_id')) booking_unloaded = check_booking_status(lr_obj.booking, 'unloaded') if lr_obj.booking.pod_status == 'completed' or booking_unloaded: messages.info(request, 'This shipment has been delivered at the unloading point.') return render(request=request, template_name='index/track_shipment.html', context={'booking': lr_obj.booking, 'lr_obj': lr_obj}) else: gps = shipment_gps_data(booking=lr_obj.booking) if gps: # if gps['location_time'] > datetime.utcnow() - timedelta(hours=24): if gps['location_time'].replace(tzinfo=None) > datetime.utcnow() - timedelta(hours=24): gps_data = google_reverse_geocode(gps['latitude'], gps['longitude']) gps_data['driver_name'] = gps['driver_name'] gps_data['driver_number'] = gps['driver_number'] gps_data['updated_on'] = gps['location_time'] gps_data['vehicle_number'] = display_format(gps['vehicle_number']) context = {'lr_obj': lr_obj, 'gps': gps_data} print(context) return render(request=request, template_name='index/track_shipment.html', context=context) else: messages.info(request, 'We apologize but location data for this shipment is not available as of now.') return render(request=request, template_name='index/track_shipment.html', context={'booking': lr_obj.booking, 'lr_obj': lr_obj}) else: messages.info(request, 'We apologize but location data for this shipment is not available as of now.') return render(request=request, template_name='index/track_shipment.html', context={'booking': lr_obj.booking, 'lr_obj': lr_obj}) except LrNumber.DoesNotExist: messages.error(request, 'Incorrect LR, please check and try again.') return render(request=request, template_name='index/index-gloify.html')
def update_booking_status_mapping_location(gps_device): from restapi.models import BookingStatusesMapping, BookingStatusesMappingLocation from restapi.serializers.task_dashboard import BookingStatusesMappingLocationSerializer if gps_device: booking = gps_device.vehicle.manualbooking_set.exclude(booking_status='cancelled').order_by('id').last() if isinstance(booking, ManualBooking): bsm = BookingStatusesMapping.objects.filter(manual_booking=booking).order_by('-id')[:1] if bsm: reverse_geocode = google_reverse_geocode(gps_device.latitude, gps_device.longitude) data = { 'booking_status_mapping_id': bsm[0].id, 'city': reverse_geocode['district'], 'district': reverse_geocode['district'], 'state': reverse_geocode['state'], 'latitude': reverse_geocode['latitude'], 'longitude': reverse_geocode['longitude'], 'country': 'India' } booking_statuses_mapping_location_serializer = BookingStatusesMappingLocationSerializer(data=data) if booking_statuses_mapping_location_serializer.is_valid(): bsmls = booking_statuses_mapping_location_serializer.save() BookingStatusesMappingLocation.objects.filter(id=bsmls.id).update(created_on=gps_device.location_time) else: print('GPS Location update did not work '+ str(booking_statuses_mapping_location_serializer.errors)) else: print('BookingStatusesMapping Not found for vehicle:' + gps_device.vehicle.vehicle_number)
def location(self): if self.longitude is None or self.latitude is None: return None from api.models import google_reverse_geocode geo_data = google_reverse_geocode(self.latitude, self.longitude) data = { 'name': geo_data['name'], 'district': geo_data['district'], 'state': geo_data['state'], 'country': geo_data['country'], 'latitude': float(self.latitude), 'longitude': float(self.longitude), 'time': format_date(self.datetime or timezone.now()) } return data