feat: Add Create Expense Claim button in Delivery Trip (#25526)
* feat(Delivery Trip): Add employee_code field
* feat(Expense Claim): Add Delivery Trip Number field
* feat(Delivery Trip): Add Create Expense Claim button
* feat(Delivery Trip): Make Create Expense Claim button show up after save
* fix(Delivery Trip): Fix Sider issues
* fix(Delivery Trip): Display button after submit
* fix(Delivery Trip & Expense Claim): Rename new fields
* fix(Delivery Trip): Add button in refresh
* fix(Delivery Trip): Remove redundant line
* fix(Expense Claim): Display delivery_trip only if non-empty
* fix(Delivery Trip): Add test for Create Expense Claim
* fix(Delivery Trip): Fix Sider Issue
* fix(Delivery Trip): Only display Create Expense Claim if the driver is an employee
* fix(Delivery Trip): Fix test
* fix(Delivery Trip): Fix make_expense_claim()
* fix: sider
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.json b/erpnext/hr/doctype/expense_claim/expense_claim.json
index e3e6e80..a268c15 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.json
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.json
@@ -14,6 +14,7 @@
"column_break_5",
"expense_approver",
"approval_status",
+ "delivery_trip",
"is_paid",
"expense_details",
"expenses",
@@ -365,13 +366,20 @@
"label": "Total Taxes and Charges",
"options": "Company:company:default_currency",
"read_only": 1
+ },
+ {
+ "depends_on": "eval: doc.delivery_trip",
+ "fieldname": "delivery_trip",
+ "fieldtype": "Link",
+ "label": "Delivery Trip",
+ "options": "Delivery Trip"
}
],
"icon": "fa fa-money",
"idx": 1,
"is_submittable": 1,
"links": [],
- "modified": "2020-09-18 17:26:09.703215",
+ "modified": "2021-05-04 05:35:12.040199",
"modified_by": "Administrator",
"module": "HR",
"name": "Expense Claim",
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.js b/erpnext/stock/doctype/delivery_trip/delivery_trip.js
index a6fbb66..68cba29 100755
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.js
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.js
@@ -41,6 +41,15 @@
},
refresh: function (frm) {
+ if (frm.doc.docstatus == 1 && frm.doc.employee) {
+ frm.add_custom_button(__('Expense Claim'), function() {
+ frappe.model.open_mapped_doc({
+ method: 'erpnext.stock.doctype.delivery_trip.delivery_trip.make_expense_claim',
+ frm: cur_frm,
+ });
+ }, __("Create"));
+ }
+
if (frm.doc.docstatus == 1 && frm.doc.delivery_stops.length > 0) {
frm.add_custom_button(__("Notify Customers via Email"), function () {
frm.trigger('notify_customers');
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.json b/erpnext/stock/doctype/delivery_trip/delivery_trip.json
index 879901f..11b71c2 100644
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.json
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.json
@@ -21,6 +21,7 @@
"column_break_4",
"vehicle",
"departure_time",
+ "employee",
"delivery_service_stops",
"delivery_stops",
"calculate_arrival_time",
@@ -176,11 +177,19 @@
"fieldtype": "Data",
"label": "Driver Email",
"read_only": 1
+ },
+ {
+ "fetch_from": "driver.employee",
+ "fieldname": "employee",
+ "fieldtype": "Link",
+ "label": "Employee",
+ "options": "Employee",
+ "read_only": 1
}
],
"is_submittable": 1,
"links": [],
- "modified": "2020-01-26 22:37:14.824021",
+ "modified": "2021-04-30 21:21:36.610142",
"modified_by": "Administrator",
"module": "Stock",
"name": "Delivery Trip",
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.py b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
index de85bc3..81e7301 100644
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.py
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
@@ -11,6 +11,7 @@
from frappe.contacts.doctype.address.address import get_address_display
from frappe.model.document import Document
from frappe.utils import cint, get_datetime, get_link_to_form
+from frappe.model.mapper import get_mapped_doc
class DeliveryTrip(Document):
@@ -394,3 +395,15 @@
employee = frappe.db.get_value("Driver", driver, "employee")
email = frappe.db.get_value("Employee", employee, "prefered_email")
return {"email": email}
+
+@frappe.whitelist()
+def make_expense_claim(source_name, target_doc=None):
+ doc = get_mapped_doc("Delivery Trip", source_name,
+ {"Delivery Trip": {
+ "doctype": "Expense Claim",
+ "field_map": {
+ "name" : "delivery_trip"
+ }
+ }}, target_doc)
+
+ return doc
\ No newline at end of file
diff --git a/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py
index eeea6da..1e71603 100644
--- a/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py
+++ b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py
@@ -7,7 +7,7 @@
import erpnext
import frappe
-from erpnext.stock.doctype.delivery_trip.delivery_trip import get_contact_and_address, notify_customers
+from erpnext.stock.doctype.delivery_trip.delivery_trip import get_contact_and_address, notify_customers, make_expense_claim
from erpnext.tests.utils import create_test_contact_and_address
from frappe.utils import add_days, flt, now_datetime, nowdate
@@ -28,6 +28,10 @@
frappe.db.sql("delete from `tabEmail Template`")
frappe.db.sql("delete from `tabDelivery Trip`")
+ def test_expense_claim_fields_are_fetched_properly(self):
+ expense_claim = make_expense_claim(self.delivery_trip.name)
+ self.assertEqual(self.delivery_trip.name, expense_claim.delivery_trip)
+
def test_delivery_trip_notify_customers(self):
notify_customers(delivery_trip=self.delivery_trip.name)
self.delivery_trip.load_from_db()