Пример #1
0
def update_booking_pod_data(request):
    approve_type = request.POST.get('accept_choice')
    if approve_type == 'accept':
        booking = ManualBooking.objects.get(id=request.POST.get('booking_id'))
        booking.supplier_charged_weight = to_float(
            request.POST.get('supplier_weight'))
        booking.charged_weight = to_float(request.POST.get('party_weight'))
        booking.loaded_weight = to_float(request.POST.get('loaded_weight'))
        booking.delivered_weight = to_float(
            request.POST.get('delivered_weight'))
        booking.pod_date = datetime.now()
        booking.delivery_datetime = django_date_format(
            request.POST.get('delivery_datetime'))
        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)
        # if verify_pod(booking=booking):
        booking.pod_status = 'completed'
        booking.save()
        return json_success_response(
            msg='POD for booking ID {} is Accepted'.format(booking.booking_id))
    elif approve_type == 'reject':
        booking = ManualBooking.objects.get(id=request.POST.get('booking_id'))
        booking.pod_status = 'rejected'
        booking.save()
        for lr in booking.lr_numbers.all():
            RejectedPOD.objects.create(
                booking=booking,
                lr=lr,
                remarks=request.POST.get('rejection_remark'),
                rejected_by=request.user)
        if not booking.lr_numbers.exists():
            RejectedPOD.objects.create(
                booking=booking,
                remarks=request.POST.get('rejection_remark'),
                rejected_by=request.user)
        for pod in PODFile.objects.filter(booking=booking).exclude(
                verified=True):
            pod.is_valid = False
            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=False,
                                                                verified=True)
        return json_success_response(
            msg='POD for booking ID {} is rejected'.format(booking.booking_id))
    return json_error_response(msg='fail', status=404)
Пример #2
0
def create_beneficiary_account(request):
    account_number = request.POST.get('account_number')

    bank = get_or_none(Bank, account_number=account_number)
    if bank:
        return render(request=request,
                      template_name='mobile/beneficiary_exists.html',
                      context={'bank': bank})

    try:
        account_document = request.FILES['account_document']
    except MultiValueDictKeyError:
        account_document = None

    bank = Bank.objects.create(
        bank=request.POST.get('bank_name'),
        account_holder_name=request.POST.get('account_holder_name'),
        beneficiary_code=request.POST.get('beneficiary_code'),
        account_number=account_number,
        transaction_type=request.POST.get('transaction_type'),
        account_type=request.POST.get('account_type'),
        ifsc=request.POST.get('ifsc'),
        address=request.POST.get('address'),
        city=request.POST.get('city'),
    )
    email_add_new_beneficiary(bank=bank)
    if account_document:
        filename = '%s.%s' % (account_number, get_ext(account_document.name))
        s3util.save_to_s3_uploads_bank_doc(filename, account_document)

    return json_success_response('success')
Пример #3
0
def verify_otp(request):
    data = request.data
    otp = data.get('otp', None)
    driverapp_user = request.driverapp_user
    phone = driverapp_user.driver_number
    if not phone or not otp:
        return json_400_incorrect_use()

    verified, msg = OTP.verify(phone, otp)
    if not verified:
        return json_error_response('OTP not valid: ' + msg, status=401)

    driverapp_user.number_verified = True
    try:
        driver_model = Driver.objects.get(phone=phone)
    except Driver.DoesNotExist:
        try:
            driver_model = Driver.objects.filter(alt_phone=phone)[0]
        except IndexError:
            driver_model = None
    driverapp_user.driver = driver_model
    driverapp_user.save()

    set_vehicle_driverapp_user(driverapp_user)
    if driverapp_user.number_verified:
        Vehicle.objects.filter(driver_app_user=driverapp_user).update(
            status=driverapp_user.vehicle_status)

    return json_success_response('number verified')
Пример #4
0
def update_pod(request):
    driver = request.driverapp_user

    can_upload_pod, reason, alloc_vehicle = get_can_upload_pod(driver)

    if not can_upload_pod:
        return json_error_response(reason, 400)

    if not driver.vehicle_status == 'unloaded':
        return json_error_response(
            'Switch the status to unloaded before uploading POD', 400)

    data = request.data

    pod = data.get('pod', None)
    pod_thumb = data.get('pod_thumb', None)

    if not pod or not pod_thumb:
        return json_error_response('pod file not sent', 400)

    if alloc_vehicle.pod == pod:
        return json_success_response('nothing to update')

    alloc_vehicle.pod = pod
    alloc_vehicle.pod_thumb = pod_thumb
    alloc_vehicle.pod_date = timezone.now()

    alloc_vehicle.save()

    return json_response({
        'status': 'success',
        'msg': 'pod updated',
        'pod_details': alloc_vehicle.pod_details()
    })
Пример #5
0
def update_credit_note_customer_direct_advance(request, pk):
    data = json.loads(request.body.decode('utf-8'))
    data["changed_by"] = request.user.username
    credit_note_customer_direct_advance = get_or_none(
        CreditNoteCustomerDirectAdvance, id=pk)
    if not isinstance(credit_note_customer_direct_advance,
                      CreditNoteCustomerDirectAdvance):
        return json_400_incorrect_use()
    if data['status'] == 'approved' and credit_note_customer_direct_advance.bookings.count(
    ) == 1:
        data[
            'adjusted_amount'] = credit_note_customer_direct_advance.credit_amount
        data['status'] = 'adjusted'
        data['adjusted_by'] = request.user.username
        data['adjusted_on'] = datetime.now()
        if Invoice.objects.filter(
                bookings__in=credit_note_customer_direct_advance.bookings.all(
                )).exists():
            data['invoice'] = Invoice.objects.filter(
                bookings__in=credit_note_customer_direct_advance.bookings.all(
                )).last().id
    credit_note_customer_direct_advance_serializer = CreditNoteCustomerDirectAdvanceSerializer(
        instance=credit_note_customer_direct_advance, data=data, partial=True)
    if credit_note_customer_direct_advance_serializer.is_valid():
        credit_note_customer_direct_advance_serializer.save()
        return json_success_response(msg='success')
    return json_400_incorrect_use()
