示例#1
0
def outward_payment(paid_to,
                    amount,
                    date,
                    fuel_card,
                    remarks,
                    booking_id_list,
                    account_id,
                    payment_mode,
                    is_sms,
                    username,
                    is_refund_amount=False):
    bank_account = get_or_none(Bank, id=account_id)
    if payment_mode == 'bank_transfer':
        mode, payment_date = payment_mode_date(
            current_datetime=datetime.now(),
            bank=bank_account,
            amount=amount,
            payment_date=django_date_format(date))
    else:
        mode, payment_date = payment_mode, django_date_format(date)
    manual_bookings = ManualBooking.objects.filter(id__in=booking_id_list)
    payment = OutWardPayment()
    payment.paid_to = paid_to
    payment.actual_amount = amount
    payment.remarks = remarks
    payment.payment_date = payment_date
    payment.fuel_card = fuel_card_obj(card_id=fuel_card)
    payment.bank_account, payment.payment_mode = bank_account, mode
    if payment.payment_mode not in [
            'neft', 'rtgs', 'hdfc_internal_account', 'imps'
    ]:
        payment.status = 'paid'
    else:
        payment.status = 'unpaid'
    payment.lorry_number = ', '.join([
        booking.lorry_number for booking in manual_bookings
        if booking.lorry_number
    ])
    payment.created_by = User.objects.get(username=username)
    payment.is_refund_amount = True if is_refund_amount == 'y' else False
    payment.changed_by = User.objects.get(username=username)
    payment.save()
    for booking in manual_bookings:
        payment.booking_id.add(booking)
    for booking in manual_bookings:
        update_outward_payments(booking)

    if is_sms == 'yes':
        payment.is_sms_supplier = True
        payment.save()
    tasks.email_outward_payment.delay(payment.id)
    if payment.is_sms_supplier and settings.ENABLE_SMS:
        tasks.sms_outward_payment.delay(payment_id=payment.id)
    return payment
示例#2
0
def inward_payment(booking_id_list,
                   receive_from,
                   amount,
                   payment_mode,
                   date,
                   invoice_number,
                   remarks,
                   trn,
                   username,
                   tds_amount=0):
    manual_bookings = ManualBooking.objects.filter(id__in=booking_id_list)
    payment = InWardPayment()
    payment.received_from = receive_from
    payment.actual_amount = amount
    payment.payment_mode = payment_mode
    payment.tds = tds_amount
    payment.remarks = remarks
    if trn:
        payment.trn = trn
    payment.payment_date = django_date_format(date)
    payment.invoice_number = invoice_number
    payment.created_by = User.objects.get(username=username)
    payment.changed_by = User.objects.get(username=username)
    payment.save()
    for booking in payment.booking_id.all():
        booking.tds_deducted_amount += sum(
            booking.inward_booking.values_list('tds', flat=True))
        booking.total_in_ward_amount += sum(
            booking.inward_booking.values_list('actual_amount', flat=True))
        booking.save()
    for booking in manual_bookings:
        payment.booking_id.add(booking)
    for booking in manual_bookings:
        update_inward_payments(booking)
    return payment
示例#3
0
def update_inward_payment(booking_id_list,
                          payment_id,
                          received_from,
                          amount,
                          payment_mode,
                          remarks,
                          date,
                          invoice_number,
                          trn,
                          tds_amount=0):
    manual_bookings = ManualBooking.objects.filter(id__in=booking_id_list)
    payment = InWardPayment.objects.get(id=payment_id)
    payment.received_from = received_from
    payment.tds = tds_amount
    payment.actual_amount = amount
    payment.payment_mode = payment_mode
    payment.remarks = remarks
    payment.payment_date = django_date_format(date)
    payment.invoice_number = invoice_number
    payment.trn = trn
    payment.save()
    for value in payment.booking_id.all():
        value.total_in_ward_amount -= to_int(amount)
        value.tds_deducted_amount += int(float(tds_amount))
        value.save()
    payment.booking_id.clear()
    for booking in manual_bookings:
        payment.booking_id.add(booking)
    for booking in manual_bookings:
        update_inward_payments(booking)
