Fix 'transporter info' section in Delivery Note (#15565)
- create is_transporter checkbox in supplier doctype - new field transporter (supplier with is_transporter checked) - created fields driver and driver_name - removed GST India fields from core doctype - removed readonly & allow_on_submit from fields (delivery trip applicable only for in-house delivery) - read_only transporter_name field (kept for backwards compatibility) - made necessary changes in delivery_trip implementation - hidden section's fields from print (preserving v10 convention) - added transporter field to 'Driver' doctype - added queries for transporter and driver fields - GST India fields in regional module - Fix e-waybill report
This commit is contained in:
parent
dd87e0f1e2
commit
d92f3ac480
File diff suppressed because it is too large
Load Diff
@ -2,4 +2,13 @@
|
|||||||
// For license information, please see license.txt
|
// For license information, please see license.txt
|
||||||
|
|
||||||
frappe.ui.form.on('Driver', {
|
frappe.ui.form.on('Driver', {
|
||||||
|
setup: function(frm) {
|
||||||
|
frm.set_query('transporter', function(){
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
'is_transporter': 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -568,5 +568,6 @@ erpnext.patches.v11_0.remove_land_unit_icon
|
|||||||
erpnext.patches.v11_0.add_default_dispatch_notification_template
|
erpnext.patches.v11_0.add_default_dispatch_notification_template
|
||||||
erpnext.patches.v11_0.add_market_segments
|
erpnext.patches.v11_0.add_market_segments
|
||||||
erpnext.patches.v11_0.add_sales_stages
|
erpnext.patches.v11_0.add_sales_stages
|
||||||
|
erpnext.patches.v11_0.ewaybill_fields_gst_india
|
||||||
erpnext.patches.v11_0.drop_column_max_days_allowed
|
erpnext.patches.v11_0.drop_column_max_days_allowed
|
||||||
erpnext.patches.v11_0.change_healthcare_desktop_icons
|
erpnext.patches.v11_0.change_healthcare_desktop_icons
|
||||||
|
9
erpnext/patches/v11_0/ewaybill_fields_gst_india.py
Normal file
9
erpnext/patches/v11_0/ewaybill_fields_gst_india.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import frappe
|
||||||
|
from erpnext.regional.india.setup import make_custom_fields
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
company = frappe.get_all('Company', filters = {'country': 'India'})
|
||||||
|
if not company:
|
||||||
|
return
|
||||||
|
|
||||||
|
make_custom_fields()
|
@ -164,6 +164,43 @@ def make_custom_fields(update=True):
|
|||||||
fieldtype='Check', insert_after='disabled', print_hide=1)
|
fieldtype='Check', insert_after='disabled', print_hide=1)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
ewaybill_fields = [
|
||||||
|
{
|
||||||
|
'fieldname': 'distance',
|
||||||
|
'label': 'Distance (in km)',
|
||||||
|
'fieldtype': 'Float',
|
||||||
|
'insert_after': 'vehicle_no',
|
||||||
|
'print_hide': 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'fieldname': 'gst_transporter_id',
|
||||||
|
'label': 'GST Transporter ID',
|
||||||
|
'fieldtype': 'Data',
|
||||||
|
'insert_after': 'transporter_name',
|
||||||
|
'fetch_from': 'transporter.gst_transporter_id',
|
||||||
|
'print_hide': 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'fieldname': 'mode_of_transport',
|
||||||
|
'label': 'Mode of Transport',
|
||||||
|
'fieldtype': 'Select',
|
||||||
|
'options': '\nRoad\nAir\nRail\nShip',
|
||||||
|
'default': 'Road',
|
||||||
|
'insert_after': 'lr_date',
|
||||||
|
'print_hide': 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'fieldname': 'gst_vehicle_type',
|
||||||
|
'label': 'GST Vehicle Type',
|
||||||
|
'fieldtype': 'Select',
|
||||||
|
'options': '\nRegular\nOver Dimensional Cargo (ODC)',
|
||||||
|
'default': 'Regular',
|
||||||
|
'depends_on': 'eval:(doc.mode_of_transport === "Road")',
|
||||||
|
'insert_after': 'mode_of_transport',
|
||||||
|
'print_hide': 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
custom_fields = {
|
custom_fields = {
|
||||||
'Address': [
|
'Address': [
|
||||||
dict(fieldname='gstin', label='Party GSTIN', fieldtype='Data',
|
dict(fieldname='gstin', label='Party GSTIN', fieldtype='Data',
|
||||||
@ -175,7 +212,7 @@ def make_custom_fields(update=True):
|
|||||||
],
|
],
|
||||||
'Purchase Invoice': invoice_gst_fields + purchase_invoice_gst_fields,
|
'Purchase Invoice': invoice_gst_fields + purchase_invoice_gst_fields,
|
||||||
'Sales Invoice': invoice_gst_fields + sales_invoice_gst_fields,
|
'Sales Invoice': invoice_gst_fields + sales_invoice_gst_fields,
|
||||||
'Delivery Note': sales_invoice_gst_fields,
|
'Delivery Note': sales_invoice_gst_fields + ewaybill_fields,
|
||||||
'Sales Taxes and Charges Template': inter_state_gst_field,
|
'Sales Taxes and Charges Template': inter_state_gst_field,
|
||||||
'Purchase Taxes and Charges Template': inter_state_gst_field,
|
'Purchase Taxes and Charges Template': inter_state_gst_field,
|
||||||
'Item': [
|
'Item': [
|
||||||
@ -240,6 +277,15 @@ def make_custom_fields(update=True):
|
|||||||
fieldtype='Currency', insert_after='monthly_house_rent', read_only=1),
|
fieldtype='Currency', insert_after='monthly_house_rent', read_only=1),
|
||||||
dict(fieldname='total_eligible_hra_exemption', label='Total Eligible HRA Exemption',
|
dict(fieldname='total_eligible_hra_exemption', label='Total Eligible HRA Exemption',
|
||||||
fieldtype='Currency', insert_after='monthly_hra_exemption', read_only=1)
|
fieldtype='Currency', insert_after='monthly_hra_exemption', read_only=1)
|
||||||
|
],
|
||||||
|
'Supplier': [
|
||||||
|
{
|
||||||
|
'fieldname': 'gst_transporter_id',
|
||||||
|
'label': 'GST Transporter ID',
|
||||||
|
'fieldtype': 'Data',
|
||||||
|
'insert_after': 'supplier_type',
|
||||||
|
'depends_on': 'eval:doc.is_transporter'
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ def get_data(filters):
|
|||||||
|
|
||||||
data = frappe.db.sql("""
|
data = frappe.db.sql("""
|
||||||
SELECT
|
SELECT
|
||||||
dn.name as dn_id, dn.posting_date, dn.company, dn.company_gstin, dn.customer, dn.customer_gstin, dni.item_code, dni.item_name, dni.description, dni.gst_hsn_code, dni.uom, dni.qty, dni.amount, dn.transport_mode, dn.distance, dn.transporter_name, dn.transporter, dn.lr_no, dn.lr_date, dn.vehicle_no, dn.vehicle_type, dn.company_address, dn.shipping_address_name
|
dn.name as dn_id, dn.posting_date, dn.company, dn.company_gstin, dn.customer, dn.customer_gstin, dni.item_code, dni.item_name, dni.description, dni.gst_hsn_code, dni.uom, dni.qty, dni.amount, dn.mode_of_transport, dn.distance, dn.transporter_name, dn.gst_transporter_id, dn.lr_no, dn.lr_date, dn.vehicle_no, dn.gst_vehicle_type, dn.company_address, dn.shipping_address_name
|
||||||
FROM
|
FROM
|
||||||
`tabDelivery Note` AS dn join `tabDelivery Note Item` AS dni on (dni.parent = dn.name)
|
`tabDelivery Note` AS dn join `tabDelivery Note Item` AS dni on (dni.parent = dn.name)
|
||||||
WHERE
|
WHERE
|
||||||
@ -52,6 +52,9 @@ def get_data(filters):
|
|||||||
row.posting_date = '/'.join(str(row.posting_date).replace("-", "/").split('/')[::-1])
|
row.posting_date = '/'.join(str(row.posting_date).replace("-", "/").split('/')[::-1])
|
||||||
row.lr_date = '/'.join(str(row.lr_date).replace("-", "/").split('/')[::-1])
|
row.lr_date = '/'.join(str(row.lr_date).replace("-", "/").split('/')[::-1])
|
||||||
|
|
||||||
|
if row.gst_vehicle_type == 'Over Dimensional Cargo (ODC)':
|
||||||
|
row.gst_vehicle_type = 'ODC'
|
||||||
|
|
||||||
row.item_name = re.sub(special_characters, " ", row.item_name)
|
row.item_name = re.sub(special_characters, " ", row.item_name)
|
||||||
row.description = row.item_name
|
row.description = row.item_name
|
||||||
|
|
||||||
@ -333,8 +336,8 @@ def get_columns():
|
|||||||
"width": 100
|
"width": 100
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "transport_mode",
|
"fieldname": "mode_of_transport",
|
||||||
"label": _("Transport Mode"),
|
"label": _("Mode of Transport"),
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"width": 100
|
"width": 100
|
||||||
},
|
},
|
||||||
@ -351,20 +354,20 @@ def get_columns():
|
|||||||
"width": 120
|
"width": 120
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "transporter_id",
|
"fieldname": "gst_transporter_id",
|
||||||
"label": _("Transporter ID"),
|
"label": _("Transporter ID"),
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"width": 100
|
"width": 100
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "lr_no",
|
"fieldname": "lr_no",
|
||||||
"label": _("Transporter Doc No"),
|
"label": _("Transport Receipt No"),
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"width": 120
|
"width": 120
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "lr_date",
|
"fieldname": "lr_date",
|
||||||
"label": _("Transporter Date"),
|
"label": _("Transport Receipt Date"),
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"width": 120
|
"width": 120
|
||||||
},
|
},
|
||||||
@ -375,7 +378,7 @@ def get_columns():
|
|||||||
"width": 100
|
"width": 100
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "vehicle_type",
|
"fieldname": "gst_vehicle_type",
|
||||||
"label": _("Vehicle Type"),
|
"label": _("Vehicle Type"),
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"width": 100
|
"width": 100
|
||||||
|
@ -32,9 +32,19 @@ frappe.ui.form.on("Delivery Note", {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
frm.set_query('transporter_name', function(doc) {
|
frm.set_query('transporter', function() {
|
||||||
return {
|
return {
|
||||||
filters: { 'supplier_group': "transporter" }
|
filters: {
|
||||||
|
'is_transporter': 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
frm.set_query('driver', function(doc) {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
'transporter': doc.transporter
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -24,11 +24,9 @@ class DeliveryTrip(Document):
|
|||||||
delivery_notes = list(set([stop.delivery_note for stop in self.delivery_stops if stop.delivery_note]))
|
delivery_notes = list(set([stop.delivery_note for stop in self.delivery_stops if stop.delivery_note]))
|
||||||
|
|
||||||
update_fields = {
|
update_fields = {
|
||||||
"transporter": self.driver,
|
"driver": self.driver,
|
||||||
"transporter_name": self.driver_name,
|
"driver_name": self.driver_name,
|
||||||
"transport_mode": "Road",
|
|
||||||
"vehicle_no": self.vehicle,
|
"vehicle_no": self.vehicle,
|
||||||
"vehicle_type": "Regular",
|
|
||||||
"lr_no": self.name,
|
"lr_no": self.name,
|
||||||
"lr_date": self.date
|
"lr_date": self.date
|
||||||
}
|
}
|
||||||
@ -40,6 +38,7 @@ class DeliveryTrip(Document):
|
|||||||
value = None if delete else value
|
value = None if delete else value
|
||||||
setattr(note_doc, field, value)
|
setattr(note_doc, field, value)
|
||||||
|
|
||||||
|
note_doc.flags.ignore_validate_update_after_submit = True
|
||||||
note_doc.save()
|
note_doc.save()
|
||||||
|
|
||||||
delivery_notes = [get_link_to_form("Delivery Note", note) for note in delivery_notes]
|
delivery_notes = [get_link_to_form("Delivery Note", note) for note in delivery_notes]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user