Пример #6
0
def send_otp(request):
    driver = request.driverapp_user
    if driver.driver_number:
        send_otp_sms(driver.driver_number)
        return json_success_response("otp sent")
    else:
        return json_error_response("no phone number to send otp to", 400)
Пример #7
0
def upload_daily_freight(request):
    try:
        save_to_s3_daily_freight(datetime.now().strftime('%Y%m%d%H%M') + '.xlsx',
                                 request.FILES['daily_freight'])
    except:
        raise
    try:
        filename = S3Upload.objects.filter(folder__iexact='freight').latest('created_on').public_url()
        df = pd.read_excel(filename)
        for i, rows in df.iterrows():
            route = map(str.strip, map(str, rows['Route'].split('-')))
            if Route.objects.filter(Q(source__iexact=route[0]) & Q(destination__iexact=route[1])).exists():
                route = Route.objects.get(Q(source__iexact=route[0]) & Q(destination__iexact=route[1]))
                route.updated_on = datetime.now()
                route.save()
                if SubRoute.objects.filter(Q(loading_point__iexact=rows['Loading Point']) & Q(
                        unloading_point__iexact=rows['Unloading Point'])).exists():
                    SubRoute.objects.filter(Q(loading_point__iexact=rows['Loading Point']) & Q(
                        unloading_point__iexact=rows['Unloading Point'])).update(updated_on=datetime.now())
                    RouteFreight.objects.create(
                        route=SubRoute.objects.get(Q(loading_point__iexact=rows['Loading Point']) & Q(
                            unloading_point__iexact=rows['Unloading Point'])),
                        freight=rows['Freight (per ton)'],
                        material=rows['Material'],
                        datetime=datetime.now()
                    )
                else:
                    RouteFreight.objects.create(
                        route=create_sub_route(route=route, loading_point=rows['Loading Point'],
                                               unloading_point=rows['Unloading Point']),
                        freight=rows['Freight (per ton)'],
                        material=rows['Material'],
                        datetime=datetime.now()
                    )
            else:
                route = Route.objects.create(source=route[0], destination=route[1])
                if SubRoute.objects.filter(Q(loading_point__iexact=rows['Loading Point']) & Q(
                        unloading_point__iexact=rows['Unloading Point'])).exists():
                    SubRoute.objects.filter(Q(loading_point__iexact=rows['Loading Point']) & Q(
                        unloading_point__iexact=rows['Unloading Point'])).update(updated_on=datetime.now())
                    RouteFreight.objects.create(
                        route=SubRoute.objects.get(Q(loading_point__iexact=rows['Loading Point']) & Q(
                            unloading_point__iexact=rows['Unloading Point'])),
                        freight=rows['Freight (per ton)'],
                        material=rows['Material'],
                        datetime=datetime.now()
                    )
                else:
                    RouteFreight.objects.create(
                        route=create_sub_route(route=route, loading_point=rows['Loading Point'],
                                               unloading_point=rows['Unloading Point']),
                        freight=rows['Freight (per ton)'],
                        material=rows['Material'],
                        datetime=datetime.now()
                    )
        return json_success_response('Uploaded successfully')
    except:
        raise
Пример #8
0
def create_issue_credit_note_customer(request):
    data = json.loads(request.body.decode('utf-8'))
    credit_note_customer_serializer = CreditNoteCustomerSerializer(data=data)
    # data["credit_note_number"] = generate_credit_note_customer_serial_number(data['customer'])
    if credit_note_customer_serializer.is_valid():
        credit_note_customer_serializer.save()
        return json_success_response(
            msg='Credit Note ID {} is generated'.format(
                credit_note_customer_serializer.data['credit_note_number']))
    return json_400_incorrect_use()