示例#4
0
def in_ward_payments(request):
    if request.method == 'POST':
        payment = InWardPayment.objects.create(
            received_from=request.POST.get('received_from'),
            actual_amount=request.POST.get('actual_amount'),
            payment_mode=request.POST.get('payment_mode'),
            remarks=request.POST.get('remarks'),
            payment_date=django_date_format(
                request.POST.get('inward_payment_date')),
            invoice_number=request.POST.get('invoice_number'),
            created_by=User.objects.get(username=request.user.username))
        booking_id_list = request.POST.getlist('booking_id[]')
        for booking_id in booking_id_list:
            manual_booking_id = ManualBooking.objects.get(
                booking_id=booking_id)
            in_ward_payment = InWardPayment.objects.filter(
                booking_id=manual_booking_id)
            amount = 0
            for value in in_ward_payment:
                amount += value.actual_amount
            amount += to_int(float(request.POST.get('actual_amount')))
            manual_booking_id.total_in_ward_amount = amount
            manual_booking_id.save()
            payment.booking_id.add(manual_booking_id)
            update_inward_payments(manual_booking_id)
示例#5
0
def save_invoice_details(request, booking):
    booking.party_invoice_number = request.POST.get('party_invoice_number')
    booking.party_invoice_date = django_date_format(
        request.POST.get('party_invoice_date'))
    booking.party_invoice_amount = to_float(
        request.POST.get('party_invoice_amount'))
    booking.road_permit_number = request.POST.get('road_permit_number')
    booking.save()
示例#6
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)
示例#7
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")
示例#8
0
def save_insurance_details(request, booking):
    booking.insurance_provider = request.POST.get('insurance_provider')
    booking.insurance_policy_number = request.POST.get(
        'insurance_policy_number')
    booking.insured_amount = to_float(request.POST.get('insurance_amount'))
    booking.insurance_date = django_date_format(
        request.POST.get('insurance_date'))
    is_insured = request.POST.get('insured')
    if is_insured == 'insured':
        booking.is_insured = True
    else:
        booking.is_insured = False
    booking.save()
示例#9
0
def upload_cheque_docs(request):
    token = get_or_none(Token, key=request.POST.get('Authorization'))
    if not isinstance(token, Token):
        return HttpResponseRedirect('/login/')
    try:
        customer_name = request.POST.get('customer_name', None)
        amount = int_or_none(request.POST.get('amount', None))
        cheque_number = request.POST.get('cheque_number', None)
        remarks = request.POST.get('remarks', None)
        cheque_date = request.POST.get('cheque_date', None)

        if not customer_name:
            return json_error_response('customer_name id not provided', status=400)

        if not amount:
            return json_error_response('amount id not provided', status=400)

        if not cheque_date:
            return json_error_response('Cheque Date not provided', status=400)

        if not (cheque_number and len(cheque_number) == 6):
            return json_error_response('cheque_number id not provided', status=400)

        if ChequeFile.objects.filter(cheque_number__iexact=cheque_number,
                                     cheque_date=django_date_format(cheque_date)):
            return json_error_response('Cheque Number is not unique', status=400)

        if not request.FILES:
            return json_error_response('no file to upload', status=400)

        upload_file = request.FILES.get('file')
        cheque_files = create_cheque_file(customer_name=customer_name, amount=amount, cheque_number=cheque_number,
                                          remarks=remarks, upload_file=upload_file, user=token.user,
                                          cheque_date=django_date_format(cheque_date))

        return upload_json_response(request, data={'files': [serialize(cheque_files)]})
    except UnreadablePostError:
        return HttpResponseRedirect('/upload/upload-cheque-document-page/')
