示例#1
0
    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'
                        })
示例#2
0
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)
示例#3
0
 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")
示例#4
0
 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={})
示例#5
0
 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={})
示例#6
0
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/')