Пример #9
0
def contact_us_landing_page(request):
    data = {
        'name': request.POST.get('name'),
        'phone': request.POST.get('phone'),
        'email': request.POST.get('email'),
        'message': request.POST.get('message'),
    }
    serializer = ContactUsLandingPageSerializer(data=data)
    if serializer.is_valid():
        serializer.save()
        return json_success_response(msg="Ok")
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Пример #10
0
def update_supplier(request):
    supplier = get_or_none(Broker,
                           id=int_or_none(request.POST.get('supplier_id')))
    phone_status, msg = verify_profile_phone(
        username=supplier.name.username,
        phone=request.POST.get('contact_person_number'),
        alt_phone=request.POST.get('alternate_number'))
    if phone_status:
        return json_error_response(msg=msg, status=409)
    email_status, msg = verify_profile_email(username=supplier.name.username,
                                             email=request.POST.get('email'),
                                             alt_email=None)
    if email_status:
        return json_error_response(msg=msg, status=409)

    if request.POST.get('pan') and Broker.objects.exclude(
            name=supplier.name).filter(pan=request.POST.get('pan')).exists():
        return json_error_response("PAN Already exists", status=409)

    profile = Profile.objects.get(user=supplier.name)
    profile.name = request.POST.get('supplier_name')
    profile.contact_person_name = request.POST.get('contact_person_name')
    profile.phone = request.POST.get('phone')
    profile.alternate_phone = request.POST.get('alt_phone')
    profile.email = request.POST.get('email')
    profile.comment = request.POST.get('remarks')
    profile.save()
    create_update_profile(
        user=supplier.name,
        name=request.POST.get('supplier_name'),
        contact_person=request.POST.get('contact_person_name'),
        contact_person_phone=request.POST.get('contact_person_number'),
        phone=request.POST.get('contact_person_number'),
        alternate_phone=request.POST.get('alternate_number'),
        email=request.POST.get('email'),
        remarks=request.POST.get('remarks'))
    supplier.pan = request.POST.get('pan')
    supplier.route = request.POST.get('route')
    supplier.city = get_or_none(City,
                                id=int_or_none(
                                    request.POST.get('supplier_city')))
    supplier.aaho_office = get_or_none(AahoOffice,
                                       id=request.POST.get('aaho_office'))
    supplier.destination_state.clear()
    dest_states = request.POST.getlist('destination_states[]')
    if dest_states:
        if 'select_all' in dest_states:
            dest_states = State.objects.values_list('id', flat=True)
        for dest_state in dest_states:
            supplier.destination_state.add(dest_state)
    supplier.save()
    return json_success_response("success")
Пример #11
0
def create_issue_debit_note_customer(request):
    data = json.loads(request.body.decode('utf-8'))
    data["changed_by"] = request.user.username
    data["created_by"] = request.user.username
    data["debit_note_number"] = generate_debit_note_customer_serial_number(
        data['customer'])
    debit_note_customer_serializer = DebitNoteCustomerSerializer(data=data)
    if debit_note_customer_serializer.is_valid():
        debit_note_customer_serializer.save()
        return json_success_response(
            msg='Debit Note ID {} is generated'.format(
                debit_note_customer_serializer.data['debit_note_number']))
    return json_400_incorrect_use()
Пример #12
0
def m_login(request):
    username = request.POST.get('username', None)
    password = request.POST.get('password', None)
    print(username, password)
    if not username or not password:
        return json_400_incorrect_use()
    user = authenticate(username=username, password=password)
    if user is None:
        return json_401_wrong_credentials()
    if not user.is_active:
        return json_401_inactive_user()
    login(request, user)
    return json_success_response(msg='success')
Пример #13
0
def register_owner(request):
    username = "".join(re.split("[^a-zA-Z]*",
                                request.POST.get('owner_name')))[:12]
    owner_name = request.POST.get('owner_name')
    pan = request.POST.get('pan')
    if User.objects.filter(username__iexact=username).exists():
        username = random.randrange(999999999999, 99999999999999)
    # if owner_name in Owner.objects.values_list('name__profile__name', flat=True):
    #     return json_error_response(msg='Owner {} already exists'.format(request.POST.get('owner_name')), status=409)
    # if request.POST.get('pan') in Owner.objects.values_list('pan', flat=True):
    #     return json_error_response(msg='Pan {} already exists for {}'.format(owner_name, ''.join(
    #         Owner.objects.filter(pan=pan).values_list('name__profile__name', flat=True))), status=409)
    #
    # if Vehicle.objects.filter(id__in=request.POST.getlist('vehicle_id[]')).exclude(owner=None):
    #     print (Vehicle.objects.filter(id__in=request.POST.getlist('vehicle_id[]')).exclude(owner=None))
    user = User.objects.create_user(username=str(username).lower(),
                                    password='******')
    Profile.objects.create(
        user=user,
        name=request.POST.get('owner_name'),
        phone=request.POST.get('owner_phone', None),
        contact_person_name=request.POST.get('contact_person_name'),
        contact_person_phone=request.POST.get('contact_person_phone'),
        alternate_phone=request.POST.get('alternate_number'),
        email=request.POST.get('email'),
        comment=request.POST.get('remarks'))
    owner = Owner.objects.create(
        name=user,
        address=Address.objects.create(
            line1=request.POST.get('owner_address'),
            city=get_or_none(City, id=int_or_none(request.POST.get('city'))),
            pin=request.POST.get('pin', None)),
        route_temp=request.POST.get('route'),
        pan=request.POST.get('pan'))
    Broker.objects.create(name=user,
                          address=Address.objects.create(
                              line1=request.POST.get('owner_address'),
                              city=get_or_none(City,
                                               id=int_or_none(
                                                   request.POST.get('city'))),
                              pin=request.POST.get('pin', None)),
                          route=request.POST.get('route'),
                          pan=request.POST.get('pan'))
    try:
        for vehicle in Vehicle.objects.filter(
                id__in=request.POST.getlist('vehicle_id[]')):
            vehicle.owner = owner
            vehicle.save()
    except ValueError:
        pass
    return json_success_response(msg="success")
Пример #14
0
def create_issue_credit_note_supplier(request):
    data = json.loads(request.body.decode('utf-8'))
    data["changed_by"] = request.user.username
    data["created_by"] = request.user.username
    data["credit_note_number"] = generate_credit_note_supplier_serial_number(
        data['broker'])
    credit_note_supplier_serializer = CreditNoteSupplierSerializer(data=data)

    if credit_note_supplier_serializer.is_valid():
        credit_note_supplier_serializer.save()
        return json_success_response(
            msg='Credit Note ID {} is generated'.format(
                credit_note_supplier_serializer.data['credit_note_number']))
    return json_400_incorrect_use()