示例#10
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")
示例#11
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')
示例#12
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")
示例#13
0
def save_updated_out_ward_payment(request):
    booking_id_list = request.POST.getlist('booking_id[]')
    payment_id = OutWardPayment.objects.get(id=request.POST.get('payment_id'))
    old_amount = str(to_int(payment_id.actual_amount))
    new_amount = str(to_int(request.POST.get('actual_amount')))
    payment_id.paid_to = request.POST.get('paid_to')
    payment_id.actual_amount = request.POST.get('actual_amount')
    payment_id.remarks = request.POST.get('remarks')
    payment_id.payment_date = django_date_format(
        request.POST.get('outward_payment_date'))
    payment_id.invoice_number = request.POST.get('invoice_number')
    payment_id.fuel_card = None if not request.POST.get(
        'fuel_card_number') else FuelCard.objects.get(
            id=request.POST.get('fuel_card_number'))
    # save_outward_payment__mode(request, payment_id)
    if payment_id.payment_mode not in [
            'neft', 'rtgs', 'hdfc_internal_account'
    ]:
        payment_id.status = 'paid'
        payment_id.save()
    for value in payment_id.booking_id.all():
        value.total_out_ward_amount -= to_int(
            request.POST.get('actual_amount'))
        value.save()
    payment_id.booking_id.clear()
    booking_id = ''
    for value in booking_id_list:
        manual_booking_id = ManualBooking.objects.get(booking_id=value)
        payment_id.booking_id.add(manual_booking_id)
        out_ward_payment = OutWardPayment.objects.filter(
            booking_id=manual_booking_id).exclude(is_refund_amount=True)
        amount = 0
        for value in out_ward_payment:
            amount += value.actual_amount
        if manual_booking_id.total_amount_to_owner > amount:
            manual_booking_id.outward_payment_status = 'partial'
        elif manual_booking_id.total_amount_to_owner == amount:
            manual_booking_id.outward_payment_status = 'complete'
        elif manual_booking_id.total_amount_to_owner < amount:
            manual_booking_id.outward_payment_status = 'excess'
        manual_booking_id.total_out_ward_amount = amount
        booking_id = manual_booking_id.booking_id
        manual_booking_id.save()
        email_updated_outward_payment(request, booking_id, payment_id,
                                      old_amount, new_amount)
示例#14
0
def email_updated_outward_payment(request, booking_id, payment, old_amount,
                                  new_amount):
    booking_data = ManualBooking.objects.get(booking_id=booking_id)
    paid_to = request.POST.get('paid_to')
    payment_mode = request.POST.get('outward_payment_mode')
    remarks = request.POST.get('remarks')
    payment_date = django_date_format(
        request.POST.get('outward_payment_date')).strftime('%d-%b-%Y')
    lr = ''
    for value in booking_data.lr_numbers.all():
        lr += value.lr_number + ', '
    subject = "Updated Outward Payment for " + booking_data.booking_id
    prior_amount_data = OutWardPayment.objects.filter(booking_id=booking_data)
    paid_amount = 0
    for value in prior_amount_data:
        paid_amount += value.actual_amount
    paid_amount = to_int(paid_amount)
    if payment.bank_account:
        body = "LR No(s)    : " + lr + '\nPaid To      : ' + payment.paid_to + '\nAccount Holder Name: ' + payment.bank_account.account_holder_name + '\nPrevious Amount      : ' + old_amount + '\nUpdated Amount      : ' + new_amount + '\nMode         : ' + payment_mode + "\nDate           : " + payment_date + "\nRemarks    : " + remarks + "\n\n" + "Payments made for " + booking_id + ": Rs. " + str(
            paid_amount
        ) + "\nTotal amount to owner for " + booking_id + ": Rs. " + str(
            booking_data.total_amount_to_owner)
    elif payment.fuel_card:
        body = "LR No(s)    : " + lr + '\nPaid To      : ' + paid_to + '\nFuel Card Number: ' + payment.fuel_card.card_number + '\nPrevious Amount      : ' + old_amount + '\nUpdated Amount      : ' + new_amount + '\nMode         : ' + payment_mode + "\nDate           : " + payment_date + "\nRemarks    : " + remarks + "\n\n" + "Payments made for " + booking_id + ": Rs. " + str(
            paid_amount
        ) + "\nTotal amount to owner for " + booking_id + ": Rs. " + str(
            booking_data.total_amount_to_owner)
    else:
        body = "LR No(s)    : " + lr + '\nPaid To      : ' + paid_to + '\nPrevious Amount      : ' + old_amount + '\nUpdated Amount      : ' + new_amount + '\nMode         : ' + payment.get_payment_mode_display(
        ) + "\nDate           : " + payment_date + "\nRemarks    : " + remarks + "\n\n" + "Payments made for " + booking_id + ": Rs. " + str(
            paid_amount
        ) + "\nTotal amount to owner for " + booking_id + ": Rs. " + str(
            booking_data.total_amount_to_owner)

    to_email_list = get_email_list(booking_data)
    email = EmailMessage(subject,
                         body,
                         'AAHO UPDATED OUTWARD PAYMENT',
                         to=to_email_list)
    if settings.ENABLE_MAIL and not settings.TESTING:
        email.send()
