def web_upload(self, request): lr_number_id = request.data.get('lr_number', None) if not lr_number_id: return error_response(msg='lr_number id not provided', status=400, data={}) if str(lr_number_id).startswith('BROKER'): booking = get_or_none(ManualBooking, booking_id=lr_number_id) lr_obj = None else: lr_obj = get_or_none(LrNumber, id=lr_number_id) booking = None if not isinstance(lr_obj, LrNumber) else lr_obj.booking if not (isinstance(lr_obj, LrNumber) or isinstance(booking, ManualBooking)): return error_response(msg='LrNumber with id=%s not found' % lr_number_id, status=404, data={}) if not request.FILES: return error_response(msg='no file to upload', status=400, data={}) upload_file = request.FILES.get('file') pod_file = create_pod_file(lr_number=lr_obj, upload_file=upload_file, user=User.objects.last(), booking=booking) pod_serializer = PODFileSerializer(pod_file) booking_unloaded = check_booking_status(booking, 'unloaded') if not booking_unloaded: create_new_booking_status(booking, 'unloaded', User.objects.get(username='******')) else: update_booking_status(booking, 'unloaded', 'in_progress', User.objects.get(username='******')) booking_pod_uploaded = check_booking_status(booking, 'pod_uploaded') if not booking_pod_uploaded: create_new_booking_status(booking, 'pod_uploaded', request.user) else: update_booking_status(booking, 'pod_uploaded', 'in_progress', request.user) return Response(status=status.HTTP_200_OK, data={ 'files': [pod_serializer.data], 'Content-Disposition': 'inline; filename=files.json' })
def update_invoice_booking_status(invoice_id, mode, user): invoice = get_or_none(Invoice, id=invoice_id) if invoice: i_bookings = invoice.bookings.all() for booking in i_bookings: if mode == 'party_invoice_sent': ManualBooking.objects.filter(id=booking.id).update(invoice_status='invoice_sent') if mode == 'invoice_confirmed': ManualBooking.objects.filter(id=booking.id).update(invoice_status='invoice_confirmed') party_invoice_sent = check_booking_status(booking, mode) if not party_invoice_sent: create_new_booking_status(booking, mode, user) else: update_booking_status(booking, mode, 'in_progress', user)
def create(self, request): request.data['user'] = request.user.username data = request.data booking = get_or_none(ManualBooking, booking_id=data['lr_number']) if not isinstance(booking, ManualBooking): lr_number = get_or_none(LrNumber, lr_number=data.get('lr_number', None)) booking = lr_number.booking if isinstance(lr_number.booking, ManualBooking) else None parsed_data = parse_pod_upload_fms(data) for pod in parsed_data: s3_upload_serializer = S3UploadSerializer( data=pod.pop('s3_upload_data')) if s3_upload_serializer.is_valid(): s3_upload = s3_upload_serializer.save() pod['s3_upload'] = s3_upload.id else: return error_response( status=status.HTTP_400_BAD_REQUEST, data=s3_upload_serializer.errors, msg="Something went wrong, Please try later") pod_file_serializer = PODFileSerializer(data=pod) if pod_file_serializer.is_valid(): pod_file_serializer.save() else: return error_response( status=status.HTTP_400_BAD_REQUEST, data=s3_upload_serializer.errors, msg="Something went wrong, Please try later") booking_unloaded = check_booking_status(booking, 'unloaded') if not booking_unloaded: create_new_booking_status(booking, 'unloaded', User.objects.get(username='******')) else: update_booking_status(booking, 'unloaded', 'in_progress', User.objects.get(username='******')) booking_pod_uploaded = check_booking_status(booking, 'pod_uploaded') if not booking_pod_uploaded: create_new_booking_status(booking, 'pod_uploaded', request.user) else: update_booking_status(booking, 'pod_uploaded', 'in_progress', request.user) return success_response(data={}, status=status.HTTP_201_CREATED, msg="POD Files created")
def resubmit(self, request): resubmission_remark = request.data.get('resubmission_remark') booking_id = request.data.get('booking_id') resubmitted_pod = request.data.get('resubmitted_pod') if not resubmission_remark: return error_response(msg="Remarks is mandatory", status=status.HTTP_400_BAD_REQUEST, data={}) if not booking_id: return error_response(msg="Booking id is required", status=status.HTTP_400_BAD_REQUEST, data={}) booking = get_or_none(ManualBooking, booking_id=booking_id) if not isinstance(booking, ManualBooking): return error_response(msg="BAD request", status=status.HTTP_400_BAD_REQUEST, data={}) if not PODFile.objects.filter(booking=booking).exists(): return error_response(msg="BAD Request", status=status.HTTP_400_BAD_REQUEST, data={}) PODFile.objects.filter(id__in=resubmitted_pod).update(verified=False, is_valid=False) PODFile.objects.filter(booking=booking).exclude( id__in=resubmitted_pod).update(verified=True, is_valid=False) booking.pod_status = 'unverified' booking.save() booking_unloaded = check_booking_status(booking, 'unloaded') if booking_unloaded: unloaded_obj = get_booking_status_mapping_object( booking, 'unloaded') if unloaded_obj.created_by == User.objects.get(username='******') and \ unloaded_obj.changed_by == User.objects.get(username='******'): update_booking_status(booking, 'unloaded', 'in_progress', User.objects.get(username='******')) booking_pod_uploaded = check_booking_status(booking, 'pod_uploaded') if not booking_pod_uploaded: create_new_booking_status(booking, 'pod_uploaded', request.user) else: update_booking_status(booking, 'pod_uploaded', 'in_progress', request.user) return success_response(msg="success", status=status.HTTP_200_OK, data={})
def approve(self, request): booking = ManualBooking.objects.get(id=request.data.get('booking_id')) if isinstance(booking, ManualBooking): data = { 'delivered_weight': request.data.get('delivered_weight'), 'loaded_weight': request.data.get('loaded_weight'), 'pod_date': datetime.now(), 'delivery_datetime': request.data.get('delivery_datetime'), 'pod_status': 'completed' } manual_booking_serializer = ManualBookingSerializer( instance=booking, data=data, partial=True) if manual_booking_serializer.is_valid(): manual_booking_serializer.save() for pod in PODFile.objects.filter(booking=booking).exclude( verified=True): pod.is_valid = True pod.verified = True pod.verified_by = request.user pod.verified_datetime = datetime.now() pod.save() S3Upload.objects.filter(id=pod.s3_upload_id).update( is_valid=True, verified=True) booking_unloaded = check_booking_status( booking, 'unloaded') if not booking_unloaded: create_new_booking_status( booking, 'unloaded', User.objects.get(username='******')) else: update_booking_status( booking, 'unloaded', 'in_progress', User.objects.get(username='******')) booking_pod_uploaded = check_booking_status( booking, 'pod_uploaded') if not booking_pod_uploaded: create_new_booking_status( booking, 'pod_uploaded', User.objects.get(username='******')) else: update_booking_status( booking, 'pod_uploaded', 'in_progress', User.objects.get(username='******')) booking_pod_verified = check_booking_status( booking, 'pod_verified') if not booking_pod_verified: create_new_booking_status(booking, 'pod_verified', request.user) else: update_booking_status(booking, 'pod_verified', 'in_progress', request.user) return success_response(status=status.HTTP_200_OK, msg='verified', data={}) return error_response(status=status.HTTP_400_BAD_REQUEST, msg='Something went wrong', data={}) return error_response(status=status.HTTP_400_BAD_REQUEST, msg='Something went wrong', data={})
def upload_pod(request): token = get_or_none(Token, key=request.POST.get('Authorization')) if not isinstance(token, Token): return HttpResponseRedirect('/login/') try: lr_number_id = request.POST.get('lr_number', None) if not lr_number_id: return json_error_response('lr_number id not provided', status=400) if str(lr_number_id).startswith('BROKER') or str(lr_number_id).startswith('AB'): booking = get_or_none(ManualBooking, booking_id=lr_number_id) lr_obj = None else: lr_obj = get_or_none(LrNumber, id=lr_number_id) booking = None if not isinstance(lr_obj, LrNumber) else lr_obj.booking if not (isinstance(lr_obj, LrNumber) or isinstance(booking, ManualBooking)): return json_error_response('LrNumber with id=%s not found' % lr_number_id, status=404) if not request.FILES: return json_error_response('no file to upload', status=400) upload_file = request.FILES.get('file') pod_file = create_pod_file(lr_number=lr_obj, upload_file=upload_file, user=token.user, booking=booking) booking_unloaded = check_booking_status(booking, 'unloaded') if not booking_unloaded: create_new_booking_status(booking, 'unloaded', User.objects.get(username='******')) else: update_booking_status(booking, 'unloaded', 'in_progress', User.objects.get(username='******')) booking_pod_uploaded = check_booking_status(booking, 'pod_uploaded') if not booking_pod_uploaded: create_new_booking_status(booking, 'pod_uploaded', token.user) else: update_booking_status(booking, 'pod_uploaded', 'in_progress', token.user) return upload_json_response(request, data={'files': [serialize(pod_file)]}) except UnreadablePostError: return HttpResponseRedirect('/upload/pod/')