Пример #15
0
def register_customer(request):
    if request.POST.get('email_id') and Profile.objects.filter(
            email__iexact=request.POST.get('email_id')).exists():
        return json_error_response('Email ID Already Exists', status=409)
    elif Profile.objects.filter(
            name__iexact=request.POST.get('company_name')).exists():
        return json_error_response('Company Already Registered', status=409)
    # elif Profile.objects.filter(phone__iexact=request.POST.get('contact_person_number')).exists():
    #     return json_error_response('Phone Already Exists', status=409)
    elif Sme.objects.filter(
            company_code__iexact=request.POST.get('company_code')).exists():
        return json_error_response('Company Code Already Exists', status=409)
    else:
        username = "".join(
            re.split("[^a-zA-Z]*", request.POST.get('company_name')))[:12]
        if User.objects.filter(username__iexact=username).exists():
            username = random.randrange(999999999999, 99999999999999)
        user = User.objects.create_user(username=str(username).lower(),
                                        password='******')
        create_update_profile(
            user=user,
            name=request.POST.get('company_name'),
            contact_person=request.POST.get('contact_person_name'),
            contact_person_phone=request.POST.get('contact_person_number'),
            phone=request.POST.get('contact_person_number'),
            alternate_phone=request.POST.get('alternate_number'),
            email=request.POST.get('email_id'),
            remarks=request.POST.get('remarks'))
        Sme.objects.create(
            name=user,
            company_code=request.POST.get('company_code'),
            aaho_office=get_or_none(AahoOffice,
                                    id=request.POST.get('aaho_office')),
            gstin=request.POST.get('gstin', None),
            aaho_poc=get_or_none(Employee,
                                 id=int_or_none(request.POST.get('aaho_poc'))),
            credit_period=request.POST.get('credit_period', None),
            address=create_update_address(
                line1=request.POST.get('company_address'),
                city=get_or_none(City,
                                 id=int_or_none(request.POST.get('city'))),
                pin=request.POST.get('pin')),
            is_gst_applicable='no'
            if request.POST.get('is_gst_applicable') == 'n' else 'yes',
            customer_address=request.POST.get('company_address'),
            city=get_or_none(City, id=int_or_none(request.POST.get('city'))),
            pin=request.POST.get('pin'),
            created_by=request.user)
        return json_success_response('SME Successfully Registered')
Пример #16
0
def register_vehicle(request):
    if Vehicle.objects.filter(vehicle_number=compare_format(
            request.POST.get('vehicle_number'))).exists():
        return json_error_response(msg="Vehicle Already Exists", status=409)
    owner = get_or_none(Owner,
                        id=int_or_none(request.POST.get('owner_id', None)))
    vehicle = Vehicle.objects.create(
        owner=owner,
        vehicle_number=compare_format(request.POST.get('vehicle_number')),
        rc_number=request.POST.get('rc_number'),
        permit=request.POST.get('permit_number'),
        permit_validity=django_date_format(
            request.POST.get('permit_validity')),
        permit_type=request.POST.get('permit_type'),
        vehicle_type=get_or_none(VehicleCategory,
                                 id=int_or_none(
                                     request.POST.get('vehicle_category'))),
        vehicle_capacity=to_int(request.POST.get('exact_vehicle_capacity')),
        body_type=request.POST.get('vehicle_body_type'),
        vehicle_model=request.POST.get('vehicle_model'),
        chassis_number=request.POST.get('chassis_number'),
        engine_number=request.POST.get('engine_number'),
        insurer=request.POST.get('insurer'),
        insurance_number=request.POST.get('insurance_number'),
        insurance_validity=django_date_format(
            request.POST.get('insurance_validity')),
        registration_year=None if not request.POST.get('registration_year')
        else django_date_format('01-Jan-' +
                                request.POST.get('registration_year').strip()),
        registration_validity=django_date_format(
            request.POST.get('registration_validity')),
        fitness_certificate_number=request.POST.get(
            'fitness_certificate_number'),
        fitness_certificate_issued_on=django_date_format(
            request.POST.get('fitness_certificate_issued_on')),
        fitness_certificate_validity_date=django_date_format(
            request.POST.get('fitness_certificate_validity')),
        puc_certificate_number=request.POST.get('puc_certificate_number'),
        puc_certificate_issued_on=django_date_format(
            request.POST.get('puc_certificate_issued_on')),
        puc_certificate_validity_date=django_date_format(
            request.POST.get('puc_certificate_validity')),
        gps_enabled=False if request.POST.get('gps_enable') == 'no' else True,
        changed_by=request.user)
    if owner:
        create_broker_owner(owner=owner)
        broker = Broker.objects.get(name=owner.name)
        update_broker_vehicle(broker=broker, vehicle=vehicle)
    return json_success_response(msg="Success")
Пример #17
0
def register_driver(request):
    if Driver.objects.filter(
            phone=request.POST.get('driver_phone_number')).exists():
        return json_error_response('Driver Already Exists', status=409)
    else:
        Driver.objects.create(
            name=request.POST.get('driver_name'),
            phone=request.POST.get('driver_phone_number'),
            alt_phone=request.POST.get('driver_alt_phone_number1'),
            alt_phone2=request.POST.get('driver_alt_phone_number2'),
            driving_licence_number=request.POST.get('dl_number'),
            driving_licence_validity=django_date_format(
                request.POST.get('dl_validity')),
            route=request.POST.get('route'),
            driving_licence_location=request.POST.get('driver_city'))
        return json_success_response('Driver Successfully Registered')