示例#15
0
def update_outward_payment(booking_id_list, paid_to, amount, remarks, date,
                           fuel_card, payment_mode, payment_id):
    manual_bookings = ManualBooking.objects.filter(id__in=booking_id_list)
    payment = OutWardPayment.objects.get(id=payment_id)
    old_amount = str(to_int(payment.actual_amount))
    payment.paid_to = paid_to
    payment.actual_amount = amount
    payment.remarks = remarks
    payment.payment_mode = payment_mode
    payment.payment_date = django_date_format(date)
    payment.fuel_card = fuel_card_obj(card_id=fuel_card)
    payment.lorry_number = ', '.join(
        manual_bookings.values_list('lorry_number', flat=True))
    payment.save()
    for value in payment.booking_id.all():
        value.total_out_ward_amount -= to_int(amount)
        value.save()
    payment.booking_id.clear()
    for booking in manual_bookings:
        payment.booking_id.add(booking)
        email_updated_outward_payment(booking.booking_id, payment_id,
                                      old_amount, str(to_int(amount)))
    for booking in manual_bookings:
        update_outward_payments(booking)
示例#16
0
def save_existing_manual_booking_data(request, booking_id):
    booking = ManualBooking.objects.get(id=booking_id)
    from_city = get_or_none(City, id=request.POST.get('from_city'))
    if isinstance(from_city, City):
        from_city_fk = from_city
        from_city = from_city.name

    else:
        from_city = None
        from_city_fk = None
    to_city = get_or_none(City, id=request.POST.get('to_city'))
    if isinstance(to_city, City):
        to_city_fk = to_city
        to_city = to_city.name
    else:
        to_city = None
        to_city_fk = None
    consignor_city = get_or_none(City, id=request.POST.get('consignor_city'))
    if isinstance(consignor_city, City):
        consignor_city_fk = consignor_city
        consignor_city = consignor_city.name
    else:
        consignor_city_fk = None
        consignor_city = None
    consignee_city = get_or_none(City, id=request.POST.get('consignee_city'))
    if isinstance(consignee_city, City):
        consignee_city_fk = consignee_city
        consignee_city = consignee_city.name
    else:
        consignee_city_fk = None
        consignee_city = None
    vehicle_category = get_or_none(VehicleCategory,
                                   id=request.POST.get('vehicle_category_id'))
    if isinstance(vehicle_category, VehicleCategory):
        type_of_vehicle = vehicle_category.vehicle_category
    else:
        type_of_vehicle = None
    vehicle = get_or_none(Vehicle,
                          vehicle_number=compare_format(
                              request.POST.get('vehicle_number')))
    if isinstance(vehicle, Vehicle):
        lorry_number = display_format(vehicle.vehicle_number)
    else:
        lorry_number = None
    if not EMP_GROUP3 in request.user.groups.values_list('name', flat=True):
        booking.party_rate = to_int(request.POST.get('party_rate'))
        booking.charged_weight = to_float(request.POST.get('charged_weight'))
        booking.additional_charges_for_company = to_int(
            request.POST.get('additional_charges_for_company'))
        booking.deductions_for_company = to_int(
            request.POST.get('deductions_for_company'))
        booking.total_amount_to_company = to_int(
            request.POST.get('total_amount_to_party'))
        booking.refund_amount = to_int(request.POST.get('refundable_amount'))
        booking.invoice_amount = to_int(request.POST.get('invoice_amount'))
        booking.invoice_remarks_for_deduction_discount = request.POST.get(
            'invoice_remarks_for_deduction_discount')
        booking.advance_amount_from_company = request.POST.get(
            'advance_from_company')
        booking.invoice_remarks_for_additional_charges = request.POST.get(
            'invoice_remarks_for_additional_charges')

    booking.consignor_name = request.POST.get('consignor_name')
    booking.consignor_address = request.POST.get('consignor_address')
    booking.consignor_city = consignor_city
    booking.consignor_city_fk = consignor_city_fk
    booking.consignor_pin = request.POST.get('consignor_pin')
    booking.consignor_phone = request.POST.get('consignor_phone')
    booking.consignor_gstin = request.POST.get('consignor_gstin')

    booking.consignee_name = request.POST.get('consignee_name')
    booking.consignee_address = request.POST.get('consignee_address')
    booking.consignee_city = consignee_city
    booking.consignee_city_fk = consignee_city_fk
    booking.consignee_pin = request.POST.get('consignee_pin')
    booking.consignee_phone = request.POST.get('consignee_phone')
    booking.consignee_gstin = request.POST.get('consignee_gstin')

    booking.driver = get_or_none(Driver,
                                 id=request.POST.get('truck_driver_id'))
    shipment_date = request.POST.get('shipment_datetime')
    booking.shipment_date = None if is_blank(
        shipment_date) else datetime.strptime(shipment_date, '%Y-%m-%d')
    booking.billing_type = request.POST.get('billing_type')
    booking.number_of_package = request.POST.get('number_of_package')
    booking.material = request.POST.get('material')
    booking.from_city = from_city
    booking.from_city_fk = from_city_fk
    booking.to_city = to_city
    booking.to_city_fk = to_city_fk
    booking.lorry_number = lorry_number
    booking.vehicle = vehicle
    booking.party_invoice_number = request.POST.get('party_invoice_number')
    booking.party_invoice_date = django_date_format(
        request.POST.get('party_invoice_date'))
    booking.party_invoice_amount = to_float(
        request.POST.get('party_invoice_amount'))
    booking.road_permit_number = request.POST.get('road_permit_number')
    booking.vehicle_category = vehicle_category
    booking.type_of_vehicle = type_of_vehicle

    booking.liability_of_service_tax = request.POST.get(
        'liability_of_service_tax')

    booking.loaded_weight = to_float(request.POST.get('loaded_weight'))

    booking.supplier_charged_weight = to_float(
        request.POST.get('supplier_charged_weight'))

    booking.supplier_rate = to_int(request.POST.get('supplier_rate'))

    save_insurance_details(request, booking)
    booking.comments = request.POST.get('comments')
    booking.billing_type = request.POST.get('billing_type')

    booking.loading_charge = to_int(request.POST.get('loading_charge'))
    booking.unloading_charge = to_int(request.POST.get('unloading_charge'))
    booking.detention_charge = to_int(request.POST.get('detention_charge'))
    booking.additional_charges_for_owner = to_int(
        request.POST.get('additional_charges_for_owner'))

    booking.commission = to_int(request.POST.get('commission'))
    booking.lr_cost = to_int(request.POST.get('lr_cost'))
    booking.deduction_for_advance = to_int(
        request.POST.get('deduction_for_advance'))
    booking.deduction_for_balance = to_int(
        request.POST.get('deduction_for_balance'))
    booking.other_deduction = to_int(request.POST.get('other_deduction'))

    booking.remarks_about_deduction = request.POST.get(
        'remarks_about_deduction')

    booking.total_amount_to_owner = to_int(
        request.POST.get('total_amount_to_owner'))
    booking.tds_deducted_amount = to_int(
        request.POST.get('tds_deducted_amount'))
    booking.invoice_status = request.POST.get('invoice_status')
    booking.note_for_additional_owner_charges = request.POST.get(
        'note_for_additional_owner_charges')
    booking.is_advance = request.POST.get('is_print_payment_mode_instruction')
    booking.changed_by = request.user
    booking.save()
    Vehicle.objects.filter(
        vehicle_number=compare_format(booking.lorry_number)).update(
            vehicle_type=vehicle_category)
    save_vendor_details(booking)
    update_inward_payments(booking)
    update_outward_payments(booking)
    update_invoice_status(booking)
    return booking