From fd1503c6a5d01956d42643fb30d5a8f28c00fc95 Mon Sep 17 00:00:00 2001 From: creamdory Date: Wed, 8 Nov 2017 10:58:09 +0800 Subject: [PATCH] [New Feature] Delivery --- erpnext/config/stock.py | 10 + .../docs/assets/img/stock/delivery_stops.png | Bin 0 -> 53909 bytes .../docs/assets/img/stock/delivery_trip.png | Bin 0 -> 84542 bytes .../user/manual/en/stock/delivery-trip.md | 17 + erpnext/hr/doctype/driver/__init__.py | 0 erpnext/hr/doctype/driver/driver.js | 5 + erpnext/hr/doctype/driver/driver.json | 528 +++++++++++++++ erpnext/hr/doctype/driver/driver.py | 9 + erpnext/hr/doctype/driver/test_driver.js | 23 + erpnext/hr/doctype/driver/test_driver.py | 9 + .../driving_license_category/__init__.py | 0 .../driving_license_category.json | 161 +++++ .../driving_license_category.py | 9 + .../stock/doctype/delivery_stop/__init__.py | 0 .../doctype/delivery_stop/delivery_stop.json | 606 ++++++++++++++++++ .../doctype/delivery_stop/delivery_stop.py | 9 + .../stock/doctype/delivery_trip/__init__.py | 0 .../doctype/delivery_trip/delivery_trip.js | 182 ++++++ .../doctype/delivery_trip/delivery_trip.json | 578 +++++++++++++++++ .../doctype/delivery_trip/delivery_trip.py | 206 ++++++ .../delivery_trip/test_delivery_trip.js | 23 + .../delivery_trip/test_delivery_trip.py | 62 ++ requirements.txt | 1 + 23 files changed, 2438 insertions(+) create mode 100644 erpnext/docs/assets/img/stock/delivery_stops.png create mode 100644 erpnext/docs/assets/img/stock/delivery_trip.png create mode 100644 erpnext/docs/user/manual/en/stock/delivery-trip.md create mode 100644 erpnext/hr/doctype/driver/__init__.py create mode 100644 erpnext/hr/doctype/driver/driver.js create mode 100644 erpnext/hr/doctype/driver/driver.json create mode 100644 erpnext/hr/doctype/driver/driver.py create mode 100644 erpnext/hr/doctype/driver/test_driver.js create mode 100644 erpnext/hr/doctype/driver/test_driver.py create mode 100644 erpnext/hr/doctype/driving_license_category/__init__.py create mode 100644 erpnext/hr/doctype/driving_license_category/driving_license_category.json create mode 100644 erpnext/hr/doctype/driving_license_category/driving_license_category.py create mode 100644 erpnext/stock/doctype/delivery_stop/__init__.py create mode 100644 erpnext/stock/doctype/delivery_stop/delivery_stop.json create mode 100644 erpnext/stock/doctype/delivery_stop/delivery_stop.py create mode 100644 erpnext/stock/doctype/delivery_trip/__init__.py create mode 100644 erpnext/stock/doctype/delivery_trip/delivery_trip.js create mode 100644 erpnext/stock/doctype/delivery_trip/delivery_trip.json create mode 100644 erpnext/stock/doctype/delivery_trip/delivery_trip.py create mode 100644 erpnext/stock/doctype/delivery_trip/test_delivery_trip.js create mode 100644 erpnext/stock/doctype/delivery_trip/test_delivery_trip.py diff --git a/erpnext/config/stock.py b/erpnext/config/stock.py index e0207d050d..7c04e67766 100644 --- a/erpnext/config/stock.py +++ b/erpnext/config/stock.py @@ -132,6 +132,16 @@ def get_data(): }, ] }, + { + "label": _("Fulfilment"), + "items": [ + { + "type": "doctype", + "name": "Delivery Trip", + "description": _("Delivery Trip service tours to customers.") + } + ] + }, { "label": _("Tools"), "icon": "fa fa-wrench", diff --git a/erpnext/docs/assets/img/stock/delivery_stops.png b/erpnext/docs/assets/img/stock/delivery_stops.png new file mode 100644 index 0000000000000000000000000000000000000000..1811cf3675d23d6fa51b837d9543fdb554f3d23a GIT binary patch literal 53909 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 z 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/stock/delivery_trip.png b/erpnext/docs/assets/img/stock/delivery_trip.png new file mode 100644 index 0000000000000000000000000000000000000000..6913542cfa383d94fc03692ace7398936f6d0b75 GIT binary patch literal 84542 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/user/manual/en/stock/delivery-trip.md b/erpnext/docs/user/manual/en/stock/delivery-trip.md new file mode 100644 index 0000000000..5e0911ad24 --- /dev/null +++ b/erpnext/docs/user/manual/en/stock/delivery-trip.md @@ -0,0 +1,17 @@ +# Delivery Trip + +Delivery Trip is created to record Customer Deliveries in one vehicle. Multiple stops can also be added and Submitted Delivery Note can be tagged per Customer. + +You can make a Delivery directly from: + +> Stock > Delivery Trip > New Delivery Trip + +Delivery + +Delivery + +Delivery Stops + +Delivery + +{next} \ No newline at end of file diff --git a/erpnext/hr/doctype/driver/__init__.py b/erpnext/hr/doctype/driver/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/hr/doctype/driver/driver.js b/erpnext/hr/doctype/driver/driver.js new file mode 100644 index 0000000000..014c4d3058 --- /dev/null +++ b/erpnext/hr/doctype/driver/driver.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Driver', { +}); diff --git a/erpnext/hr/doctype/driver/driver.json b/erpnext/hr/doctype/driver/driver.json new file mode 100644 index 0000000000..ccead4e71d --- /dev/null +++ b/erpnext/hr/doctype/driver/driver.json @@ -0,0 +1,528 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "naming_series:", + "beta": 0, + "creation": "2017-10-17 08:21:50.489773", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series", + "length": 0, + "no_copy": 0, + "options": "DRIVER-.#####", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "full_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Full Name", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "status", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Status", + "length": 0, + "no_copy": 0, + "options": "Active\nSuspended\nLeft", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Employee", + "length": 0, + "no_copy": 0, + "options": "Employee", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cell_number", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cellphone Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "license_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "License Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "license_number", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "License Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "issuing_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Issuing Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_10", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "expiry_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Expiry Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "driving_license_categories", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Driving License Categories", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "driving_license_category", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Driving License Category", + "length": 0, + "no_copy": 0, + "options": "Driving License Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "fa fa-user", + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-11-06 06:52:01.868222", + "modified_by": "Administrator", + "module": "HR", + "name": "Driver", + "name_case": "Title Case", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Fleet Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "search_fields": "full_name", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "full_name", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/driver/driver.py b/erpnext/hr/doctype/driver/driver.py new file mode 100644 index 0000000000..2cd22cd548 --- /dev/null +++ b/erpnext/hr/doctype/driver/driver.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class Driver(Document): + pass diff --git a/erpnext/hr/doctype/driver/test_driver.js b/erpnext/hr/doctype/driver/test_driver.js new file mode 100644 index 0000000000..ff9f61e66a --- /dev/null +++ b/erpnext/hr/doctype/driver/test_driver.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Driver", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Driver + () => frappe.tests.make('Driver', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/hr/doctype/driver/test_driver.py b/erpnext/hr/doctype/driver/test_driver.py new file mode 100644 index 0000000000..4bc4a8fd57 --- /dev/null +++ b/erpnext/hr/doctype/driver/test_driver.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +class TestDriver(unittest.TestCase): + pass diff --git a/erpnext/hr/doctype/driving_license_category/__init__.py b/erpnext/hr/doctype/driving_license_category/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/hr/doctype/driving_license_category/driving_license_category.json b/erpnext/hr/doctype/driving_license_category/driving_license_category.json new file mode 100644 index 0000000000..45e38d39c9 --- /dev/null +++ b/erpnext/hr/doctype/driving_license_category/driving_license_category.json @@ -0,0 +1,161 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-10-17 08:19:43.142329", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "class", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Class", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "issuing_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Issuing Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "expiry_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Expiry Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-10-17 08:19:43.142329", + "modified_by": "Administrator", + "module": "HR", + "name": "Driving License Category", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/driving_license_category/driving_license_category.py b/erpnext/hr/doctype/driving_license_category/driving_license_category.py new file mode 100644 index 0000000000..33ba138e27 --- /dev/null +++ b/erpnext/hr/doctype/driving_license_category/driving_license_category.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class DrivingLicenseCategory(Document): + pass diff --git a/erpnext/stock/doctype/delivery_stop/__init__.py b/erpnext/stock/doctype/delivery_stop/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/stock/doctype/delivery_stop/delivery_stop.json b/erpnext/stock/doctype/delivery_stop/delivery_stop.json new file mode 100644 index 0000000000..311f70e3b7 --- /dev/null +++ b/erpnext/stock/doctype/delivery_stop/delivery_stop.json @@ -0,0 +1,606 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-10-16 16:46:28.166950", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "customer", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Customer", + "length": 0, + "no_copy": 0, + "options": "Customer", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Address Name", + "length": 0, + "no_copy": 0, + "options": "Address", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_6", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "customer_address", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_7", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "contact", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Contact Name", + "length": 0, + "no_copy": 0, + "options": "Contact", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_7", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "customer_contact", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer Contact", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_9", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "estimated_arrival", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Estimated Arrival", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "details", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_12", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "select_delivery_notes", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Select/Unselect Delivery Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_14", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "delivery_notes", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Delivery Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_14", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "notified_by_email", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notified by Email", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_18", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email_sent_to", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Email sent to", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-11-13 04:09:56.257540", + "modified_by": "Administrator", + "module": "Stock", + "name": "Delivery Stop", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/stock/doctype/delivery_stop/delivery_stop.py b/erpnext/stock/doctype/delivery_stop/delivery_stop.py new file mode 100644 index 0000000000..768d1619f6 --- /dev/null +++ b/erpnext/stock/doctype/delivery_stop/delivery_stop.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, newmatik.io / ESO Electronic Service Ottenbreit and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class DeliveryStop(Document): + pass diff --git a/erpnext/stock/doctype/delivery_trip/__init__.py b/erpnext/stock/doctype/delivery_trip/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.js b/erpnext/stock/doctype/delivery_trip/delivery_trip.js new file mode 100644 index 0000000000..5f855305c7 --- /dev/null +++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.js @@ -0,0 +1,182 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Delivery Trip', { + refresh: function (frm) { + if (frm.doc.docstatus == 1 && frm.doc.delivery_stops.length > 0) { + frm.add_custom_button(__("Notify Customers via Email"), function () { + frm.trigger('notify_customers'); + }); + } + }, + calculate_arrival_time: function (frm) { + frappe.call({ + method: 'erpnext.stock.doctype.delivery_trip.delivery_trip.calculate_time_matrix', + freeze: true, + freeze_message: __("Updating estimated arrival times."), + args: { + name: frm.doc.name + }, + callback: function (r) { + if (r.message.error) { + frappe.throw(__("Malformatted address for " + r.message.error.destination.address + ", please fix to continue.")); + return; + } + frm.reload_doc(); + } + }); + }, + notify_customers: function (frm) { + var owner_email = frm.doc.owner == "Administrator" + ? frappe.user_info("Administrator").email + : frm.doc.owner; + + $.each(frm.doc.delivery_stops || [], function (i, delivery_stop) { + if (!delivery_stop.delivery_notes) { + frappe.msgprint({ + "message": __("No Delivery Note selected for Customer {}", [delivery_stop.customer]), + "title": __("Warning"), + "indicator": "orange", + "alert": 1 + }); + } + }); + frappe.confirm(__("Do you want to notify all the customers by email?"), function () { + frappe.call({ + method: "erpnext.stock.doctype.delivery_trip.delivery_trip.notify_customers", + args: { + "docname": frm.doc.name, + "date": frm.doc.date, + "driver": frm.doc.driver, + "vehicle": frm.doc.vehicle, + "sender_email": owner_email, + "sender_name": frappe.user.full_name(owner_email), + "delivery_notification": frm.doc.delivery_notification + } + }); + frm.doc.email_notification_sent = true; + frm.refresh_field('email_notification_sent'); + }); + } +}); + +cur_frm.fields_dict['delivery_stops'].grid.get_field("address").get_query = function (doc, cdt, cdn) { + var row = locals[cdt][cdn]; + if (row.customer) { + return { + query: 'frappe.contacts.doctype.address.address.address_query', + filters: { + link_doctype: "Customer", + link_name: row.customer + } + }; + } +}; + +cur_frm.fields_dict['delivery_stops'].grid.get_field("contact").get_query = function (doc, cdt, cdn) { + var row = locals[cdt][cdn]; + if (row.customer) { + return { + query: 'frappe.contacts.doctype.contact.contact.contact_query', + filters: { + link_doctype: "Customer", + link_name: row.customer + } + }; + } +}; + +frappe.ui.form.on('Delivery Stop', { + customer: function (frm, cdt, cdn) { + var row = locals[cdt][cdn]; + frappe.call({ + method: "erpnext.stock.doctype.delivery_trip.delivery_trip.get_contact_and_address", + args: {"name": row.customer}, + callback: function (r) { + if (r.message) { + if (r.message["shipping_address"]) { + frappe.model.set_value(cdt, cdn, "address", r.message["shipping_address"].parent); + } + if (r.message["contact_person"]) { + frappe.model.set_value(cdt, cdn, "contact", r.message["contact_person"].parent); + } + } + } + }); + }, + address: function (frm, cdt, cdn) { + var row = locals[cdt][cdn]; + frappe.call({ + method: "frappe.contacts.doctype.address.address.get_address_display", + args: {"address_dict": row.address}, + callback: function (r) { + if (r.message) { + frappe.model.set_value(cdt, cdn, "customer_address", r.message); + } + } + }); + }, + contact: function (frm, cdt, cdn) { + var row = locals[cdt][cdn]; + frappe.call({ + method: "erpnext.stock.doctype.delivery_trip.delivery_trip.get_contact_display", + args: {"contact": row.contact}, + callback: function (r) { + if (r.message) { + frappe.model.set_value(cdt, cdn, "customer_contact", r.message); + } + } + }); + }, + select_delivery_notes: function (frm, cdt, cdn) { + var row = locals[cdt][cdn]; + frappe.call({ + method: "erpnext.stock.doctype.delivery_trip.delivery_trip.get_delivery_notes", + args: {"customer": row.customer}, + callback: function (r) { + var delivery_notes = []; + $.each(r.message, function (field, value) { + delivery_notes.push(value.name); + }); + if (r.message) { + var d = new frappe.ui.Dialog({ + title: __("Select Delivery Notes"), + fields: [{fieldtype: "HTML", fieldname: "delivery_notes_html"}] + }); + var html = $(` +
+
+
+ ${__('Delivery Notes')} +
+
+ ${delivery_notes.map(delivery_note => ` +
+
+ +
+
+ `).join("")} +
+ `); + + var delivery_notes_el = d.fields_dict.delivery_notes_html.$wrapper.html(html); + + d.set_primary_action(__("Select"), function () { + var delivery_notes = delivery_notes_el.find('input[type=checkbox]:checked').map((i, el) => $(el).attr('data-delivery-note')).toArray(); + if (!delivery_notes) return; + frappe.model.set_value(cdt, cdn, "delivery_notes", delivery_notes.join(",")); + d.hide(); + }); + d.show(); + } + else { + frappe.msgprint(__("No submitted Delivery Notes found")); + } + } + }); + } +}); \ No newline at end of file diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.json b/erpnext/stock/doctype/delivery_trip/delivery_trip.json new file mode 100644 index 0000000000..50e4999991 --- /dev/null +++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.json @@ -0,0 +1,578 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 0, + "creation": "2017-10-16 16:45:48.293335", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series", + "length": 0, + "no_copy": 0, + "options": "TOUR-.#####", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email_notification_sent", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Initial Email Notification Sent", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_3", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "departure_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Departure Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "driver", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Driver", + "length": 0, + "no_copy": 0, + "options": "Driver", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "driver_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Driver Name", + "length": 0, + "no_copy": 0, + "options": "driver.full_name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "vehicle", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Vehicle", + "length": 0, + "no_copy": 0, + "options": "Vehicle", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "delivery_service_stops", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Delivery Stops", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "delivery_stops", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Delivery Stop", + "length": 0, + "no_copy": 0, + "options": "Delivery Stop", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!cur_frm.is_new()", + "fieldname": "calculate_arrival_time", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Calculate Estimated Arrival Times", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_13", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Delivery Notification", + "fieldname": "delivery_notification", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Delivery Notification", + "length": 0, + "no_copy": 0, + "options": "Standard Reply", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Delivery Trip", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-11-13 03:56:09.885801", + "modified_by": "Administrator", + "module": "Stock", + "name": "Delivery Trip", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Fulfillment User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.py b/erpnext/stock/doctype/delivery_trip/delivery_trip.py new file mode 100644 index 0000000000..6923c5f033 --- /dev/null +++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.py @@ -0,0 +1,206 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import datetime +import frappe +import googlemaps +from frappe import _ +from frappe.model.document import Document +from frappe.utils.user import get_user_fullname +from frappe.utils import getdate +from frappe.integrations.doctype.google_maps.google_maps import round_timedelta +from frappe.integrations.doctype.google_maps.google_maps import customer_address_format + +class DeliveryTrip(Document): + pass + +def get_default_contact(out, name): + contact_persons = frappe.db.sql( + """ + select parent, + (select is_primary_contact from tabContact c where c.name = dl.parent) + as is_primary_contact + from + `tabDynamic Link` dl + where + dl.link_doctype="Customer" and + dl.link_name=%s and + dl.parenttype = 'Contact' + """, (name), as_dict=1) + + if contact_persons: + for out.contact_person in contact_persons: + if out.contact_person.is_primary_contact: + return out.contact_person + out.contact_person = contact_persons[0] + return out.contact_person + else: + return None + +def get_default_address(out, name): + shipping_addresses = frappe.db.sql( + """ + select + parent, (select is_shipping_address from tabAddress a where a.name=dl.parent) as is_shipping_address + from `tabDynamic Link` dl + where link_doctype="Customer" and link_name=%s + and parenttype = 'Address' + """ + , (name), as_dict=1) + + if shipping_addresses: + for out.shipping_address in shipping_addresses: + if out.shipping_address.is_shipping_address: + return out.shipping_address + out.shipping_address = shipping_addresses[0] + return out.shipping_address + else: + return None + + +@frappe.whitelist() +def get_contact_and_address(name): + out = frappe._dict() + get_default_contact(out, name) + get_default_address(out, name) + return out + + +@frappe.whitelist() +def get_contact_display(contact): + contact_info = frappe.db.get_value( + "Contact", contact, + ["first_name", "last_name", "phone", "mobile_no"], + as_dict=1) + contact_info.html = """ %(first_name)s %(last_name)s
%(phone)s
%(mobile_no)s""" % { + "first_name": contact_info.first_name, + "last_name": contact_info.last_name, + "phone": contact_info.phone if contact_info.phone else "", + "mobile_no": contact_info.mobile_no if contact_info.mobile_no else "", + } + return contact_info.html + + +@frappe.whitelist() +def get_delivery_notes(customer): + return frappe.db.get_all( + "Delivery Note", + filters={'customer': customer, + 'docstatus': 1, + 'status': ('!=', 'Completed')}) + +@frappe.whitelist() +def calculate_time_matrix(name): + """Calucation and round in closest 15 minutes, delivery stops""" + + gmaps_client = frappe.db.get_single_value('Google Maps', 'client_key') + gmaps = googlemaps.Client(key=gmaps_client) + home = frappe.db.get_single_value('Google Maps', 'home_address') + + secs_15min = 900 + doc = frappe.get_doc('Delivery Trip', name) + departure_time = doc.departure_time + matrix_duration = [] + + for i, stop in enumerate(doc.delivery_stop): + + if i == 0: + # The first row is the starting pointing + origin = home + destination = customer_address_format(doc.delivery_stop[i].address) + distance_calc = gmaps.distance_matrix(origin, destination) + matrix_duration.append(distance_calc) + try: + distance_secs = distance_calc['rows'][0]['elements'][0]['duration']['value'] + except Exception as e: + frappe.throw(_("Error '{0}' occured. Arguments {1}.").format(e.message, e.args)) + stop.estimated_arrival = round_timedelta(departure_time + datetime.timedelta(0, distance_secs + secs_15min), + datetime.timedelta(minutes=15)) + stop.save() + frappe.db.commit() + else: + # Calculation based on previous + origin = customer_address_format(doc.delivery_stop[i - 1].address) + destination = customer_address_format(doc.delivery_stop[i].address) + distance_calc = gmaps.distance_matrix(origin, destination) + matrix_duration.append(distance_calc) + try: + distance_secs = distance_calc['rows'][0]['elements'][0]['duration']['value'] + except Exception as e: + frappe.throw(_("Error '{0}' occured. Arguments {1}.").format(e.message, e.args)) + stop.estimated_arrival = round_timedelta( + doc.delivery_stop[i - 1].estimated_arrival + datetime.timedelta(0, distance_secs + secs_15min), + datetime.timedelta(minutes=15)) + stop.save() + frappe.db.commit() + return matrix_duration + + +@frappe.whitelist() +def notify_customers(docname, date, driver, vehicle, sender_email, delivery_notification): + sender_name = get_user_fullname(sender_email) + delivery_stops = frappe.get_all('Delivery Stop', {"parent": docname}) + attachments = [] + + for delivery_stop in delivery_stops: + delivery_stop_info = frappe.db.get_value( + "Delivery Stop", + delivery_stop.name, + ["notified_by_email", "estimated_arrival", + "details", "contact", "delivery_notes"], + as_dict=1) + contact_info = frappe.db.get_value( + "Contact", delivery_stop_info.contact, + ["first_name", "last_name", "email_id", "gender"], + as_dict=1) + + if delivery_stop_info.delivery_notes: + delivery_notes = (delivery_stop_info.delivery_notes).split(",") + attachments = [] + for delivery_note in delivery_notes: + attachments.append( + frappe.attach_print('Delivery Note', + delivery_note, + file_name="Delivery Note", + print_format='Delivery Note')) + + if not delivery_stop_info.notified_by_email and contact_info.email_id: + driver_info = frappe.db.get_value( + "Driver", + driver, + ["full_name", "cell_number"], + as_dict=1) + sender_designation = frappe.db.get_value("Employee", + sender_email, + ["designation"]) + + estimated_arrival = str(delivery_stop_info.estimated_arrival)[:-3] + email_template = frappe.get_doc("Standard Reply", + delivery_notification) + message = frappe.render_template( + email_template.response, + dict(contact_info=contact_info, sender_name=sender_name, + details=delivery_stop_info.details, + estimated_arrival=estimated_arrival, + date=getdate(date).strftime('%d.%m.%y'), vehicle=vehicle, + driver_info=driver_info, + sender_designation=sender_designation) + ) + frappe.sendmail( + recipients=contact_info.email_id, + sender=sender_email, + message=message, + attachments=attachments, + subject=_(email_template.subject).format(getdate(date).strftime('%d.%m.%y'), + estimated_arrival)) + + frappe.db.set_value("Delivery Stop", + delivery_stop.name, + "notified_by_email", 1) + frappe.db.set_value("Delivery Stop", + delivery_stop.name, + "email_sent_to", + contact_info.email_id) + frappe.msgprint(_("Email sent to {0}").format(contact_info.email_id)) \ No newline at end of file diff --git a/erpnext/stock/doctype/delivery_trip/test_delivery_trip.js b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.js new file mode 100644 index 0000000000..b6d6d1af64 --- /dev/null +++ b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Delivery Trip", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Delivery Trip + () => frappe.tests.make('Delivery Trip', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py new file mode 100644 index 0000000000..6ac86960d4 --- /dev/null +++ b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import erpnext +import unittest +from frappe.utils import nowdate, add_days +from erpnext.tests.utils import create_test_contact_and_address +from erpnext.stock.doctype.delivery_trip.delivery_trip import notify_customers + +class TestDeliveryTrip(unittest.TestCase): + def setUp(self): + create_driver() + create_vehicle() + create_test_contact_and_address() + + def test_delivery_trip(self): + if not frappe.db.exists("Delivery Trip", "TOUR-00000"): + delivery_trip = frappe.new_doc("Delivery Trip") + delivery_trip.company = erpnext.get_default_company() + delivery_trip.date = add_days(nowdate(), 5) + delivery_trip.driver = "Newton Scmander" + delivery_trip.vehicle = "JB 007" + delivery_trip.append("delivery_stops", { + "customer": "_Test Customer", + "address": "_Test Address for Customer", + "contact": '_Test Contact for _Test Customer - _Test Customer' + }) + delivery_trip.insert() + sender_email = frappe.db.get_value("User", frappe.session.user, "email") + notify_customers(docname=delivery_trip.name, date=delivery_trip.date, driver=delivery_trip.driver, + vehicle=delivery_trip.vehicle, + sender_email=sender_email, delivery_notification=delivery_trip.delivery_notification) + + self.assertEquals(delivery_trip.get("delivery_stops")[0].notified_by_email, 1) + + +def create_driver(): + if not frappe.db.exists("Driver", "Newton Scmander"): + driver = frappe.new_doc("Driver") + driver.full_name = "Newton Scmander" + driver.cell_number = "98343424242" + driver.license_number = "B809" + driver.insert() + + +def create_vehicle(): + if not frappe.db.exists("Vehicle", "JB 007"): + vehicle = frappe.get_doc({ + "doctype": "Vehicle", + "license_plate": "JB 007", + "make": "Maruti", + "model": "PCM", + "last_odometer": 5000, + "acquisition_date": frappe.utils.nowdate(), + "location": "Mumbai", + "chassis_no": "1234ABCD", + "vehicle_value": frappe.utils.flt(500000) + }) + vehicle.insert() diff --git a/requirements.txt b/requirements.txt index 0bfd3df0ac..a6cfaf2ce4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ frappe unidecode pygithub +googlemaps