Пример #18
0
def register_supplier(request):
    if request.POST.get('email_id') and Profile.objects.filter(
            email__iexact=request.POST.get('email_id')).exists():
        return json_error_response('Email ID Already Exists', status=409)
    elif Profile.objects.filter(
            name__iexact=request.POST.get('supplier_name')).exists():
        return json_error_response('Supplier Already Registered', status=409)
    elif Profile.objects.filter(
            phone=request.POST.get('contact_person_number')).exists():
        return json_error_response('Phone Already Exists', status=409)
    elif request.POST.get('pan') and TaxationID.objects.filter(
            pan__iexact=request.POST.get('pan')).exists():
        return json_error_response('PAN Already Exists', status=409)
    else:
        username = "".join(
            re.split("[^a-zA-Z]*", request.POST.get('supplier_name')))[:12]
        if User.objects.filter(username__iexact=username).exists():
            username = random.randrange(999999999999, 99999999999999)
        user = User.objects.create_user(username=str(username).lower(),
                                        password='******')
        create_update_profile(
            user=user,
            name=request.POST.get('supplier_name'),
            contact_person=request.POST.get('contact_person_name'),
            contact_person_phone=request.POST.get('contact_person_number'),
            phone=request.POST.get('contact_person_number'),
            alternate_phone=request.POST.get('alternate_number'),
            email=request.POST.get('email_id'),
            remarks=request.POST.get('remarks'))
        instance = Broker.objects.create(
            name=user,
            city=get_or_none(City,
                             id=int_or_none(
                                 request.POST.get('supplier_city'))),
            route=request.POST.get('route'),
            taxation_details=None if not request.POST.get('pan') else
            TaxationID.objects.create(pan=request.POST.get('pan')),
            aaho_office=get_or_none(AahoOffice,
                                    id=request.POST.get('aaho_office')))
        dest_states = request.POST.getlist('destination_states[]')
        if dest_states:
            if 'select_all' in dest_states:
                dest_states = State.objects.values_list('id', flat=True)
            for dest_state in dest_states:
                instance.destination_state.add(dest_state)
        return json_success_response('Supplier Successfully Registered')
Пример #19
0
def update_driver_details(request):
    if Driver.objects.filter(
            phone=request.POST.get('driver_phone_number')).exclude(
                id=int_or_none(request.POST.get('driver_id'))).exists():
        return json_error_response("Phone Already Exists", status=409)
    driver = get_or_none(Driver, id=int_or_none(request.POST.get('driver_id')))
    if driver:
        driver.name = request.POST.get('driver_name')
        driver.phone = request.POST.get('driver_phone_number')
        driver.alt_phone = request.POST.get('driver_alt_phone_number1')
        driver.alt_phone2 = request.POST.get('driver_alt_phone_number2')
        driver.driving_licence_number = request.POST.get('dl_number')
        driver.driving_licence_validity = django_date_format(
            request.POST.get('dl_validity'))
        driver.route = request.POST.get('route')
        driver.save()
    return json_success_response("Updated success")
Пример #20
0
def update_vehicle(request):
    vehicle = Vehicle.objects.get(
        id=int_or_none(request.POST.get('vehicle_id')))
    vehicle.owner = get_or_none(Owner,
                                id=int_or_none(
                                    request.POST.get('owner_id', None)))
    vehicle.vehicle_number = compare_format(request.POST.get('vehicle_number'))
    vehicle.rc_number = request.POST.get('rc_number')
    vehicle.permit = request.POST.get('permit_number')
    vehicle.permit_validity = django_date_format(
        request.POST.get('permit_validity'))
    vehicle.permit_type = request.POST.get('permit_type')
    vehicle.vehicle_type = get_or_none(
        VehicleCategory, id=int_or_none(request.POST.get('vehicle_category')))
    vehicle.vehicle_capacity = to_int(
        request.POST.get('exact_vehicle_capacity'))
    vehicle.body_type = request.POST.get('vehicle_body_type')
    vehicle.vehicle_model = request.POST.get('vehicle_model')
    vehicle.chassis_number = request.POST.get('chassis_number')
    vehicle.engine_number = request.POST.get('engine_number')
    vehicle.insurer = request.POST.get('insurer')
    vehicle.insurance_number = request.POST.get('insurance_number')
    vehicle.insurance_validity = django_date_format(
        request.POST.get('insurance_validity'))
    vehicle.registration_year = None if not request.POST.get(
        'registration_year') else django_date_format(
            '01-Jan-' + request.POST.get('registration_year').strip())
    vehicle.registration_validity = django_date_format(
        request.POST.get('registration_validity'))
    vehicle.fitness_certificate_number = request.POST.get(
        'fitness_certificate_number')
    vehicle.fitness_certificate_issued_on = django_date_format(
        request.POST.get('fitness_certificate_issued_on'))
    vehicle.fitness_certificate_validity_date = django_date_format(
        request.POST.get('fitness_certificate_validity'))
    vehicle.puc_certificate_number = request.POST.get('puc_certificate_number')
    vehicle.puc_certificate_issued_on = django_date_format(
        request.POST.get('puc_certificate_issued_on'))
    vehicle.puc_certificate_validity_date = django_date_format(
        request.POST.get('puc_certificate_validity'))
    vehicle.gps_enabled = False if request.POST.get(
        'gps_enable') == 'no' else True
    vehicle.changed_by = request.user
    vehicle.save()
    return json_success_response("success")
Пример #21
0
def vehicle_data(request):
    vehicle_id = request.GET.get('vehicle_id')
    vehicle_number_pattern = re.compile(VEHICLE_NUMBER[1:-2], re.IGNORECASE)
    if vehicle_id.isdigit():
        if isinstance(get_or_none(Vehicle, id=vehicle_id), Vehicle):
            vehicle = Vehicle.objects.get(id=vehicle_id)
        else:
            return json_error_response(
                msg="{} does not exits".format(vehicle_id), status=400)
    elif isinstance(vehicle_id, str):
        if vehicle_number_pattern.match(vehicle_id):
            if Vehicle.objects.filter(
                    vehicle_number=compare_format(vehicle_id)).exists():
                vehicle = Vehicle.objects.filter(
                    vehicle_number=compare_format(vehicle_id)).latest('id')
            else:
                return json_error_response(
                    msg="{} does not exits".format(vehicle_id), status=400)
        else:
            vehicle = None
    else:
        vehicle = None

    if isinstance(vehicle, Vehicle):
        data = {}
        if vehicle.owner:
            data['owner'] = {
                'id': vehicle.owner.id,
                'name': vehicle.owner.get_name(),
                'phone': vehicle.owner.get_phone()
            }
        else:
            data['owner'] = {}
        if vehicle.vehicle_type:
            data['vehicle_category'] = {
                'id': vehicle.vehicle_type.id,
                'vehicle_category': vehicle.vehicle_type.vehicle_category
            }
        else:
            data['vehicle_category'] = {}
        return json_success_response(msg=data)
    else:
        return json_400_incorrect_use()
Пример #22
0
def resubmit_rejected_pod(request):
    resubmission_remark = request.POST.get('resubmission_remark')
    booking_id = request.POST.get('booking_id')
    resubmitted_pod = request.POST.getlist('resubmitted_pod')
    if not resubmission_remark:
        return json_error_response(msg="Remarks is mandatory", status=400)
    if not booking_id:
        return json_error_response(msg="Booking id is required", status=400)
    booking = get_or_none(ManualBooking, booking_id=booking_id)
    if not isinstance(booking, ManualBooking):
        return json_error_response(msg="BAD request", status=400)
    if not PODFile.objects.filter(booking=booking).exists():
        return json_error_response("BAD Request", status=400)
    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()
    return json_success_response(msg="success")
Пример #23
0
def update_debit_note_supplier(request, pk):
    data = json.loads(request.body.decode('utf-8'))
    data["changed_by"] = request.user.username
    debit_note_supplier = get_or_none(DebitNoteSupplier, id=pk)
    if not isinstance(debit_note_supplier, DebitNoteSupplier):
        return json_400_incorrect_use()
    if data['status'] == 'approved' and debit_note_supplier.bookings.count(
    ) == 1:
        data['adjusted_amount'] = debit_note_supplier.debit_amount
        data['status'] = 'adjusted'
        data['adjusted_by'] = request.user.username
        data['adjusted_on'] = datetime.now()
        if Invoice.objects.filter(
                bookings__in=debit_note_supplier.bookings.all()).exists():
            data['invoice'] = Invoice.objects.filter(
                bookings__in=debit_note_supplier.bookings.all()).last().id
    debit_note_supplier_serializer = DebitNoteSupplierSerializer(
        instance=debit_note_supplier, data=data, partial=True)
    if debit_note_supplier_serializer.is_valid():
        debit_note_supplier_serializer.save()
        return json_success_response(msg='success')
    return json_400_incorrect_use()
Пример #24
0
def update_customer(request):
    sme = get_or_none(Sme, id=int_or_none(request.POST.get('customer_id')))
    # phone_status, msg = verify_profile_phone(username=sme.name.username,
    #                                          phone=request.POST.get('contact_person_number'),
    #                                          alt_phone=request.POST.get('alternate_number'))
    # if phone_status:
    #     return json_error_response(msg=msg, status=409)

    create_update_profile(
        user=sme.name,
        name=request.POST.get('company_name'),
        contact_person=request.POST.get('contact_person_name'),
        contact_person_phone=request.POST.get('contact_person_number'),
        phone=request.POST.get('contact_person_number'),
        alternate_phone=request.POST.get('alternate_number'),
        email=request.POST.get('email_id'),
        remarks=request.POST.get('remarks'))

    create_update_address(address_id=sme.address_id,
                          line1=request.POST.get('company_address'),
                          city=get_or_none(City,
                                           id=int_or_none(
                                               request.POST.get('city'))),
                          pin=request.POST.get('pin'))
    sme.customer_address = request.POST.get('company_address')
    sme.aaho_office = get_or_none(AahoOffice,
                                  id=request.POST.get('aaho_office'))
    sme.city = get_or_none(City, id=int_or_none(request.POST.get('city')))
    sme.pin = request.POST.get('pin')
    sme.gstin = sme.gstin if not request.POST.get(
        'gstin') else request.POST.get('gstin')
    sme.is_gst_applicable = request.POST.get('is_gst_applicable')
    sme.aaho_poc = get_or_none(Employee,
                               id=int_or_none(request.POST.get('aaho_poc')))
    sme.credit_period = request.POST.get('credit_period', None)
    sme.save()
    return json_success_response(msg="success")
Пример #25
0
def pod_delivered_date_validation(request):
    return json_success_response(msg="Valid")
Пример #26
0
def add_edit_vehicle(request):
    data = request.data
    vehicle_id = data.get('id', None)

    if vehicle_id:
        vehicle = get_or_none(Vehicle, id=int_or_none(vehicle_id))
        if not vehicle:
            return json_error_response(
                'Vehicle with id=%s does not exist' % vehicle_id, 404)
    else:
        vehicle = Vehicle()

    vehicle_number = data.get('vehicle_number', None)
    if not vehicle_number and not vehicle_id:
        return json_error_response('vehicle number required', 400)

    owner_id = (data.get('owner', None) or {}).get('id', None)
    owner = None
    if owner_id:
        owner = get_or_none(Owner, id=int_or_none(owner_id))
        if not owner:
            return json_error_response(
                'Owner with id=%s does not exist' % owner_id, 404)

    ac_id = (data.get('account', None) or {}).get('id', None)
    account = None
    if ac_id:
        account = get_or_none(Bank, id=int_or_none(ac_id))
        if not account:
            return json_error_response(
                'Bank account with id=%s does not exist' % ac_id, 404)

    driver_id = (data.get('driver', None) or {}).get('id', None)
    driver = None
    if driver_id:
        driver = get_or_none(Driver, id=int_or_none(driver_id))
        if not driver:
            return json_error_response(
                'Driver with id=%s does not exist' % driver_id, 404)

    current_city_id = data.get('current_city', None)
    current_city = None
    if current_city_id:
        current_city = get_or_none(City, id=int_or_none(current_city_id))
        if not current_city:
            return json_error_response(
                'City with id=%s does not exist' % current_city_id, 404)

    vehicle_type_id = data.get('vehicle_type', None)
    vehicle_type = None
    has_vehicle_type_data = 'vehicle_type' in data
    if vehicle_type_id:
        vehicle_type = get_or_none(VehicleCategory,
                                   id=int_or_none(vehicle_type_id))
        if not vehicle_type:
            return json_error_response(
                'VehicleCategory with id=%s does not exist' % vehicle_type_id,
                404)
    else:
        new_category_type = data.get('new_vehicle_category_type', None)
        new_category_capacity = data.get('new_vehicle_category_capacity', None)
        new_category_type = None if not new_category_type else new_category_type.strip(
        )
        new_category_capacity = None if not new_category_capacity else new_category_capacity.strip(
        )
        if new_category_type:
            has_vehicle_type_data = True
            vehicle_type, _ = VehicleCategory.objects.get_or_create(
                vehicle_type=new_category_type, capacity=new_category_capacity)

    if 'owner' in data:
        vehicle.owner = owner

    if 'driver' in data:
        Vehicle.objects.filter(driver=driver).update(driver=None)
        vehicle.driver = driver

    if 'current_city' in data:
        vehicle.current_city = current_city

    if has_vehicle_type_data:
        vehicle.vehicle_type = vehicle_type

    normal_fields = [
        'vehicle_number', 'vehicle_model', 'chassis_number', 'engine_number',
        'sim_number', 'sim_operator', 'gps_enabled'
    ]

    for field in normal_fields:
        if field in data:
            setattr(vehicle, field, data.get(field, None))

    vehicle_status = data.get('status', None)
    if vehicle_status:
        if vehicle_status not in dict(VEHICLE_STATUS_CHOICES):
            return json_response(
                {
                    'status': 'error',
                    'msg': 'not a valid vehicle_status'
                },
                status=400)
        vehicle.status = vehicle_status
        if vehicle.driver_app_user:
            vehicle.driver_app_user.vehicle_status = vehicle_status
            vehicle.driver_app_user.save()

    vehicle.save()

    broker_vehicle, _created = BrokerVehicle.objects.get_or_create(
        broker=request.broker, vehicle=vehicle)
    if 'account' in data:
        broker_vehicle.account_details = account
        broker_vehicle.save()

    if owner:
        BrokerOwner.objects.get_or_create(broker=request.broker, owner=owner)
    if driver:
        BrokerDriver.objects.get_or_create(broker=request.broker,
                                           driver=driver)

    edited = False

    doc_key = 'rc_doc'
    if doc_key in data and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle,
                           field_name='registration_certificate',
                           document_type='REG',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()
        registration_year = data[doc_key].get('manufacture_year', None)
        validity = data[doc_key].get('validity', None)

        vehicle.registration_certificate = doc
        registration_year = None if not registration_year else registration_year.strip(
        )
        try:
            registration_year = int(registration_year)
        except ValueError:
            registration_year = None
        vehicle.registration_year = None if registration_year is None else datetime(
            year=registration_year, month=1, day=1).date()
        vehicle.registration_validity = None if not validity else parse_iso(
            validity)
        edited = True

    doc_key = 'permit_doc'
    if doc_key in data and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle,
                           field_name='permit_certificate',
                           document_type='PERM',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()
        permit_type = data[doc_key].get('permit_type', None)
        validity = data[doc_key].get('validity', None)

        vehicle.permit_certificate = doc
        vehicle.permit_type = permit_type
        vehicle.permit_validity = None if not validity else parse_iso(validity)
        vehicle.permit = doc_id
        edited = True

    doc_key = 'insurance_doc'
    if doc_key in data and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle,
                           field_name='insurance_certificate',
                           document_type='INS',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()
        insurer_name = data[doc_key].get('insurer_name', None)
        validity = data[doc_key].get('validity', None)

        vehicle.insurance_certificate = doc
        vehicle.insurer = insurer_name
        vehicle.insurance_validity = None if not validity else parse_iso(
            validity)
        vehicle.insurance_number = doc_id
        edited = True

    doc_key = 'fitness_doc'
    if doc_key in data and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle,
                           field_name='fitness_certificate',
                           document_type='FIT',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()
        validity = data[doc_key].get('validity', None)

        vehicle.fitness_certificate = doc
        vehicle.fitness_certificate_validity_date = None if not validity else parse_iso(
            validity)
        vehicle.fitness_certificate_number = doc_id
        edited = True

    doc_key = 'puc_doc'
    if doc_key in data and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle,
                           field_name='puc_doc',
                           document_type='PUC',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()
        validity = data[doc_key].get('validity', None)

        vehicle.puc_certificate = doc
        vehicle.puc_certificate_validity_date = None if not validity else parse_iso(
            validity)
        vehicle.puc_certificate_number = doc_id
        edited = True

    if edited:
        vehicle.save()

    doc_key = 'owner_pan_doc'
    if doc_key in data and vehicle.owner and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle.owner,
                           field_name='taxation_details',
                           document_type='PAN',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()

        taxation_details = vehicle.owner.taxation_details or TaxationID()
        taxation_details.pan_doc = doc
        taxation_details.pan = doc_id
        taxation_details.save()

        owner = vehicle.owner
        owner.taxation_details = taxation_details
        owner.save()
        vehicle.owner = owner

    doc_key = 'owner_dec_doc'
    if doc_key in data and vehicle.owner and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle.owner,
                           field_name='declaration',
                           document_type='DEC',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()

        validity = data[doc_key].get('validity', None)

        owner = vehicle.owner

        owner.declaration = doc.document
        owner.declaration_doc = doc
        owner.declaration_validity = None if not validity else parse_iso(
            validity)
        owner.save()
        vehicle.owner = owner

    doc_key = 'driver_dl_doc'
    if doc_key in data and vehicle.driver and data[doc_key].get('url'):
        doc_id = data[doc_key].get('doc_id', None)
        thumb = data[doc_key].get('thumb_url', None)
        doc = Document.new(user=request.user,
                           bearer=vehicle.driver,
                           field_name='driving_licence',
                           document_type='DL',
                           document=data[doc_key]['url'],
                           doc_id=doc_id,
                           thumb=thumb)
        doc.save()

        validity = data[doc_key].get('validity', None)
        issue_loc = data[doc_key].get('issue_location', None)

        driver = vehicle.driver

        driver.driving_licence_number = doc_id
        driver.driving_licence = doc
        driver.driving_licence_location = issue_loc
        driver.driving_licence_validity = None if not validity else parse_iso(
            validity)
        driver.save()

        vehicle.driver = driver

    return json_success_response('vehicle details %s' %
                                 ('edited' if vehicle_id else 'saved'),
                                 data=vehicle.to_json())
Пример #27
0
def update_owner(request):
    if request.POST.get('owner_name') in Owner.objects.exclude(
            name__profile__name=request.POST.get('owner_name')).values_list(
                'name__profile__name', flat=True):
        return json_error_response(msg='Owner {} already exists'.format(
            request.POST.get('owner_name')),
                                   status=409)
    owner = get_or_none(Owner, id=int_or_none(request.POST.get('owner_id')))
    if owner:
        profile = Profile.objects.get(user=owner.name)
        profile.name = request.POST.get('owner_name')
        profile.phone = request.POST.get('owner_phone')
        profile.alternate_phone = request.POST.get('alternate_number')
        profile.contact_person_name = request.POST.get('contact_person_name')
        profile.contact_person_phone = request.POST.get('contact_person_phone')
        profile.comment = request.POST.get('remarks')
        profile.save()
        if not owner.address:
            owner.address = Address.objects.create(
                line1=request.POST.get('owner_address'),
                city=get_or_none(City,
                                 id=int_or_none(request.POST.get('city'))),
                pin=request.POST.get('pin'))
        else:
            address = Address.objects.get(id=owner.address.id)
            address.line1 = request.POST.get('owner_address')
            address.city = get_or_none(City, id=request.POST.get('city'))
            address.pin = request.POST.get('pin')
            address.save()
        owner.temp_address = request.POST.get('owner_address')
        owner.route_temp = request.POST.get('route')
        owner.pan = request.POST.get('pan')
        owner.save()
    broker = get_or_none(Broker, name=owner.name)
    if broker:
        if broker.address:
            broker.address = Address.objects.create(
                line1=request.POST.get('owner_address'),
                city=get_or_none(City,
                                 id=int_or_none(request.POST.get('city'))),
                pin=request.POST.get('pin'))
        else:
            address = get_or_none(
                Address, id=None if not broker.address else broker.address.id)
            if address:
                address.line1 = request.POST.get('owner_address')
                address.city = get_or_none(City,
                                           id=int_or_none(
                                               request.POST.get('city')))
                address.pin = request.POST.get('pin')
                address.save()
        broker.pan = request.POST.get('pan')
        broker.route = request.POST.get('route')
        broker.city = get_or_none(City,
                                  id=int_or_none(request.POST.get(
                                      'city', None)))
        broker.save()
    else:
        Broker.objects.create(
            name=None if not owner.name else owner.name,
            address=owner.address,
            pan=owner.pan,
            city=get_or_none(City,
                             id=int_or_none(request.POST.get('city', None))),
            route=request.POST.get('route'))

    for vehicle in Vehicle.objects.filter(
            id__in=request.POST.getlist('vehicle_id[]')):
        vehicle.owner = owner
        vehicle.save()
        broker = Broker.objects.get(name=owner.name)
        try:
            BrokerVehicle.objects.create(broker=broker, vehicle=vehicle)
        except IntegrityError:
            pass
    return json_success_response(msg="success")