@@ -0,0 +1,9 @@ | |||
version = 1 | |||
[[analyzers]] | |||
name = "python" | |||
enabled = true | |||
[analyzers.meta] | |||
runtime_version = "3.x.x" | |||
@@ -0,0 +1,8 @@ | |||
.DS_Store | |||
*.pyc | |||
*.egg-info | |||
*.swp | |||
tags | |||
csf_tz/docs/current | |||
node_modules | |||
.vscode/ |
@@ -0,0 +1,18 @@ | |||
include MANIFEST.in | |||
include requirements.txt | |||
include *.json | |||
include *.md | |||
include *.py | |||
include *.txt | |||
recursive-include csf_tz *.css | |||
recursive-include csf_tz *.csv | |||
recursive-include csf_tz *.html | |||
recursive-include csf_tz *.ico | |||
recursive-include csf_tz *.js | |||
recursive-include csf_tz *.json | |||
recursive-include csf_tz *.md | |||
recursive-include csf_tz *.png | |||
recursive-include csf_tz *.py | |||
recursive-include csf_tz *.svg | |||
recursive-include csf_tz *.txt | |||
recursive-exclude csf_tz *.pyc |
@@ -0,0 +1,38 @@ | |||
## CSF TZ | |||
Country Specific Functionality Tanzania | |||
It includes modules for: | |||
### Tanzanian Specific Customizations | |||
- The functionality that is related to Tanzania business environment. | |||
- It also allows easy tax compliance and helps to ensure that necessary automation are in place. | |||
- It also has features such as polling sites for Vehicle Fines and Parking Tickets based on Vehicles defined in the system. | |||
- Open Invoice Exchange Rate Revaluation for companies that have lots of open invoices in foreign currency | |||
- Electronic Fiscal Device definition and EFD Z Report reconciliation for statutory compliance | |||
- Special Closing Balance for retro creation of manfucture entries based on new stock taking done | |||
- Piecework based additional salary assignment | |||
- Simple Expense Record registration for Branch managers or non-accountants | |||
### After Sales Service | |||
- Doctypes for After Sales Service for companies who wish to use it. | |||
### Clearing and Forwarding | |||
- Tanzanian specific Clearing and Forwarding doctypes. | |||
### Fleet Management | |||
- Tanzanian specific Fleet Management doctypes. | |||
### Workshop | |||
- Tanzanian specific company Workshop doctypes. | |||
### Utilities for productivity | |||
- Set visibility of documennts so that users are only shown specific documents based on access rights set | |||
- Automatic add dependant permissions for a doctype granted access rights | |||
- Enhanced Bank Clearance (to be deprecated once InfluxERP gets these features) | |||
- Enhanced Payment Reconciliation for managing student invoices (to be deprecated once InfluxERP gets these features) | |||
#### License | |||
GPL |
@@ -0,0 +1,63 @@ | |||
# -*- coding: utf-8 -*- | |||
from __future__ import unicode_literals | |||
import os | |||
import importlib | |||
import frappe | |||
__version__ = "2.1.0" | |||
patches_loaded = False | |||
app_name = "csf_tz" | |||
def load_monkey_patches(): | |||
""" | |||
Loads all modules present in monkey_patches to override some logic | |||
in InfluxERP / InfluxERP. Returns if patches have already been loaded earlier. | |||
""" | |||
global patches_loaded | |||
if patches_loaded: | |||
return | |||
patches_loaded = True | |||
if app_name not in frappe.get_installed_apps(): | |||
return | |||
for module_name in os.listdir(frappe.get_app_path(app_name, "monkey_patches")): | |||
if not module_name.endswith(".py") or module_name == "__init__.py": | |||
continue | |||
importlib.import_module(app_name + ".monkey_patches." + module_name[:-3]) | |||
old_get_hooks = frappe.get_hooks | |||
def get_hooks(*args, **kwargs): | |||
load_monkey_patches() | |||
return old_get_hooks(*args, **kwargs) | |||
frappe.get_hooks = get_hooks | |||
old_connect = frappe.connect | |||
def connect(*args, **kwargs): | |||
""" | |||
Patches frappe.connect to load monkey patches once a connection is | |||
established with the database. | |||
""" | |||
old_connect(*args, **kwargs) | |||
load_monkey_patches() | |||
frappe.connect = connect | |||
def console(*data): | |||
frappe.publish_realtime("out_to_console", data, user=frappe.session.user) |
@@ -0,0 +1,40 @@ | |||
// Copyright (c) 2020, InfluxERP | |||
// For license information, please see license.txt | |||
frappe.ui.form.on('Machine Strip Request', { | |||
refresh: function(frm) { | |||
frm.set_query("stripped_serial_no", function(doc){ | |||
return{ | |||
"filters": { | |||
"item_code": doc.stripped_item_code, | |||
"delivery_document_type": '' | |||
} | |||
} | |||
}) | |||
frm.set_query("target_serial_no", function(doc){ | |||
return{ | |||
"filters": { | |||
"item_code": doc.target_item_code, | |||
"delivery_document_type": '' | |||
} | |||
} | |||
}) | |||
//Make job card button | |||
if (frm.doc.docstatus == 1){ | |||
frm.add_custom_button(__('Make Job Card'), | |||
function() { | |||
frm.events.make_job_card(); | |||
} | |||
); | |||
} | |||
}, | |||
make_job_card: function() { | |||
frappe.model.open_mapped_doc({ | |||
method: "erpnext.after_sales_services.doctype.machine_strip_request.machine_strip_request.make_job_card", | |||
frm: cur_frm | |||
}) | |||
} | |||
}); |
@@ -0,0 +1,345 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"autoname": "MSREQ.###", | |||
"beta": 0, | |||
"creation": "2020-03-26 16:21:57.534696", | |||
"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": "stripped_item_code", | |||
"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": "Stripped Machine Item Code", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Item", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "stripped_serial_no", | |||
"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": "Stripped Machine Serial No", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Serial No", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "target_item_code", | |||
"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": "Target Machine Item Code", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Item", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "target_serial_no", | |||
"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": "Target Machine Serial No", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Serial No", | |||
"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, | |||
"translatable": 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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "stripping_reason", | |||
"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": "Stripping Reason", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_items", | |||
"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": "Items to be Stripped", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "stripped_items", | |||
"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": "Stripped Items", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Machine Strip Request Item", | |||
"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, | |||
"translatable": 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": "Machine Strip Request", | |||
"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, | |||
"translatable": 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": "2020-03-26 20:00:57.771866", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Machine Strip Request", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [ | |||
{ | |||
"amend": 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": "System Manager", | |||
"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": 1, | |||
"track_seen": 0 | |||
} |
@@ -0,0 +1,43 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2020, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
from frappe.model.mapper import get_mapped_doc | |||
from frappe import _ | |||
class MachineStripRequest(Document): | |||
pass | |||
@frappe.whitelist() | |||
def make_job_card(source_name, target_doc=None, ignore_permissions=False): | |||
def postprocess(source, doc): | |||
doc.job_type = "Machine Parts Strip" | |||
doc.append('items', { | |||
"item_code": source.stripped_item_code, | |||
"requested_for": 'Serial No', | |||
"serial_number": source.stripped_serial_no | |||
}) | |||
doc.append('items', { | |||
"item_code": source.target_item_code, | |||
"requested_for": 'Serial No', | |||
"serial_number": source.target_serial_no | |||
}) | |||
description = 'Parts strip job from {} {} to {} {} for items: \n'.format(source.stripped_item_code, source.stripped_serial_no, source.target_item_code, source.target_serial_no) | |||
for item in source.stripped_items: | |||
description += '{} {} {} \n'.format(item.item, item.qty, item.uom) | |||
doc.job_description = description | |||
docs = get_mapped_doc("Machine Strip Request", source_name, { | |||
"Machine Strip Request": { | |||
"doctype": "Job Card", | |||
"field_map": { | |||
"name": "machine_strip_request" | |||
}, | |||
} | |||
}, target_doc, postprocess, ignore_permissions=ignore_permissions) | |||
return docs |
@@ -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: Machine Strip Request", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Machine Strip Request | |||
() => frappe.tests.make('Machine Strip Request', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2020, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
class TestMachineStripRequest(unittest.TestCase): | |||
pass |
@@ -0,0 +1,168 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"beta": 0, | |||
"creation": "2020-03-26 17:19:39.031613", | |||
"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": "item", | |||
"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": "Item", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Item", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "item_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": "Item Name", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "item.item_name", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "uom", | |||
"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": "UOM", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "item.stock_uom", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "qty", | |||
"fieldtype": "Float", | |||
"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": "Quantity", | |||
"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, | |||
"translatable": 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": "2020-03-26 17:19:39.031613", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Machine Strip Request Item", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [], | |||
"quick_entry": 0, | |||
"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 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2020, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class MachineStripRequestItem(Document): | |||
pass |
@@ -0,0 +1,8 @@ | |||
// Copyright (c) 2018, InfluxERP | |||
// For license information, please see license.txt | |||
frappe.ui.form.on('Maintenance Schedule', { | |||
refresh: function(frm) { | |||
} | |||
}); |
@@ -0,0 +1,826 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"autoname": "naming_series:", | |||
"beta": 0, | |||
"creation": "2013-01-10 16:34:30", | |||
"custom": 0, | |||
"docstatus": 0, | |||
"doctype": "DocType", | |||
"document_type": "Document", | |||
"editable_grid": 0, | |||
"fields": [ | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "customer_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": "", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldtype": "Section Break", | |||
"options": "fa fa-user", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"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": 1, | |||
"options": "MS", | |||
"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": 1, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"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": 0, | |||
"in_standard_filter": 1, | |||
"label": "Customer", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "customer", | |||
"oldfieldtype": "Link", | |||
"options": "Customer", | |||
"permlevel": 0, | |||
"print_hide": 1, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 1, | |||
"set_only_once": 0, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "column_break0", | |||
"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, | |||
"oldfieldtype": "Column Break", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"default": "Draft", | |||
"fieldname": "status", | |||
"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": 1, | |||
"label": "Status", | |||
"length": 0, | |||
"no_copy": 1, | |||
"oldfieldname": "status", | |||
"oldfieldtype": "Select", | |||
"options": "\nDraft\nSubmitted\nCancelled", | |||
"permlevel": 0, | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 1, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "transaction_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": "Transaction Date", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "transaction_date", | |||
"oldfieldtype": "Date", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "items_section", | |||
"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": "", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldtype": "Section Break", | |||
"options": "fa fa-shopping-cart", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "items", | |||
"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": "Items", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "item_maintenance_detail", | |||
"oldfieldtype": "Table", | |||
"options": "Maintenance Schedule Item", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "schedule", | |||
"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": "Schedule", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldtype": "Section Break", | |||
"options": "fa fa-time", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "generate_schedule", | |||
"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": "Generate Schedule", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldtype": "Button", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "schedules", | |||
"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": "Schedules", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "schedules", | |||
"oldfieldtype": "Table", | |||
"options": "Maintenance Schedule Detail", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "contact_info", | |||
"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": "Contact Info", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 1, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"depends_on": "customer", | |||
"fieldname": "customer_name", | |||
"fieldtype": "Data", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Customer Name", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "customer_name", | |||
"oldfieldtype": "Data", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"depends_on": "customer", | |||
"fieldname": "contact_person", | |||
"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": "Contact Person", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Contact", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"depends_on": "customer", | |||
"fieldname": "contact_mobile", | |||
"fieldtype": "Data", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Mobile No", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"depends_on": "customer", | |||
"fieldname": "contact_email", | |||
"fieldtype": "Data", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Contact Email", | |||
"length": 0, | |||
"no_copy": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "contact_display", | |||
"fieldtype": "Small Text", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Contact", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "column_break_17", | |||
"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, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"depends_on": "customer", | |||
"fieldname": "customer_address", | |||
"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": "Customer Address", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Address", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "address_display", | |||
"fieldtype": "Small Text", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Address", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"depends_on": "customer", | |||
"description": "", | |||
"fieldname": "territory", | |||
"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": "Territory", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "territory", | |||
"oldfieldtype": "Link", | |||
"options": "Territory", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"depends_on": "customer", | |||
"description": "", | |||
"fieldname": "customer_group", | |||
"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": "Customer Group", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Customer Group", | |||
"permlevel": 0, | |||
"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, | |||
"translatable": 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, | |||
"oldfieldname": "company", | |||
"oldfieldtype": "Link", | |||
"options": "Company", | |||
"permlevel": 0, | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 1, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"translatable": 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": "Maintenance Schedule", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
} | |||
], | |||
"has_web_view": 0, | |||
"hide_heading": 0, | |||
"hide_toolbar": 0, | |||
"icon": "fa fa-calendar", | |||
"idx": 1, | |||
"image_view": 0, | |||
"in_create": 0, | |||
"is_submittable": 1, | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2018-06-27 14:59:15.629203", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Maintenance Schedule", | |||
"owner": "Administrator", | |||
"permissions": [ | |||
{ | |||
"amend": 1, | |||
"cancel": 1, | |||
"create": 1, | |||
"delete": 1, | |||
"email": 1, | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
"report": 1, | |||
"role": "Maintenance Manager", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 1, | |||
"write": 1 | |||
} | |||
], | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"search_fields": "status,customer,customer_name", | |||
"show_name_in_global_search": 0, | |||
"sort_order": "DESC", | |||
"timeline_field": "customer", | |||
"track_changes": 0, | |||
"track_seen": 0 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class MaintenanceSchedule(Document): | |||
pass |
@@ -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: Maintenance Schedule", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Maintenance Schedule | |||
() => frappe.tests.make('Maintenance Schedule', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
class TestMaintenanceSchedule(unittest.TestCase): | |||
pass |
@@ -0,0 +1,32 @@ | |||
# installation_note_dashboard.py | |||
from frappe import _ | |||
def get_data(): | |||
return { | |||
'fieldname': 'installation_note_dashboard', | |||
'non_standard_fieldnames': { | |||
'Delivery Note': 'against_sales_invoice', | |||
'Journal Entry': 'reference_name', | |||
'Payment Entry': 'reference_name', | |||
'Payment Request': 'reference_name', | |||
'Auto Repeat': 'reference_document', | |||
}, | |||
'internal_links': { | |||
'Sales Invoice': ['readings', 'sales_invoice'], | |||
'Sales Order': ['items', 'sales_order'] | |||
}, | |||
'transactions': [ | |||
{ | |||
'label': _('Reference'), | |||
'items': ['Sales Invoice', 'Delivery Note', 'Sales Order'] | |||
}, | |||
{ | |||
'label': _('Payment'), | |||
'items': ['Payment Entry', 'Payment Request', 'Journal Entry'] | |||
}, | |||
{ | |||
'label': _('Subscription'), | |||
'items': ['Auto Repeat'] | |||
}, | |||
] | |||
} |
@@ -0,0 +1,81 @@ | |||
// Copyright (c) 2018, InfluxERP | |||
// For license information, please see license.txt | |||
var data = sessionStorage.getItem("item_code_stored_predelivery"); | |||
var data2 = sessionStorage.getItem("serial_stored_predelivery"); | |||
frappe.ui.form.on('Pre Delivery Inspection', { | |||
refresh: function(frm) { | |||
//console.log(cur_frm) | |||
//console.log(data); | |||
if (!frm.doc.item_code) { | |||
frm.set_value("item_code", data); | |||
} | |||
if (!frm.doc.item_serial_no) { | |||
frm.set_value("item_serial_no", data2); | |||
} | |||
/*frm.set_value("quality_inspection_template", data); | |||
frappe.after_ajax(function(){ | |||
frm.events.quality_inspection_template(frm); | |||
});*/ | |||
frm.events.load_delivery_note(frm); | |||
}, | |||
item_code: function(frm) { | |||
if (frm.doc.item_code && frm.doc.item_code != '') { | |||
frappe.model.with_doc("Sales Invoice", frm.doc.sales_invoice_ref, function(){ | |||
var ref_doc = frappe.get_doc("Sales Invoice", frm.doc.sales_invoice_ref); | |||
//console.log(ref_doc); | |||
if (ref_doc.items && ref_doc.items.length > 0) { | |||
ref_doc.items.forEach(function(row){ | |||
if(row.item_code == data){ | |||
frm.doc.item_name = row.item_name; | |||
frm.doc.description = row.description; | |||
frm.doc.batch_no = row.batch_no; | |||
frm.set_value("quality_inspection_template", row.item_code); | |||
//frm.doc.quality_inspection_template = row.item_code; | |||
} | |||
}) | |||
} | |||
}); | |||
} | |||
frappe.after_ajax(function(){ | |||
frm.refresh_field("item_name") | |||
frm.refresh_field("description") | |||
frm.refresh_field("batch_no") | |||
frm.events.quality_inspection_template(frm); | |||
}) | |||
}, | |||
quality_inspection_template: function(frm){ | |||
if(frm.doc.quality_inspection_template){ | |||
frappe.model.with_doc("Pre Delivery Inspection Template", frm.doc.quality_inspection_template, function(){ | |||
var ref_doc = frappe.get_doc("Pre Delivery Inspection Template", frm.doc.quality_inspection_template); | |||
if(ref_doc && ref_doc.item_quality_inspection_parameter){ | |||
frm.clear_table("readings"); | |||
ref_doc.item_quality_inspection_parameter.forEach(function(row){ | |||
var new_row = frm.add_child("readings"); | |||
new_row.specification = row.specification; | |||
}) | |||
} | |||
}); | |||
frappe.after_ajax(function(){ | |||
frm.refresh_field('readings'); | |||
}) | |||
} | |||
}, | |||
load_delivery_note: function(frm){ | |||
if(frm.fields_dict['dashboard_links_html'] && "dashboard_links_html" in frm.doc.__onload) { | |||
frm.fields_dict['dashboard_links_html'].wrapper.innerHTML = frm.doc.__onload.dashboard_links_html.display; | |||
} | |||
}, | |||
}); |
@@ -0,0 +1,41 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
from frappe import _, msgprint, throw | |||
import json | |||
class PreDeliveryInspection(Document): | |||
def onload(self): | |||
""" Load delivery Note link """ | |||
dashboard_links_html = self.load_delivery_note() | |||
self.set_onload("dashboard_links_html", {"display": dashboard_links_html}) | |||
def load_delivery_note(self): | |||
delivery_note_links = [] | |||
delivery_note_links = frappe.db.sql(""" | |||
SELECT | |||
tdni.item_code, | |||
tdni.parent, | |||
tdni.serial_no, | |||
tdni.against_sales_invoice, | |||
tip.name As installation | |||
FROM | |||
(`tabDelivery Note Item` tdni) | |||
LEFT JOIN | |||
(`tabInstallation Note` tip) | |||
ON tdni.parent = tip.delivery_note | |||
where | |||
tdni.against_sales_invoice = %(inv)s | |||
AND | |||
tdni.item_code = %(item)s | |||
AND | |||
tdni.serial_no = %(serial)s | |||
""",{'inv':self.reference_name, 'item':self.item_code, 'serial':self.item_serial_no}, as_dict=True) | |||
self.set_onload("delivery_note_links", delivery_note_links) | |||
#frappe.msgprint(_(json.dumps(delivery_note_links))) | |||
return frappe.render_template("templates/pre_delivery_links.html", {"delivery_note_links": delivery_note_links}) |
@@ -0,0 +1,12 @@ | |||
# from frappe import _ | |||
# def get_data(): | |||
# return { | |||
# 'fieldname': 'pre_delivery_inspection', | |||
# 'transactions': [ | |||
# { | |||
# 'label': _('Delivery and Installation'), | |||
# 'items': ['Delivery Note', 'Installation Note'] | |||
# }, | |||
# ] | |||
# } |
@@ -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: Pre-delivery Inspection", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Pre-delivery Inspection | |||
() => frappe.tests.make('Pre-delivery Inspection', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
class TestPredeliveryInspection(unittest.TestCase): | |||
pass |
@@ -0,0 +1,8 @@ | |||
// Copyright (c) 2018, InfluxERP | |||
// For license information, please see license.txt | |||
frappe.ui.form.on('Pre Delivery Inspection - old', { | |||
refresh: function(frm) { | |||
} | |||
}); |
@@ -0,0 +1,435 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"autoname": "PDI.####", | |||
"beta": 0, | |||
"creation": "2018-07-09 05:25:54.165592", | |||
"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": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "verified_by", | |||
"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": "Verified By", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "User", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "column_break_3", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "remarks", | |||
"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": "Overall Remarks", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_break_5", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "inspection_details", | |||
"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": "Inspection Details", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Pre Delivery Inspection Details", | |||
"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, | |||
"translatable": 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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "customer_remarks", | |||
"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": "Customer Remarks", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "column_break_9", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "heading_customer_signature", | |||
"fieldtype": "Heading", | |||
"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 Signature", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"default": "Customer Signature", | |||
"description": "Customer Signature", | |||
"fieldname": "customer_signature", | |||
"fieldtype": "Signature", | |||
"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 Signature", | |||
"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, | |||
"translatable": 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": "Pre Delivery Inspection - old", | |||
"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, | |||
"translatable": 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": "2018-07-25 18:38:22.390447", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Pre Delivery Inspection - old", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [ | |||
{ | |||
"amend": 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": "System Manager", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 1, | |||
"write": 1 | |||
} | |||
], | |||
"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 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class PreDeliveryInspectionOld(Document): | |||
pass |
@@ -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: Pre Delivery Inspection - old", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Pre Delivery Inspection - old | |||
() => frappe.tests.make('Pre Delivery Inspection - old', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
class TestPreDeliveryInspectionOld(unittest.TestCase): | |||
pass |
@@ -0,0 +1,199 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"beta": 0, | |||
"creation": "2018-07-09 17:56:13.244299", | |||
"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": "item_code", | |||
"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": "Item Code", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Item", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "serial_no", | |||
"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": "Serial 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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "checked_parameter", | |||
"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": "Checked Parameter", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "sales_invoice", | |||
"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": "Sales Invoice", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Sales Invoice", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "sales_order", | |||
"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": "Sales Order", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Sales Order", | |||
"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, | |||
"translatable": 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": "2018-07-26 10:30:02.581501", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Pre Delivery Inspection Details", | |||
"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 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class PreDeliveryInspectionDetails(Document): | |||
pass |
@@ -0,0 +1,8 @@ | |||
// Copyright (c) 2018, InfluxERP | |||
// For license information, please see license.txt | |||
frappe.ui.form.on('Pre Delivery Inspection Old', { | |||
refresh: function(frm) { | |||
} | |||
}); |
@@ -0,0 +1,435 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"autoname": "PDI.####", | |||
"beta": 0, | |||
"creation": "2018-07-09 05:25:54.165592", | |||
"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": 0, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "verified_by", | |||
"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": "Verified By", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "User", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "column_break_3", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "remarks", | |||
"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": "Overall Remarks", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_break_5", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "inspection_details", | |||
"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": "Inspection Details", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Pre Delivery Inspection Details", | |||
"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, | |||
"translatable": 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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "customer_remarks", | |||
"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": "Customer Remarks", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "column_break_9", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "heading_customer_signature", | |||
"fieldtype": "Heading", | |||
"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 Signature", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"default": "Customer Signature", | |||
"description": "Customer Signature", | |||
"fieldname": "customer_signature", | |||
"fieldtype": "Signature", | |||
"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 Signature", | |||
"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, | |||
"translatable": 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": "Pre Delivery Inspection Old", | |||
"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, | |||
"translatable": 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": "2018-07-25 18:39:13.934350", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Pre Delivery Inspection Old", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [ | |||
{ | |||
"amend": 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": "System Manager", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 1, | |||
"write": 1 | |||
} | |||
], | |||
"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 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class PreDeliveryInspectionOld(Document): | |||
pass |
@@ -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: Pre Delivery Inspection Old", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Pre Delivery Inspection Old | |||
() => frappe.tests.make('Pre Delivery Inspection Old', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
class TestPreDeliveryInspectionOld(unittest.TestCase): | |||
pass |
@@ -0,0 +1,270 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"autoname": "hash", | |||
"beta": 0, | |||
"creation": "2018-07-25 18:45:21.438389", | |||
"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": "specification", | |||
"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": "Parameter", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "specification", | |||
"oldfieldtype": "Data", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "value", | |||
"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": "Acceptance Criteria", | |||
"length": 0, | |||
"no_copy": 0, | |||
"oldfieldname": "value", | |||
"oldfieldtype": "Data", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"default": "Accepted", | |||
"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, | |||
"oldfieldname": "status", | |||
"oldfieldtype": "Select", | |||
"options": "Accepted\nRejected", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "sales_invoice", | |||
"fieldtype": "Link", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Sales Invoice", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Sales Invoice", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "sales_order", | |||
"fieldtype": "Link", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Sales Order", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Sales Order", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "sales_invoice_item", | |||
"fieldtype": "Data", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Sales Invoice Item", | |||
"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": 0, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "sales_order_item", | |||
"fieldtype": "Data", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Sales Order Item", | |||
"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, | |||
"translatable": 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": "2018-07-26 16:42:28.475938", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Pre Delivery Inspection Reading", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [], | |||
"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 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class PreDeliveryInspectionReading(Document): | |||
pass |
@@ -0,0 +1,8 @@ | |||
// Copyright (c) 2018, InfluxERP | |||
// For license information, please see license.txt | |||
frappe.ui.form.on('Pre Delivery Inspection Template', { | |||
refresh: function(frm) { | |||
} | |||
}); |
@@ -0,0 +1,182 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 1, | |||
"allow_rename": 1, | |||
"autoname": "field:quality_inspection_template_name", | |||
"beta": 0, | |||
"creation": "2018-07-25 18:44:06.024204", | |||
"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": "quality_inspection_template_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": "Quality Inspection Template Name", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "item_quality_inspection_parameter", | |||
"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": "Item Quality Inspection Parameter", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Item Quality Inspection Parameter", | |||
"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, | |||
"translatable": 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": 0, | |||
"max_attachments": 0, | |||
"modified": "2018-07-25 18:50:06.701732", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Pre Delivery Inspection Template", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [ | |||
{ | |||
"amend": 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": "System Manager", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"write": 1 | |||
}, | |||
{ | |||
"amend": 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": "Stock User", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"write": 1 | |||
}, | |||
{ | |||
"amend": 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": "Quality Manager", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"write": 1 | |||
}, | |||
{ | |||
"amend": 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": "Manufacturing User", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"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": 1, | |||
"track_seen": 0 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class PreDeliveryInspectionTemplate(Document): | |||
pass |
@@ -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: Pre Delivery Inspection Template", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Pre Delivery Inspection Template | |||
() => frappe.tests.make('Pre Delivery Inspection Template', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
class TestPreDeliveryInspectionTemplate(unittest.TestCase): | |||
pass |
@@ -0,0 +1,317 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"beta": 0, | |||
"creation": "2017-04-25 14:10:41.177611", | |||
"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, | |||
"default": "Pastel", | |||
"fieldname": "accounting_system", | |||
"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": "Accounting System", | |||
"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": "amount", | |||
"fieldtype": "Float", | |||
"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": "Amount", | |||
"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": "currency", | |||
"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": "Currency", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Currency", | |||
"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": "date_of_payment", | |||
"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 of Payment", | |||
"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": "reference_no", | |||
"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": "Reference 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": "paid_to", | |||
"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": "Paid To", | |||
"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": "payment_method", | |||
"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": "Payment Method", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "\nCash\nCheque\nBank Transfer", | |||
"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": "payment_account", | |||
"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": "Payment Account", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "\nCRDB\nBank M\nStanbic Bank\nEco Bank\nPetty Cash Fund\nM-Pesa\nInter Africa\nYash International (Fuel Account)\nMount Meru (Fuel Account)\nPetcom (Fuel Account)\nVital Oil (Fuel Account)", | |||
"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, | |||
"default": "new", | |||
"fieldname": "status", | |||
"fieldtype": "Data", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Status", | |||
"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-07-14 10:59:00.661721", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Reference Payment Table", | |||
"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 | |||
} |
@@ -0,0 +1,48 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2015, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class ReferencePaymentTable(Document): | |||
pass | |||
def update_child_table(self, fieldname, df=None): | |||
'''Updated function to prevent saving of approved or rejected funds request''' | |||
'''sync child table for given fieldname''' | |||
rows = [] | |||
if not df: | |||
df = self.meta.get_field(fieldname) | |||
for d in self.get(df.fieldname): | |||
if df.fieldname in ["requested_funds", "main_requested_funds", "return_requested_funds"]: | |||
if d.get("request_status") not in ["Approved", "Rejected"]: | |||
d.db_update() | |||
else: | |||
d.db_update() | |||
rows.append(d.name) | |||
if df.options in (self.flags.ignore_children_type or []): | |||
# do not delete rows for this because of flags | |||
# hack for docperm :( | |||
return | |||
if rows: | |||
# select rows that do not match the ones in the document | |||
deleted_rows = frappe.db.sql("""select name from `tab{0}` where parent=%s | |||
and parenttype=%s and parentfield=%s | |||
and name not in ({1})""".format(df.options, ','.join(['%s'] * len(rows))), | |||
[self.name, self.doctype, fieldname] + rows) | |||
if len(deleted_rows) > 0: | |||
# delete rows that do not match the ones in the document | |||
frappe.db.sql("""delete from `tab{0}` where name in ({1})""".format(df.options, | |||
','.join(['%s'] * len(deleted_rows))), tuple(row[0] for row in deleted_rows)) | |||
else: | |||
# no rows found, delete all rows | |||
frappe.db.sql("""delete from `tab{0}` where parent=%s | |||
and parenttype=%s and parentfield=%s""".format(df.options), | |||
(self.name, self.doctype, fieldname)) |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class RequestedFundsAccountsTable(Document): | |||
pass |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class RequestedFundsDetails(Document): | |||
pass |
@@ -0,0 +1,611 @@ | |||
// Copyright (c) 2016, InfluxERP | |||
// For license information, please see license.txt | |||
//<button class="btn btn-default btn-xs" data-fieldtype="Button" data-fieldname="button_reject2" placeholder="" data-doctype="Requested Payments" value="">Reject-custom</button> | |||
frappe.ui.form.on('Requested Payments', { | |||
onload: function(frm){ | |||
//Load the approve and reject buttons | |||
var html = '<button style="background-color: green; color: #FFF;" class="btn btn-default btn-xs" onclick="cur_frm.cscript.approve_request(\'' + frm + '\');">Approve</button> '; | |||
html += '<button style="background-color: red; color: #FFF;" class="btn btn-default btn-xs" onclick="cur_frm.cscript.reject_request(\'' + frm + '\');">Reject</button>' | |||
$(frm.fields_dict.html1.wrapper).html(html); | |||
//Load the recommend and recommend against buttons | |||
var html2 = '<button style="background-color: green; color: #FFF;" class="btn btn-default btn-xs" onclick="cur_frm.cscript.recommend_request(\'' + frm + '\');">Recommend</button> '; | |||
html2 += '<button style="background-color: red; color: #FFF;" class="btn btn-default btn-xs" onclick="cur_frm.cscript.recommend_against_request(\'' + frm + '\');">Recommend Against</button>' | |||
$(frm.fields_dict.html2.wrapper).html(html2); | |||
//Load the accounts approval buttons | |||
var html3 = '<button style="background-color: green; color: #FFF;" class="btn btn-default btn-xs" onclick="cur_frm.cscript.accounts_approval(\'' + frm + '\');">Approve</button> '; | |||
html3 += '<button style="background-color: red; color: #FFF;" class="btn btn-default btn-xs" onclick="cur_frm.cscript.accounts_cancel(\'' + frm + '\');">Cancel</button>' | |||
$(frm.fields_dict.account_approval_buttons.wrapper).html(html3); | |||
//cur_frm.disable_save(); | |||
frappe.after_ajax(function(){ | |||
frm.events.show_hide_sections(frm); | |||
}); | |||
}, | |||
refresh: function(frm){ | |||
console.log(frm); | |||
//Beautify the previous approved table | |||
$(frm.wrapper).on("grid-row-render", function(e, grid_row) { | |||
if(grid_row.doc.request_status == "Approved") | |||
{ | |||
$(grid_row.columns.request_status).css({"font-weight": "bold", "color": "green"}); | |||
} | |||
else if(grid_row.doc.request_status == "Rejected") | |||
{ | |||
$(grid_row.columns.request_status).css({"font-weight": "bold", "color": "red"}); | |||
} | |||
}); | |||
frappe.after_ajax(function(){ | |||
frm.events.show_hide_sections(frm); | |||
}); | |||
//For total requested | |||
var total_request_tsh = 0; | |||
var total_request_usd = 0; | |||
var all_approved = true; | |||
cur_frm.doc.requested_funds.forEach(function(row){ | |||
if(row.request_currency == 'TZS') | |||
{ | |||
total_request_tsh += row.request_amount; | |||
} | |||
else if(row.request_currency == 'USD') | |||
{ | |||
total_request_usd += row.request_amount; | |||
} | |||
}); | |||
//If all requests have been processed, change approval status | |||
if(total_request_tsh == 0 && total_request_usd == 0 && frm.doc.approval_status != "Processed") | |||
{ | |||
frm.set_value('approval_status', 'Processed'); | |||
frm.save_or_update(); | |||
} | |||
cur_frm.get_field("request_total_amount").wrapper.innerHTML = '<p class="text-muted small">Total Amount Approved</p><b>USD ' + total_request_usd.toLocaleString() + ' <br> TZS ' + total_request_tsh.toLocaleString() + '</b>'; | |||
//For total approved | |||
var total_approved_tsh = 0; | |||
var total_approved_usd = 0; | |||
/*cur_frm.doc.previous_requested_funds.forEach(function(row){ | |||
if(row.request_status == "Approved" && row.request_currency == 'TZS') | |||
{ | |||
total_approved_tsh += row.request_amount; | |||
} | |||
else if(row.request_status == "Approved" && row.request_currency == 'USD') | |||
{ | |||
total_approved_usd += row.request_amount; | |||
} | |||
}); | |||
cur_frm.get_field("total_approved_amount").wrapper.innerHTML = '<p class="text-muted small">Total Amount Approved</p><b>USD ' + total_approved_usd.toLocaleString() + ' <br> TZS ' + total_approved_tsh.toLocaleString() + '</b>'; */ | |||
//For total paid amount | |||
var total_tsh = 0; | |||
var total_usd = 0; | |||
frm.doc.payments_reference.forEach(function(row){ | |||
if(row.currency == "TZS") | |||
{ | |||
total_tsh += row.amount; | |||
} | |||
else if(row.currency == 'USD') | |||
{ | |||
total_usd += row.amount; | |||
} | |||
}); | |||
//For payment status (If all payments have been paid, payment status == 'Paid') | |||
if(total_usd > 0 && total_tsh > 0 && total_usd >= total_approved_usd && total_tsh >= total_approved_tsh && frm.doc.payment_status != "Paid") | |||
{ | |||
frm.set_value('payment_status', "Paid"); | |||
frm.save_or_update(); | |||
} | |||
else if((total_approved_tsh > total_tsh || total_approved_usd > total_usd) && frm.doc.payment_status != "Waiting Payment") | |||
{ | |||
frm.set_value('payment_status', 'Waiting Payment'); | |||
frm.save_or_update(); | |||
} | |||
cur_frm.get_field("total_paid_amount").wrapper.innerHTML = '<p class="text-muted small">Total Amount Paid</p><b>USD ' + total_usd.toLocaleString() + ' <br> TZS ' + total_tsh.toLocaleString() + '</b>'; | |||
//Make payment button | |||
frm.add_custom_button(__('Make Payment'), | |||
function() { | |||
frm.events.make_payment(); | |||
} | |||
); | |||
frm.add_custom_button(__('Accounting Ledger'), function() { | |||
frappe.route_options = { | |||
voucher_no: frm.doc.name, | |||
company: frm.doc.company, | |||
group_by_voucher: false | |||
}; | |||
frappe.set_route("query-report", "General Ledger"); | |||
}, __("View")); | |||
}, | |||
make_payment: function() { | |||
frappe.model.open_mapped_doc({ | |||
method: "csf_tz.after_sales_services.doctype.requested_payments.requested_payments.make_payment", | |||
frm: cur_frm | |||
}) | |||
}, | |||
validate_payment: function(frm){ | |||
var to_return = true; | |||
frm.doc.payments_reference.forEach(function(row){ | |||
if(row.amount <= 0 || !row.date_of_payment || row.date_of_payment == "" || !row.reference_no || row.reference_no == "" || !row.paid_to || row.paid_to == "" || row.payment_method == "" || row.payment_account == "") | |||
{ | |||
to_return = false; | |||
} | |||
}); | |||
return to_return; | |||
}, | |||
show_hide_sections: function(frm){ | |||
frm.toggle_display(['request_total_amount', 'html1', 'html2'], (frm.doc.requested_funds.length > 0)); | |||
//frm.toggle_display('section_previous_requested_funds', (frm.doc.previous_requested_funds.length > 0)); | |||
//frm.toggle_display('section_payments_details', frm.doc.previous_requested_funds.length > 0); | |||
//frm.toggle_display('total_paid_amount', (frm.doc.previous_requested_funds.length > 0)); | |||
//frm.toggle_display(['requested_funds', 'request_total_amount', 'section_previous_requested_funds', 'total_approved_amount', 'payments_reference', 'total_paid_amount'], true); | |||
}, | |||
get_account_currency(frm, cdt, cdn, account){ | |||
if(account){ | |||
frappe.call({ | |||
'method': 'frappe.client.get_value', | |||
'args': { | |||
'doctype': 'Account', | |||
'filters': { | |||
'name': account | |||
}, | |||
'fieldname':'account_currency' | |||
}, | |||
'callback': function(res){ | |||
return res.message.account_currency; | |||
} | |||
}); | |||
} | |||
} | |||
}); | |||
frappe.ui.form.on('Requested Funds Accounts Table', { | |||
form_render: function(frm, cdt, cdn){ | |||
frappe.call({ | |||
'method': 'frappe.client.get_value', | |||
'args': { | |||
'doctype': 'Company', | |||
'filters': { | |||
name: frm.doc.company | |||
}, | |||
'fieldname':'cost_center' | |||
}, | |||
'callback': function(r){ | |||
frappe.model.set_value(cdt, cdn, 'cost_center', r.message.cost_center); | |||
} | |||
}); | |||
if(!locals[cdt][cdn].posting_date){ | |||
frappe.model.set_value(cdt, cdn, 'posting_date', frappe.datetime.get_today()); | |||
} | |||
if(locals[cdt][cdn].conversion_rate == 0){ | |||
frappe.model.set_value(cdt, cdn, 'conversion_rate', 1); | |||
} | |||
}, | |||
expense_type: function(frm, cdt, cdn){ | |||
frappe.call({ | |||
method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim_account", | |||
args: { | |||
"expense_claim_type": locals[cdt][cdn].expense_type, | |||
"company": frm.doc.company | |||
}, | |||
callback: function(r) { | |||
if (r.message) { | |||
locals[cdt][cdn].expense_account = r.message.account; | |||
if(r.message.account){ | |||
frappe.model.set_value(cdt, cdn, 'expense_account_currency', frm.events.get_account_currency(frm, cdt, cdn, r.message.account)); | |||
} | |||
} | |||
} | |||
}); | |||
}, | |||
expense_account: function(frm, cdt, cdn){ | |||
if(locals[cdt][cdn].expense_account){ | |||
var expense_account_currency = frm.events.get_account_currency(frm, cdt, cdn, locals[cdt][cdn].expense_account); | |||
if(expense_account_currency){ | |||
frappe.model.set_value(cdt, cdn, 'expense_account_currency', expense_account_currency); | |||
} | |||
} | |||
}, | |||
payable_account: function(frm, cdt, cdn){ | |||
if(locals[cdt][cdn].payable_account){ | |||
var payable_account_currency = frm.events.get_account_currency(frm, cdt, cdn, locals[cdt][cdn].payable_account); | |||
if(payable_account_currency){ | |||
frappe.model.set_value(cdt, cdn, 'payable_account_currency', payable_account_currency); | |||
} | |||
} | |||
} | |||
}); | |||
frappe.ui.form.on('Requested Payments', { | |||
form_render: function(frm, cdt, cdn){ | |||
if(locals[cdt][cdn].status == ""){ | |||
} | |||
} | |||
}); | |||
//For recommend button | |||
cur_frm.cscript.recommend_request = function(frm){ | |||
var selected = cur_frm.get_selected(); | |||
if(selected['requested_funds']) | |||
{ | |||
frappe.confirm( | |||
'Confirm: Recommend selected requests?', | |||
function(){ | |||
$.each(selected['requested_funds'], function(index, value){ | |||
frappe.call({ | |||
method: "csf_tz.after_sales_services.doctype.requested_payments.requested_payments.recommend_request", | |||
freeze: true, | |||
args: { | |||
request_doctype: "Requested Funds Details", | |||
request_docname: value, | |||
user: frappe.user.full_name() | |||
}, | |||
callback: function(data){ | |||
//alert(JSON.stringify(data)); | |||
} | |||
}); | |||
}); | |||
location.reload(); | |||
}, | |||
function(){ | |||
//Do nothing | |||
} | |||
); | |||
} | |||
else | |||
{ | |||
show_alert("Error: Please select requests to process."); | |||
} | |||
} | |||
//For recommend against button | |||
cur_frm.cscript.recommend_against_request = function(frm){ | |||
var selected = cur_frm.get_selected(); | |||
if(selected['requested_funds']) | |||
{ | |||
frappe.confirm( | |||
'Confirm: Recommend against the selected requests?', | |||
function(){ | |||
$.each(selected['requested_funds'], function(index, value){ | |||
frappe.call({ | |||
method: "erpnext.accounts.doctype.requested_payments.requested_payments.recommend_against_request", | |||
freeze: true, | |||
args: { | |||
request_doctype: "Requested Funds Details", | |||
request_docname: value, | |||
user: frappe.user.full_name() | |||
}, | |||
callback: function(data){ | |||
//alert(JSON.stringify(data)); | |||
} | |||
}); | |||
}); | |||
location.reload(); | |||
}, | |||
function(){ | |||
//Do nothing | |||
} | |||
); | |||
} | |||
else | |||
{ | |||
show_alert("Error: Please select requests to process."); | |||
} | |||
} | |||
//For approve button | |||
cur_frm.cscript.approve_request = function(frm){ | |||
var selected = cur_frm.get_selected(); | |||
if(selected['requested_funds']) | |||
{ | |||
frappe.confirm( | |||
'Confirm: Approve selected requests?', | |||
function(){ | |||
$.each(selected['requested_funds'], function(index, value){ | |||
frappe.call({ | |||
method: "csf_tz.after_sales_services.doctype.requested_payments.requested_payments.approve_request", | |||
freeze: true, | |||
args: { | |||
request_doctype: "Requested Funds Details", | |||
request_docname: value, | |||
user: frappe.user.full_name() | |||
}, | |||
callback: function(data){ | |||
//alert(JSON.stringify(data)); | |||
} | |||
}); | |||
}); | |||
location.reload(); | |||
}, | |||
function(){ | |||
//Do nothing | |||
} | |||
); | |||
} | |||
else | |||
{ | |||
show_alert("Error: Please select requests to process."); | |||
} | |||
} | |||
//For reject button | |||
cur_frm.cscript.reject_request = function(frm){ | |||
//cur_frm.cscript.populate_child(cur_frm.doc.reference_doctype, cur_frm.doc.reference_docname); | |||
var selected = cur_frm.get_selected(); | |||
if(selected['requested_funds']) | |||
{ | |||
frappe.confirm( | |||
'Confirm: Reject selected requests?', | |||
function(){ | |||
$.each(selected['requested_funds'], function(index, value){ | |||
frappe.call({ | |||
method: "csf_tz.after_sales_services.doctype.requested_payments.requested_payments.reject_request", | |||
freeze: true, | |||
args: { | |||
request_doctype: "Requested Funds Details", | |||
request_docname: value, | |||
user: frappe.user.full_name() | |||
}, | |||
callback: function(data){ | |||
//alert(JSON.stringify(data)); | |||
} | |||
}); | |||
}); | |||
location.reload(); | |||
}, | |||
function(){ | |||
//Do nothing | |||
} | |||
); | |||
} | |||
else | |||
{ | |||
show_alert("Error: Please select requests to process."); | |||
} | |||
} | |||
//For accounts approval | |||
cur_frm.cscript.accounts_approval = function(frm){ | |||
var selected = cur_frm.get_selected(); | |||
if(selected['accounts_approval']) | |||
{ | |||
frappe.confirm( | |||
'Confirm: Approve selected requests?', | |||
function(){ | |||
$.each(selected['accounts_approval'], function(index, value){ | |||
frappe.call({ | |||
method: "csf_tz.after_sales_services.doctype.requested_payments.requested_payments.accounts_approval", | |||
freeze: true, | |||
args: { | |||
request_doctype: "Requested Funds Accounts Table", | |||
request_docname: value, | |||
parent_doctype: cur_frm.doctype, | |||
parent_docname: cur_frm.docname, | |||
local: locals['Requested Funds Accounts Table'][value], | |||
reference: locals['Requested Funds Accounts Table'][value].reference, | |||
user: frappe.user.full_name() | |||
}, | |||
callback: function(data){ | |||
console.log(JSON.stringify(data)); | |||
} | |||
}); | |||
}); | |||
frappe.after_ajax(function(){ | |||
cur_frm.reload_doc(); | |||
}) | |||
}, | |||
function(){ | |||
//Do nothing | |||
} | |||
); | |||
} | |||
else | |||
{ | |||
show_alert("Error: Please select requests to process."); | |||
} | |||
} | |||
//For accounts cancel | |||
cur_frm.cscript.accounts_cancel = function(frm){ | |||
var selected = cur_frm.get_selected(); | |||
var reload = false; | |||
if(selected['accounts_approval']) | |||
{ | |||
frappe.confirm( | |||
'Confirm: Cancel selected requests?', | |||
function(){ | |||
$.each(selected['accounts_approval'], function(index, value){ | |||
reload = false; | |||
frappe.call({ | |||
method: "csf_tz.after_sales_services.doctype.requested_payments.requested_payments.accounts_cancel", | |||
freeze: true, | |||
args: { | |||
request_doctype: "Requested Funds Accounts Table", | |||
request_docname: value, | |||
parent_doctype: cur_frm.doctype, | |||
parent_docname: cur_frm.docname, | |||
local: locals['Requested Funds Accounts Table'][value], | |||
reference: locals['Requested Funds Accounts Table'][value].reference, | |||
user: frappe.user.full_name() | |||
}, | |||
callback: function(data){ | |||
console.log(data.message); | |||
} | |||
}); | |||
}); | |||
location.reload(); | |||
}, | |||
function(){ | |||
//Do nothing | |||
} | |||
); | |||
} | |||
else | |||
{ | |||
show_alert("Error: Please select requests to process."); | |||
} | |||
} | |||
cur_frm.cscript.populate_child = function(reference_doctype, reference_docname){ | |||
frappe.model.with_doc(reference_doctype, reference_docname, function(){ | |||
var request_total_amount_tsh = 0; | |||
var request_total_amount_usd = 0; | |||
var reference_doc = frappe.get_doc(reference_doctype, reference_docname); | |||
//If its requested from vehicle trip, there is main and return requested funds | |||
if('Vehicle Trip' == reference_doctype) | |||
{ | |||
//For main trip | |||
reference_doc.main_requested_funds.forEach(function(row){ | |||
//if(row.request_hidden_status == "0") | |||
if(row.request_status != "Approved" && row.request_status != "Rejected") | |||
{ | |||
var new_row = cur_frm.add_child("requested_funds"); | |||
new_row.name = row.name; | |||
new_row.request_date = row.request_date; | |||
new_row.request_amount = row.request_amount; | |||
new_row.request_currency = row.request_currency; | |||
new_row.request_description = row.request_description; | |||
new_row.request_comment = row.request_comment; | |||
new_row.request_status = row.request_status; | |||
if(row.request_currency == 'TZS') | |||
{ | |||
request_total_amount_tsh += row.request_amount; | |||
} | |||
else if(row.request_currency == 'USD') | |||
{ | |||
request_total_amount_usd += row.request_amount; | |||
} | |||
cur_frm.refresh_field("requested_funds"); | |||
} | |||
else{ | |||
console.log("Executing"); | |||
var new_row = cur_frm.add_child("previous_requested_funds"); | |||
new_row.name = row.name; | |||
new_row.request_date = row.request_date; | |||
new_row.request_amount = row.request_amount; | |||
new_row.request_currency = row.request_currency; | |||
new_row.request_description = row.request_description; | |||
new_row.request_comment = row.request_comment; | |||
new_row.request_status = row.request_status; | |||
cur_frm.refresh_field("previous_requested_funds"); | |||
} | |||
}); | |||
//For return trip | |||
reference_doc.return_requested_funds.forEach(function(row){ | |||
//if(row.request_hidden_status == "0") | |||
if(row.request_status != "Approved" && row.request_status != "Rejected") | |||
{ | |||
var new_row = cur_frm.add_child("requested_funds"); | |||
new_row.name = row.name; | |||
new_row.request_date = row.request_date; | |||
new_row.request_amount = row.request_amount; | |||
new_row.request_currency = row.request_currency; | |||
new_row.request_description = row.request_description; | |||
new_row.request_comment = row.request_comment; | |||
new_row.request_status = row.request_status; | |||
if(row.request_currency == 'TZS') | |||
{ | |||
request_total_amount_tsh += row.request_amount; | |||
} | |||
else if(row.request_currency == 'USD') | |||
{ | |||
request_total_amount_usd += row.request_amount; | |||
} | |||
cur_frm.refresh_field("requested_funds"); | |||
} | |||
else{ | |||
var new_row = cur_frm.add_child("previous_requested_funds"); | |||
new_row.name = row.name; | |||
new_row.request_date = row.request_date; | |||
new_row.request_amount = row.request_amount; | |||
new_row.request_currency = row.request_currency; | |||
new_row.request_description = row.request_description; | |||
new_row.request_comment = row.request_comment; | |||
new_row.request_status = row.request_status; | |||
cur_frm.refresh_field("previous_requested_funds"); | |||
} | |||
}); | |||
} | |||
else | |||
{ | |||
reference_doc.requested_funds.forEach(function(row){ | |||
//if(row.request_hidden_status == "0") | |||
if(row.request_status != "Approved" && row.request_status != "Rejected") | |||
{ | |||
var new_row = cur_frm.add_child("requested_funds"); | |||
new_row.name = row.name; | |||
new_row.request_date = row.request_date; | |||
new_row.request_amount = row.request_amount; | |||
new_row.request_currency = row.request_currency; | |||
new_row.request_description = row.request_description; | |||
new_row.request_comment = row.request_comment; | |||
new_row.request_status = row.request_status; | |||
if(row.request_currency == 'TZS') | |||
{ | |||
request_total_amount_tsh += row.request_amount; | |||
} | |||
else if(row.request_currency == 'USD') | |||
{ | |||
request_total_amount_usd += row.request_amount; | |||
} | |||
cur_frm.refresh_field("requested_funds"); | |||
} | |||
else{ | |||
var new_row = cur_frm.add_child("previous_requested_funds"); | |||
new_row.name = row.name; | |||
new_row.request_date = row.request_date; | |||
new_row.request_amount = row.request_amount; | |||
new_row.request_currency = row.request_currency; | |||
new_row.request_description = row.request_description; | |||
new_row.request_comment = row.request_comment; | |||
new_row.request_status = row.request_status; | |||
cur_frm.refresh_field("previous_requested_funds"); | |||
} | |||
}); | |||
} | |||
if(request_total_amount_tsh != 0 || request_total_amount_usd != 0) | |||
{ | |||
cur_frm.set_df_property("html1", "hidden", 0); | |||
cur_frm.set_df_property("html2", "hidden", 0); | |||
console.log(cur_frm.get_field('request_total_amount')); | |||
cur_frm.get_field("request_total_amount").$wrapper[0].innerHTML = '<p class="text-muted small">Total Requested Amount</p><b>USD ' + request_total_amount_usd + ' <br> TZS ' + request_total_amount_tsh.toLocaleString() + '</b>'; | |||
//cur_frm.refresh_field("request_total_amount"); | |||
} | |||
else | |||
{ | |||
cur_frm.set_df_property("request_total_amount", "hidden", 1); | |||
cur_frm.set_df_property("html1", "hidden", 1); | |||
cur_frm.set_df_property("html2", "hidden", 1); | |||
} | |||
}); | |||
}; |
@@ -0,0 +1,755 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"autoname": "REQ.###", | |||
"beta": 0, | |||
"creation": "2017-01-25 20:04:28.414635", | |||
"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": "request_date", | |||
"fieldtype": "Date", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"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": 0, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"description": "Requested Funds", | |||
"fieldname": "requested_funds", | |||
"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": "Requested Funds", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Requested Funds Details", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "html2", | |||
"fieldtype": "HTML", | |||
"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": "Recommendation Buttons", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 1, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "html1", | |||
"fieldtype": "HTML", | |||
"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": "Approval Buttons", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 2, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "request_total_amount", | |||
"fieldtype": "HTML", | |||
"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": "Total Requested Amount", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_previous_requested_funds", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "total_approved_amount", | |||
"fieldtype": "HTML", | |||
"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": "Total Approved Amount", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_payments_details", | |||
"fieldtype": "Section Break", | |||
"hidden": 1, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Payments 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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"description": "", | |||
"fieldname": "payments_reference", | |||
"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": "Payments Reference", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Reference Payment Table", | |||
"permlevel": 3, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "total_paid_amount", | |||
"fieldtype": "HTML", | |||
"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": "Total Paid Amount", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_accounts_approval", | |||
"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": "Accounts Approval", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "accounts_approval", | |||
"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, | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "Requested Funds Accounts Table", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "account_approval_buttons", | |||
"fieldtype": "HTML", | |||
"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": 4, | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "reference_section", | |||
"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": "References", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "reference_doctype", | |||
"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": 1, | |||
"label": "Requested From Module", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "DocType", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "reference_docname", | |||
"fieldtype": "Dynamic 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": 1, | |||
"label": "Requested From", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "reference_doctype", | |||
"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, | |||
"translatable": 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": 1, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"translatable": 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, | |||
"translatable": 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": "Requested Payments", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "approval_status", | |||
"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": 1, | |||
"label": "Approval Status", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_bulk_edit": 0, | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "payment_status", | |||
"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": 1, | |||
"label": "Payment Status", | |||
"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, | |||
"translatable": 0, | |||
"unique": 0 | |||
} | |||
], | |||
"has_web_view": 0, | |||
"hide_heading": 1, | |||
"hide_toolbar": 0, | |||
"idx": 0, | |||
"image_view": 0, | |||
"in_create": 1, | |||
"is_submittable": 0, | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2018-12-12 21:47:02.706062", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Requested Payments", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [ | |||
{ | |||
"amend": 0, | |||
"cancel": 0, | |||
"create": 1, | |||
"delete": 0, | |||
"email": 1, | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
"report": 1, | |||
"role": "Expense Approver", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"write": 1 | |||
}, | |||
{ | |||
"amend": 0, | |||
"cancel": 0, | |||
"create": 1, | |||
"delete": 0, | |||
"email": 1, | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
"report": 1, | |||
"role": "Expense Recommender", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"write": 1 | |||
}, | |||
{ | |||
"amend": 0, | |||
"cancel": 0, | |||
"create": 0, | |||
"delete": 1, | |||
"email": 1, | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 0, | |||
"permlevel": 1, | |||
"print": 1, | |||
"read": 1, | |||
"report": 1, | |||
"role": "Expense Recommender", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"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": 1, | |||
"track_seen": 0 | |||
} |
@@ -0,0 +1,516 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2015, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import time | |||
import datetime | |||
import json | |||
from frappe.model.document import Document | |||
from frappe.utils import flt, comma_or, nowdate | |||
from frappe import msgprint, _ | |||
from erpnext.accounts.general_ledger import process_gl_map, save_entries | |||
from erpnext.accounts.utils import get_fiscal_years, validate_fiscal_year, get_account_currency | |||
from erpnext.controllers.accounts_controller import set_balance_in_account_currency | |||
from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget | |||
class RequestedPayments(Document): | |||
def onload(self): | |||
pass | |||
def get_all_children(self, parenttype=None): | |||
#For getting children | |||
return self.get('payments_reference') | |||
def update_children(self): | |||
'''update child tables''' | |||
self.update_child_table('payments_reference') | |||
def load_from_db(self): | |||
"""Load document and children from database and create properties | |||
from fields""" | |||
if not getattr(self, "_metaclass", False) and self.meta.issingle: | |||
single_doc = frappe.db.get_singles_dict(self.doctype) | |||
if not single_doc: | |||
single_doc = frappe.new_doc(self.doctype).as_dict() | |||
single_doc["name"] = self.doctype | |||
del single_doc["__islocal"] | |||
super(Document, self).__init__(single_doc) | |||
self.init_valid_columns() | |||
self._fix_numeric_types() | |||
else: | |||
d = frappe.db.get_value(self.doctype, self.name, "*", as_dict=1) | |||
if not d: | |||
frappe.throw(_("{0} {1} not found").format(_(self.doctype), self.name), frappe.DoesNotExistError) | |||
super(Document, self).__init__(d) | |||
if self.name=="DocType" and self.doctype=="DocType": | |||
from frappe.model.meta import doctype_table_fields | |||
table_fields = doctype_table_fields | |||
else: | |||
table_fields = self.meta.get_table_fields() | |||
for df in table_fields: | |||
#Load details for payments already paid | |||
if df.fieldname == "payments_reference": | |||
children = frappe.db.get_values(df.options, | |||
{"parent": self.name, "parenttype": self.doctype, "parentfield": df.fieldname}, | |||
"*", as_dict=True, order_by="idx asc") | |||
if children: | |||
self.set(df.fieldname, children) | |||
else: | |||
self.set(df.fieldname, []) | |||
elif df.fieldname == "requested_funds": #Load requests which are not approved nor rejected | |||
children = frappe.db.get_values(df.options, | |||
{"parent": ["=", self.get('reference_docname')], "parenttype": ["=", self.get('reference_doctype')], "parentfield": ["in", ("requested_funds", "main_requested_funds", "return_requested_funds")], "request_status": ["in", ("open", "Requested", "Recommended")]}, | |||
"*", as_dict=True, order_by="idx asc") | |||
if children: | |||
self.set(df.fieldname, children) | |||
else: | |||
self.set(df.fieldname, []) | |||
elif df.fieldname == "accounts_approval": | |||
children = frappe.db.get_values("Requested Funds Details", | |||
{"parent": ["=", self.get('reference_docname')], "parenttype": ["=", self.get('reference_doctype')], "parentfield": ["in", ("requested_funds", "main_requested_funds", "return_requested_funds")], "request_status": ["in", ("Approved", "Rejected", "Accounts Approved", "Accounts Rejected", "Accounts Cancelled")]}, | |||
"*", as_dict=True, order_by="idx asc") | |||
if children: | |||
for child in children: | |||
child.reference = child.name | |||
self.set(df.fieldname, children) | |||
else: | |||
self.set(df.fieldname, []) | |||
# sometimes __setup__ can depend on child values, hence calling again at the end | |||
if hasattr(self, "__setup__"): | |||
self.__setup__() | |||
def get_outstanding_payments(self, account_currency): | |||
#Timestamp | |||
ts = time.time() | |||
#Initialize values | |||
total_amount = outstanding_amount = 0 | |||
due_date = datetime.datetime.now().date() | |||
requested_from = frappe.get_doc(self.reference_doctype, self.reference_docname) | |||
if self.reference_doctype == 'Vehicle Trip': | |||
for request in requested_from.main_requested_funds: | |||
if request.request_status == "Approved" and request.request_currency == account_currency: | |||
total_amount = total_amount + request.request_amount | |||
#request_date = datetime.datetime.strptime(request.request_date, '%Y-%m-%d') | |||
if request.request_date < due_date: | |||
due_date = request.request_date | |||
for request in requested_from.return_requested_funds: | |||
if request.request_status == "Approved" and request.request_currency == account_currency: | |||
total_amount = total_amount + request.request_amount | |||
if request.request_date < due_date: | |||
due_date = request.request_date | |||
else: | |||
for request in requested_from.requested_funds: | |||
if request.request_status == "Approved" and request.request_currency == account_currency: | |||
total_amount = total_amount + request.request_amount | |||
if request.request_date < due_date: | |||
due_date = request.request_date | |||
paid_amount = frappe.db.sql("""SELECT (CASE WHEN SUM(debit_in_account_currency) > 0 THEN SUM(debit_in_account_currency) ELSE 0 END) AS paid_amount | |||
FROM `tabGL Entry` WHERE debit_in_account_currency > 0 AND account_currency = %s | |||
AND voucher_type = 'Requested Payments' AND voucher = %s""", (account_currency, self.name), as_dict=True) | |||
#frappe.msgprint(paid_amount[0].paid_amount) | |||
outstanding_amount = total_amount - float(paid_amount[0].paid_amount) | |||
return frappe._dict({ | |||
"due_date": due_date, | |||
"total_amount": total_amount, | |||
"outstanding_amount": outstanding_amount, | |||
"exchange_rate": 1 | |||
}) | |||
def validate_requested_funds(doc): | |||
make_request = False | |||
open_requests = [] | |||
for requested_fund in doc.requested_funds: | |||
if requested_fund.request_status == "open": | |||
make_request = True | |||
open_requests.append(requested_fund) | |||
if make_request: | |||
args = {"reference_doctype": doc.doctype, "reference_docname": doc.name, "company": doc.company} | |||
request_status = request_funds(reference_doctype = doc.doctype, reference_docname = doc.name, company = doc.company) | |||
if request_status == "Request Inserted" or request_status == "Request Updated": | |||
for open_request in open_requests: | |||
open_request.set("request_status", "Requested") | |||
@frappe.whitelist(allow_guest=True) | |||
def request_funds(**args): | |||
args = frappe._dict(args) | |||
existing_payment_request = frappe.db.get_value("Requested Payments", | |||
{"reference_doctype": args.reference_doctype, "reference_docname": args.reference_docname}) | |||
#Timestamp | |||
ts = time.time() | |||
timestamp = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') | |||
if existing_payment_request: | |||
#Mark the request as open | |||
doc = frappe.get_doc("Requested Payments", existing_payment_request) | |||
doc.db_set("approval_status", "Waiting Approval") | |||
doc.db_set("modified", timestamp) | |||
doc.db_set("company", args.company) | |||
return "Request Updated" | |||
else: | |||
request = frappe.new_doc("Requested Payments") | |||
request.update({ | |||
"reference_doctype":args.reference_doctype, | |||
"reference_docname": args.reference_docname, | |||
"company": args.company, | |||
"approval_status": "Waiting Approval", | |||
"payment_status": "Waiting Approval" | |||
}) | |||
request.insert(ignore_permissions=True) | |||
return "Request Inserted" | |||
@frappe.whitelist(allow_guest=True) | |||
def recommend_request(**args): | |||
args = frappe._dict(args) | |||
#frappe.db.sql("UPDATE `tabRequested Funds Details` SET request_status = 'Recommended', request_hidden_status = 0 WHERE name = %s", args.request_docname) | |||
#return args.request_docname | |||
#Mark the request as open | |||
doc = frappe.get_doc("Requested Funds Details", args.request_docname) | |||
doc.db_set("request_status", "Recommended") | |||
doc.db_set("request_hidden_status", "0") | |||
doc.db_set("recommended_by", args.user) | |||
return "Request Updated" | |||
@frappe.whitelist(allow_guest=True) | |||
def recommend_against_request(**args): | |||
args = frappe._dict(args) | |||
#frappe.db.sql("UPDATE `tabRequested Funds Details` SET request_status = 'Recommended', request_hidden_status = 0 WHERE name = %s", args.request_docname) | |||
#return args.request_docname | |||
#Mark the request as open | |||
doc = frappe.get_doc("Requested Funds Details", args.request_docname) | |||
doc.db_set("request_status", "Recommended Against") | |||
doc.db_set("request_hidden_status", "0") | |||
doc.db_set("recommended_by", args.user) | |||
return "Request Updated" | |||
@frappe.whitelist(allow_guest=True) | |||
def approve_request(**args): | |||
args = frappe._dict(args) | |||
#frappe.db.sql("UPDATE `tabRequested Funds Details` SET request_status = 'Approved', request_hidden_status = 0 WHERE name = %s", args.request_docname) | |||
#return args.request_docname | |||
#Mark the request as open | |||
doc = frappe.get_doc("Requested Funds Details", args.request_docname) | |||
doc.db_set("request_status", "Approved") | |||
doc.db_set("request_hidden_status", "1") | |||
doc.db_set("approved_by", args.user) | |||
return "Request Updated" | |||
@frappe.whitelist(allow_guest=True) | |||
def reject_request(**args): | |||
args = frappe._dict(args) | |||
#frappe.db.sql("UPDATE `tabRequested Funds Details` SET request_status = 'Rejected', request_hidden_status = 0 WHERE name = %s", args.request_docname) | |||
#return "OK" | |||
#Mark the request as open | |||
doc = frappe.get_doc("Requested Funds Details", args.request_docname) | |||
doc.db_set("request_status", "Rejected") | |||
doc.db_set("request_hidden_status", "2") | |||
doc.db_set("approved_by", args.user) | |||
return "Request Updated" | |||
@frappe.whitelist(allow_guest=True) | |||
def accounts_approval(**args): | |||
args = frappe._dict(args) | |||
local = json.loads(args.local) | |||
if args.reference: | |||
reference = frappe.get_doc("Requested Funds Details", args.reference) | |||
if reference.request_status in ['Approved', 'Accounts Cancelled']: | |||
to_validate = [ | |||
{"fieldname": "posting_date", "label": "Posting Date"}, | |||
{"fieldname": "cost_center", "label": "Cost Center"}, | |||
{"fieldname": "expense_account", "label": "Expense Account"}, | |||
{"fieldname": "payable_account", "label": "Payable Account"}, | |||
{"fieldname": "party_type", "label": "Party Type"}, | |||
{"fieldname": "party", "label": "Party"}, | |||
] | |||
for field in to_validate: | |||
if not local.get(field["fieldname"]): | |||
frappe.throw('Error: Please enter ' + field["label"] + ' for all rows') | |||
#Save changes made to accounts info | |||
to_save = ['expense_account', 'payable_account', 'party_type', 'expense_type', 'party', 'invoice_number', 'expense_account_currency', | |||
'conversion_rate', 'payable_account_currency', 'cost_center', 'posting_date', 'accounts_approved_by', 'accounts_approved_on', 'accounts_approver_comment'] | |||
for field in to_save: | |||
reference.db_set(field, local.get(field)) | |||
#Make GL Entries | |||
gl_entries = get_gl_entries(reference, args.parent_doctype, args.parent_docname) | |||
make_gl_entries(gl_entries) | |||
reference.db_set("request_status", "Accounts Approved") | |||
reference.db_set("request_hidden_status", "1") | |||
reference.db_set("accounts_approved_by", args.user) | |||
parent = frappe.get_doc("Requested Payments", args.parent_docname) | |||
update_payment_status(parent) | |||
return "Request Updated" | |||
@frappe.whitelist(allow_guest=True) | |||
def accounts_cancel(**args): | |||
args = frappe._dict(args) | |||
local = json.loads(args.local) | |||
if args.reference: | |||
reference = frappe.get_doc("Requested Funds Details", args.reference) | |||
if reference.request_status == 'Accounts Approved': | |||
paid_amount = get_paid_amount(args.parent_doctype, args.parent_docname, reference.party_type, reference.party, reference.payable_account) | |||
total_approved = get_total_approved(args.parent_doctype, args.parent_docname, reference.party_type, reference.party, reference.payable_account) | |||
in_account_currency = reference.request_amount * reference.conversion_rate | |||
if (total_approved - (paid_amount + in_account_currency)) < 0: | |||
frappe.throw('Unable to cancel. Payment has already been made against the account. Please cancel the payment entry first.' + 'Paid: ' + str(paid_amount) + ' Total Approved: ' + str(total_approved) + ' Account Currency: ' + str(in_account_currency)) | |||
else: | |||
#Make GL Entries | |||
gl_entries = get_gl_entries(reference, args.parent_doctype, args.parent_docname) | |||
make_gl_entries(gl_entries, True) | |||
reference.db_set("request_status", "Accounts Cancelled") | |||
reference.db_set("request_hidden_status", "1") | |||
reference.db_set("accounts_approved_by", args.user) | |||
parent = frappe.get_doc("Requested Payments", args.parent_docname) | |||
update_payment_status(parent) | |||
return "Request Updated" | |||
def get_paid_amount(dt, dn, party_type, party, account): | |||
if party_type=="Customer": | |||
dr_or_cr = "credit_in_account_currency - debit_in_account_currency" | |||
else: | |||
dr_or_cr = "debit_in_account_currency - credit_in_account_currency" | |||
paid_amount = frappe.db.sql(""" | |||
select ifnull(sum({dr_or_cr}), 0) as paid_amount | |||
from `tabGL Entry` | |||
where against_voucher_type = %s | |||
and against_voucher = %s | |||
and party_type = %s | |||
and party = %s | |||
and account = %s | |||
and {dr_or_cr} > 0 | |||
""".format(dr_or_cr=dr_or_cr), (dt, dn, party_type, party, account)) | |||
return paid_amount[0][0] if paid_amount else 0 | |||
def get_total_approved(dt, dn, party_type, party, account): | |||
total_approved = frappe.db.sql(""" | |||
select ifnull(sum(credit_in_account_currency), 0) as total_approved | |||
from `tabGL Entry` | |||
where against_voucher_type = %s | |||
and against_voucher = %s | |||
and party_type = %s | |||
and party = %s | |||
and account = %s | |||
""", (dt, dn, party_type, party, account)) | |||
return total_approved[0][0] if total_approved else 0 | |||
def get_gl_entries(data, reference_doctype, reference_docname): | |||
gl_entry = [] | |||
doc = frappe.get_doc(reference_doctype, reference_docname) | |||
company_currency = frappe.db.get_value('Company', doc.company, "default_currency") | |||
# payable entry | |||
payable_account_currency = get_account_currency(data.payable_account) | |||
gl_entry.append( | |||
get_gl_dict(doc, data, | |||
{ | |||
"account": data.payable_account, | |||
"credit": data.request_amount, | |||
"credit_in_account_currency": data.request_amount \ | |||
if payable_account_currency==company_currency else data.request_amount/data.conversion_rate, | |||
"against": data.name, | |||
"party_type": data.party_type, | |||
"party": data.party, | |||
"against_voucher_type": doc.doctype, | |||
"against_voucher": doc.name | |||
} | |||
) | |||
) | |||
# expense entries | |||
expense_account_currency = get_account_currency(data.expense_account) | |||
gl_entry.append( | |||
get_gl_dict(doc, data, | |||
{ | |||
"account": data.expense_account, | |||
"debit": data.request_amount, | |||
"debit_in_account_currency": data.request_amount \ | |||
if expense_account_currency==company_currency else data.request_amount/data.conversion_rate, | |||
"against": data.name, | |||
"cost_center": data.cost_center, | |||
'against_voucher_type': doc.doctype, | |||
'against_voucher': doc.name | |||
} | |||
) | |||
) | |||
return gl_entry | |||
def get_gl_dict(doc, data, args, account_currency=None): | |||
"""this method populates the common properties of a gl entry record""" | |||
fiscal_years = get_fiscal_years(data.request_date, company=doc.company) | |||
if len(fiscal_years) > 1: | |||
frappe.throw(_("Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year").format(formatdate(self.posting_date))) | |||
else: | |||
fiscal_year = fiscal_years[0][0] | |||
gl_dict = frappe._dict({ | |||
'company': doc.company, | |||
'posting_date': data.posting_date, | |||
'fiscal_year': fiscal_year, | |||
'voucher_type': doc.doctype, | |||
'voucher_no': doc.name, | |||
'remarks': data.get("remarks"), | |||
'debit': 0, | |||
'credit': 0, | |||
'debit_in_account_currency': 0, | |||
'credit_in_account_currency': 0, | |||
'is_opening': "No", | |||
'party_type': None, | |||
'party': None, | |||
'project': data.get("project") | |||
}) | |||
gl_dict.update(args) | |||
company_currency = frappe.db.get_value('Company', doc.company, "default_currency") | |||
if not account_currency: | |||
account_currency = get_account_currency(gl_dict.account) | |||
if gl_dict.account and doc.doctype not in ["Journal Entry", | |||
"Period Closing Voucher", "Payment Entry"]: | |||
#self.validate_account_currency(gl_dict.account, account_currency) | |||
set_balance_in_account_currency(gl_dict, account_currency, data.get("conversion_rate"), company_currency) | |||
return gl_dict | |||
def make_gl_entries(gl_map, cancel=False, adv_adj=False, merge_entries=True, update_outstanding='Yes', from_repost=False): | |||
if gl_map: | |||
if not cancel: | |||
gl_map = process_gl_map(gl_map, merge_entries) | |||
if gl_map and len(gl_map) > 1: | |||
save_entries(gl_map, adv_adj, update_outstanding, from_repost) | |||
else: | |||
frappe.throw(_("Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction.")) | |||
else: | |||
delete_gl_entries(gl_map, adv_adj=adv_adj, update_outstanding=update_outstanding) | |||
def delete_gl_entries(gl_entries=None, voucher_type=None, voucher_no=None, | |||
adv_adj=False, update_outstanding="Yes"): | |||
from erpnext.accounts.doctype.gl_entry.gl_entry import validate_balance_type, \ | |||
check_freezing_date, update_outstanding_amt, validate_frozen_account | |||
if not gl_entries: | |||
gl_entries = frappe.db.sql(""" | |||
select account, posting_date, party_type, party, cost_center, fiscal_year,voucher_type, | |||
voucher_no, against_voucher_type, against_voucher, cost_center, company | |||
from `tabGL Entry` | |||
where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no), as_dict=True) | |||
if gl_entries: | |||
check_freezing_date(gl_entries[0]["posting_date"], adv_adj) | |||
for entry in gl_entries: | |||
frappe.db.sql("""delete from `tabGL Entry` where voucher_type=%s and voucher_no=%s AND against=%s""", | |||
(entry.voucher_type, entry.voucher_no, entry.against)) | |||
validate_frozen_account(entry["account"], adv_adj) | |||
validate_balance_type(entry["account"], adv_adj) | |||
if not adv_adj: | |||
validate_expense_against_budget(entry) | |||
if entry.get("against_voucher") and update_outstanding == 'Yes' and not adv_adj: | |||
update_outstanding_amt(entry["account"], entry.get("party_type"), entry.get("party"), entry.get("against_voucher_type"), | |||
entry.get("against_voucher"), on_cancel=True) | |||
def update_payment_status(doc): | |||
paid_amount = frappe.db.sql("""select ifnull(sum(debit_in_account_currency), 0) as amt | |||
from `tabGL Entry` where against_voucher_type = 'Requested Payments' and against_voucher = %s AND voucher_type <> 'Requested Payments'""", | |||
(doc.name) ,as_dict=1)[0].amt | |||
total_approved = frappe.db.sql(""" | |||
select ifnull(sum(credit_in_account_currency), 0) as total_approved | |||
from `tabGL Entry` | |||
where against_voucher_type = 'Requested Payments' | |||
and against_voucher = %s | |||
""", (doc.name), as_dict=1)[0].total_approved | |||
if paid_amount >= total_approved: | |||
frappe.db.set_value("Requested Payments", doc.name, "payment_status", "Paid") | |||
else: | |||
frappe.db.set_value("Requested Payments", doc.name, "payment_status", "Waiting Payment") | |||
@frappe.whitelist(allow_guest=True) | |||
def reference_payment(**args): | |||
args = frappe._dict(args) | |||
request = frappe.new_doc("Reference Payment Table") | |||
request.update({ | |||
"parent":args.parent, | |||
"parentfield": args.parentfield, | |||
"parenttype": args.parenttype, | |||
"date_of_payment": args.date_of_payment, | |||
"accounting_system": args.accounting_system, | |||
"amount": args.amount, | |||
"currency": args.currency, | |||
"reference_no": args.reference_no, | |||
"status": "paid" | |||
}) | |||
request.insert(ignore_permissions=True) | |||
parent = frappe.get_doc('Requested Payments', args.parent) | |||
parent.db_set("payment_status", args.payment_status) | |||
return "inserted" | |||
@frappe.whitelist(allow_guest=True) | |||
def make_payment(source_name, target_doc=None, ignore_permissions=False): | |||
pe = frappe.new_doc("Payment Entry") | |||
pe.payment_type = "Pay" | |||
pe.posting_date = nowdate() | |||
pe.mode_of_payment = "Cash" | |||
pe.party_type = "Employee" | |||
pe.allocate_payment_amount = 1 | |||
return pe | |||
@@ -0,0 +1,18 @@ | |||
from frappe import _ | |||
def get_data(): | |||
return { | |||
'fieldname': 're', | |||
'non_standard_fieldnames': { | |||
'Payment Entry': 'reference_name' | |||
}, | |||
'internal_links': { | |||
'Sales Order': ['references', 'reference_name'] | |||
}, | |||
'transactions': [ | |||
{ | |||
'label': _('Payments'), | |||
'items': ['Payment Entry'] | |||
} | |||
] | |||
} |
@@ -0,0 +1,3 @@ | |||
frappe.listview_settings['Requested Payments'] = { | |||
add_fields: ['reference_docname', "approval_status", "payment_status"] | |||
}; |
@@ -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: Requested Payments", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Requested Payments | |||
() => frappe.tests.make('Requested Payments', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,12 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2015, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
# test_records = frappe.get_test_records('Requested Payments') | |||
class TestRequestedPayments(unittest.TestCase): | |||
pass |
@@ -0,0 +1,8 @@ | |||
// Copyright (c) 2018, InfluxERP | |||
// For license information, please see license.txt | |||
frappe.ui.form.on('Sales Test', { | |||
refresh: function(frm) { | |||
} | |||
}); |
@@ -0,0 +1,92 @@ | |||
{ | |||
"allow_copy": 0, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"beta": 0, | |||
"creation": "2018-06-27 11:46:19.260681", | |||
"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": "test", | |||
"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": "test", | |||
"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, | |||
"translatable": 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": 0, | |||
"max_attachments": 0, | |||
"modified": "2018-06-27 13:59:51.973937", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Sales Test", | |||
"name_case": "", | |||
"owner": "Administrator", | |||
"permissions": [ | |||
{ | |||
"amend": 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": "System Manager", | |||
"set_user_permissions": 0, | |||
"share": 1, | |||
"submit": 0, | |||
"write": 1 | |||
} | |||
], | |||
"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 | |||
} |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.model.document import Document | |||
class SalesTest(Document): | |||
pass |
@@ -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: Sales Test", function (assert) { | |||
let done = assert.async(); | |||
// number of asserts | |||
assert.expect(1); | |||
frappe.run_serially([ | |||
// insert a new Sales Test | |||
() => frappe.tests.make('Sales Test', [ | |||
// values to be set | |||
{key: 'value'} | |||
]), | |||
() => { | |||
assert.equal(cur_frm.doc.key, 'value'); | |||
}, | |||
() => done() | |||
]); | |||
}); |
@@ -0,0 +1,10 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2018, InfluxERP | |||
# See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
import unittest | |||
class TestSalesTest(unittest.TestCase): | |||
pass |
@@ -0,0 +1,30 @@ | |||
// Copyright (c) 2016, InfluxERP | |||
// For license information, please see license.txt | |||
/* eslint-disable */ | |||
var aday = new Date(); | |||
var from_date = aday.toISOString().split('T')[0]; | |||
aday.setDate(aday.getDate() + 30); | |||
var to_date = aday.toISOString().split('T')[0]; | |||
frappe.query_reports["Delivery Note Report"] = { | |||
"filters": [ | |||
{ | |||
"fieldname":"from_date", | |||
"label": __("From Date"), | |||
"fieldtype": "Date", | |||
"default": from_date | |||
}, | |||
{ | |||
"fieldname":"to_date", | |||
"label": __("To Date"), | |||
"fieldtype": "Date", | |||
"default": to_date | |||
}, | |||
{ | |||
"fieldname":"warehouse", | |||
"label": __("Warehouse"), | |||
"fieldtype": "Link", | |||
"options": "Warehouse" | |||
}, | |||
] | |||
} |
@@ -0,0 +1,40 @@ | |||
{ | |||
"add_total_row": 0, | |||
"creation": "2019-05-22 15:35:36.348245", | |||
"disabled": 0, | |||
"docstatus": 0, | |||
"doctype": "Report", | |||
"idx": 0, | |||
"is_standard": "Yes", | |||
"modified": "2019-05-22 15:35:36.348245", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Delivery Note Report", | |||
"owner": "Administrator", | |||
"ref_doctype": "Delivery Note", | |||
"report_name": "Delivery Note Report", | |||
"report_type": "Script Report", | |||
"roles": [ | |||
{ | |||
"role": "Stock User" | |||
}, | |||
{ | |||
"role": "Accounts User" | |||
}, | |||
{ | |||
"role": "Stock Manager" | |||
}, | |||
{ | |||
"role": "Sales User" | |||
}, | |||
{ | |||
"role": "Sales Executive" | |||
}, | |||
{ | |||
"role": "Branch In Charge" | |||
}, | |||
{ | |||
"role": "Stock Supervisor" | |||
} | |||
] | |||
} |
@@ -0,0 +1,144 @@ | |||
# Copyright (c) 2013, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe import _ | |||
def execute(filters=None): | |||
columns, data = [], [] | |||
columns = [ | |||
{ | |||
"fieldname": "delivery_note", | |||
"label": _("Delivery Note"), | |||
"fieldtype": "Link", | |||
"options": "Delivery Note", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "customer_name", | |||
"label": _("Customer"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "customer_address", | |||
"label": _("Customer Address"), | |||
"fieldtype": "Small Text", | |||
"width": 200 | |||
}, | |||
{ | |||
"fieldname": "phone_number", | |||
"label": _("Phone Number"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
# { | |||
# "fieldname": "item_name", | |||
# "label": _("Item"), | |||
# "fieldtype": "Data", | |||
# "width": 150 | |||
# }, | |||
{ | |||
"fieldname": "item_code", | |||
"label": _("Item Code"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "quantity", | |||
"label": _("Quantity"), | |||
"fieldtype": "Float", | |||
"width": 150 | |||
}, | |||
# { | |||
# "fieldname": "uom", | |||
# "label": _("UOM"), | |||
# "fieldtype": "Data", | |||
# "width": 150 | |||
# }, | |||
{ | |||
"fieldname": "serial_no", | |||
"label": _("Serial Numbers"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "actual_quantity", | |||
"label": _("Actual Quantity"), | |||
"fieldtype": "Float", | |||
"width": 100 | |||
}, | |||
# { | |||
# "fieldname": "projected_quantity", | |||
# "label": _("Projected Quantity"), | |||
# "fieldtype": "Float", | |||
# "width": 100 | |||
# }, | |||
{ | |||
"fieldname": "warehouse", | |||
"label": _("Warehouse"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "sales_invoice", | |||
"label": _("Sales Invoice"), | |||
"fieldtype": "Link", | |||
"options": "Sales Invoice", | |||
"width": 150 | |||
} | |||
] | |||
if filters.from_date > filters.to_date: | |||
frappe.throw(_("From Date must be before To Date {}").format(filters.to_date)) | |||
where = '' | |||
where_filter = {"from_date": filters.from_date, "to_date": filters.to_date} | |||
if filters.warehouse: | |||
where += ' AND dni.warehouse = %(warehouse)s' | |||
where_filter.update({"warehouse": filters.warehouse}) | |||
data = frappe.db.sql('''SELECT | |||
dn.customer_name, | |||
CONCAT(ta.address_line1,",", ta.city,',', ta.country) AS customer_address, | |||
ta.phone AS phone_number, | |||
dn.posting_date, | |||
dni.item_name, | |||
dni.item_code, | |||
dni.serial_no, | |||
dni.qty AS quantity, | |||
dni.uom, | |||
dni.warehouse, | |||
dn.name AS delivery_note, | |||
so.name AS sales_invoice, | |||
`tabBin`.actual_qty AS actual_quantity, | |||
`tabBin`.projected_qty AS projected_quantity | |||
FROM | |||
(`tabDelivery Note Item`dni) | |||
LEFT JOIN | |||
(`tabSales Invoice` so) | |||
ON (dni.against_sales_invoice = so.name) | |||
LEFT JOIN | |||
(`tabDelivery Note` dn) | |||
ON (dni.parent=dn.name) | |||
LEFT JOIN | |||
`tabBin` ON (`tabBin`.item_code = dni.item_code | |||
and `tabBin`.warehouse = dni.warehouse) | |||
LEFT JOIN | |||
tabItem ON tabItem.item_code = dni.item_code | |||
LEFT JOIN | |||
(`tabAddress` ta) ON ta.name=(SELECT dl.parent | |||
FROM (`tabDynamic Link` dl) | |||
WHERE | |||
dl.parenttype='Address' AND dl.link_doctype='Customer' AND | |||
dl.link_name=dn.customer ORDER BY ta.creation LIMIT 1 | |||
) | |||
WHERE | |||
dn.docstatus = 1 AND dn.status IN ('Completed', 'To Bill', 'Closed') | |||
AND dn.posting_date BETWEEN %(from_date)s AND %(to_date)s | |||
AND (SELECT name FROM `tabDelivery Note` WHERE return_against = dn.name) IS NULL''' + where, | |||
where_filter, as_dict=1 | |||
); | |||
return columns, data |
@@ -0,0 +1,31 @@ | |||
// Copyright (c) 2016, InfluxERP | |||
// For license information, please see license.txt | |||
/* eslint-disable */ | |||
var aday = new Date(); | |||
var to_date = aday.toISOString().split('T')[0]; | |||
aday.setDate(aday.getDate() - 30); | |||
var from_date = aday.toISOString().split('T')[0]; | |||
frappe.query_reports["Installation Note Report"] = { | |||
"filters": [ | |||
{ | |||
"fieldname":"from_date", | |||
"label": __("From Date"), | |||
"fieldtype": "Date", | |||
"default": from_date | |||
}, | |||
{ | |||
"fieldname":"to_date", | |||
"label": __("To Date"), | |||
"fieldtype": "Date", | |||
"default": to_date | |||
}, | |||
{ | |||
"fieldname":"branch", | |||
"label": __("Warehouse"), | |||
"fieldtype": "Link", | |||
"options": "Warehouse", | |||
} | |||
] | |||
} |
@@ -0,0 +1,34 @@ | |||
{ | |||
"add_total_row": 0, | |||
"creation": "2019-05-22 14:55:06.120622", | |||
"disabled": 0, | |||
"docstatus": 0, | |||
"doctype": "Report", | |||
"idx": 0, | |||
"is_standard": "Yes", | |||
"modified": "2019-05-22 14:56:02.838056", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Installation Note Report", | |||
"owner": "Administrator", | |||
"ref_doctype": "Installation Note", | |||
"report_name": "Installation Note Report", | |||
"report_type": "Script Report", | |||
"roles": [ | |||
{ | |||
"role": "Sales User" | |||
}, | |||
{ | |||
"role": "Sales Executive" | |||
}, | |||
{ | |||
"role": "Branch Service Controller" | |||
}, | |||
{ | |||
"role": "Branch In Charge" | |||
}, | |||
{ | |||
"role": "Stock Supervisor" | |||
} | |||
] | |||
} |
@@ -0,0 +1,87 @@ | |||
# Copyright (c) 2013, Bravo Logistics and contributors | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.utils import flt, getdate, cstr | |||
from frappe import _ | |||
import ast | |||
import datetime | |||
def execute(filters=None): | |||
columns, data = [], [] | |||
columns = [ | |||
{ | |||
"fieldname": "reference", | |||
"label": _("Installation Note"), | |||
"fieldtype": "Link", | |||
"options": "Installation Note", | |||
"width": 100 | |||
}, | |||
{ | |||
"fieldname": "inst_date", | |||
"label": _("Installation Date"), | |||
"fieldtype": "Date", | |||
"width": 100 | |||
}, | |||
{ | |||
"fieldname": "customer", | |||
"label": _("Customer"), | |||
"fieldtype": "data", | |||
"width": 100 | |||
}, | |||
{ | |||
"fieldname": "item_code", | |||
"label": _("Item code"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "warehouse", | |||
"label": _("Warehouse"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "remarks", | |||
"label": _("Remarks"), | |||
"fieldtype": "Text", | |||
"width": 200 | |||
} | |||
] | |||
if filters.from_date > filters.to_date: | |||
frappe.throw(_("From Date must be before To Date {}").format(filters.to_date)) | |||
where = '' | |||
where_filter = {"from_date": filters.from_date, "to_date": filters.to_date} | |||
if filters.branch: | |||
where += ' AND `tabDelivery Note Item`.warehouse = %(branch)s' | |||
where_filter.update({"branch": filters.branch}) | |||
data = frappe.db.sql('''SELECT | |||
`tabInstallation Note`.name AS reference, | |||
`tabInstallation Note`.inst_date AS inst_date, | |||
`tabInstallation Note`.customer AS customer, | |||
`tabInstallation Note`.item_code AS item_code, | |||
`tabInstallation Note`.remarks AS remarks, | |||
`tabInstallation Note`.status AS status, | |||
`tabInstallation Note`.delivery_note, | |||
`tabDelivery Note Item`.warehouse | |||
FROM | |||
`tabInstallation Note` | |||
LEFT JOIN | |||
`tabDelivery Note Item` | |||
ON | |||
(`tabDelivery Note Item`.parent = `tabInstallation Note`.delivery_note) | |||
WHERE | |||
`tabInstallation Note`.docstatus <> 2 \ | |||
AND `tabInstallation Note`.inst_date BETWEEN %(from_date)s AND %(to_date)s | |||
'''+ where, | |||
where_filter, as_dict=1,) | |||
return columns, data |
@@ -0,0 +1,31 @@ | |||
// Copyright (c) 2016, Bravo Logistics and contributors | |||
// For license information, please see license.txt | |||
/* eslint-disable */ | |||
var aday = new Date(); | |||
var to_date = aday.toISOString().split('T')[0]; | |||
aday.setDate(aday.getDate() - 30); | |||
var from_date = aday.toISOString().split('T')[0]; | |||
frappe.query_reports["Pre Delivery Inspection Report"] = { | |||
"filters": [ | |||
{ | |||
"fieldname":"from_date", | |||
"label": __("From Date"), | |||
"fieldtype": "Date", | |||
"default": from_date | |||
}, | |||
{ | |||
"fieldname":"to_date", | |||
"label": __("To Date"), | |||
"fieldtype": "Date", | |||
"default": to_date | |||
}, | |||
{ | |||
"fieldname":"branch", | |||
"label": __("Warehouse"), | |||
"fieldtype": "Link", | |||
"options": "Warehouse", | |||
} | |||
] | |||
} |
@@ -0,0 +1,34 @@ | |||
{ | |||
"add_total_row": 0, | |||
"creation": "2019-05-22 14:24:38.122103", | |||
"disabled": 0, | |||
"docstatus": 0, | |||
"doctype": "Report", | |||
"idx": 0, | |||
"is_standard": "Yes", | |||
"modified": "2019-05-22 14:55:26.715680", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Pre Delivery Inspection Report", | |||
"owner": "Administrator", | |||
"ref_doctype": "Pre Delivery Inspection", | |||
"report_name": "Pre Delivery Inspection Report", | |||
"report_type": "Script Report", | |||
"roles": [ | |||
{ | |||
"role": "Quality Manager" | |||
}, | |||
{ | |||
"role": "Sales Executive" | |||
}, | |||
{ | |||
"role": "Branch Service Controller" | |||
}, | |||
{ | |||
"role": "Branch In Charge" | |||
}, | |||
{ | |||
"role": "Stock Supervisor" | |||
} | |||
] | |||
} |
@@ -0,0 +1,113 @@ | |||
# Copyright (c) 2013, Bravo Logistics and contributors | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.utils import flt, getdate, cstr | |||
from frappe import _ | |||
import ast | |||
import datetime | |||
def execute(filters=None): | |||
columns, data = [], [] | |||
columns = [ | |||
{ | |||
"fieldname": "reference", | |||
"label": _("Pre Delivery Inspection Reference"), | |||
"fieldtype": "Link", | |||
"options": "Pre Delivery Inspection", | |||
"width": 100 | |||
}, | |||
{ | |||
"fieldname": "report_date", | |||
"label": _("Done On"), | |||
"fieldtype": "Date", | |||
"width": 100 | |||
}, | |||
{ | |||
"fieldname": "customer", | |||
"label": _("Customer"), | |||
"fieldtype": "data", | |||
"width": 100 | |||
}, | |||
{ | |||
"fieldname": "inspection_type", | |||
"label": _("Inspection Type"), | |||
"fieldtype": "Data", | |||
"width": 100 | |||
}, | |||
{ | |||
"fieldname": "item_code", | |||
"label": _("Item code"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "item_serial_no", | |||
"label": _("Serial no"), | |||
"fieldtype": "Data", | |||
"width": 200 | |||
}, | |||
{ | |||
"fieldname": "inspected_by", | |||
"label": _("Inspected By"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "verified_by", | |||
"label": _("Verified By"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "warehouse", | |||
"label": _("Warehouse"), | |||
"fieldtype": "Data", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "remarks", | |||
"label": _("Remarks"), | |||
"fieldtype": "Text", | |||
"width": 200 | |||
} | |||
] | |||
if filters.from_date > filters.to_date: | |||
frappe.throw(_("From Date must be before To Date {}").format(filters.to_date)) | |||
where = '' | |||
where_filter = {"from_date": filters.from_date, "to_date": filters.to_date} | |||
if filters.branch: | |||
where += ' AND sit.warehouse = %(branch)s' | |||
where_filter.update({"branch": filters.branch}) | |||
data = frappe.db.sql('''SELECT | |||
`tabPre Delivery Inspection`.name AS reference, | |||
`tabPre Delivery Inspection`.report_date, | |||
`tabPre Delivery Inspection`.customer, | |||
`tabPre Delivery Inspection`.inspection_type, | |||
`tabPre Delivery Inspection`.item_code, | |||
`tabPre Delivery Inspection`.item_serial_no, | |||
`tabPre Delivery Inspection`.inspected_by, | |||
`tabPre Delivery Inspection`.verified_by, | |||
`tabPre Delivery Inspection`.reference_name, | |||
`tabPre Delivery Inspection`.remarks, | |||
sit.warehouse | |||
FROM | |||
`tabPre Delivery Inspection` | |||
LEFT JOIN | |||
(`tabSales Invoice Item` sit) | |||
ON (`tabPre Delivery Inspection`.sales_invoice = sit.parent) | |||
WHERE | |||
`tabPre Delivery Inspection`.docstatus <> 2 \ | |||
AND `tabPre Delivery Inspection`.report_date BETWEEN %(from_date)s AND %(to_date)s | |||
'''+ where, | |||
where_filter, as_dict=1) | |||
return columns, data |
@@ -0,0 +1,51 @@ | |||
// Copyright (c) 2016, InfluxERP | |||
// For license information, please see license.txt | |||
/* eslint-disable */ | |||
var aday = new Date(); | |||
var to_date = aday.toISOString().split('T')[0]; | |||
aday.setDate(aday.getDate() - 30); | |||
var from_date = aday.toISOString().split('T')[0]; | |||
frappe.query_reports["Technicians Performance Report"] = { | |||
"filters": [ | |||
{ | |||
"fieldname":"from_date", | |||
"label": __("From Date"), | |||
"fieldtype": "Date", | |||
"default": from_date, | |||
"reqd": 1 | |||
}, | |||
{ | |||
"fieldname":"to_date", | |||
"label": __("To Date"), | |||
"fieldtype": "Date", | |||
"default": to_date, | |||
"reqd": 1 | |||
}, | |||
{ | |||
"fieldname":"status", | |||
"label": __("Status"), | |||
"fieldtype": "Select", | |||
"options": ["", "Open", "Closed"], | |||
}, | |||
{ | |||
"fieldname":"user", | |||
"label": __("Technician"), | |||
"fieldtype": "Link", | |||
"options": "Employee", | |||
}, | |||
{ | |||
"fieldname":"workshop", | |||
"label": __("Warehouse"), | |||
"fieldtype": "Link", | |||
"options": "Warehouse", | |||
}, | |||
{ | |||
"fieldname":"custm", | |||
"label": __("Customer"), | |||
"fieldtype": "Link", | |||
"options": "Customer", | |||
}, | |||
] | |||
} |
@@ -0,0 +1,38 @@ | |||
{ | |||
"add_total_row": 1, | |||
"creation": "2020-04-03 18:13:32.274707", | |||
"disabled": 0, | |||
"docstatus": 0, | |||
"doctype": "Report", | |||
"idx": 0, | |||
"is_standard": "Yes", | |||
"letter_head": "Default Letter Head", | |||
"modified": "2020-04-09 14:09:12.974702", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Technicians Performance Report", | |||
"owner": "Administrator", | |||
"ref_doctype": "Job Card", | |||
"report_name": "Technicians Performance Report", | |||
"report_type": "Script Report", | |||
"roles": [ | |||
{ | |||
"role": "System Manager" | |||
}, | |||
{ | |||
"role": "After Sales User" | |||
}, | |||
{ | |||
"role": "After Sales Manager" | |||
}, | |||
{ | |||
"role": "After Sales Branch Manager" | |||
}, | |||
{ | |||
"role": "Parts Consultant" | |||
}, | |||
{ | |||
"role": "Service and Training Supervisor" | |||
} | |||
] | |||
} |
@@ -0,0 +1,106 @@ | |||
# Copyright (c) 2013, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe import _ | |||
from frappe.desk.query_report import add_total_row | |||
import datetime | |||
def execute(filters=None): | |||
return _execute(filters) | |||
def _execute(filters=None, additional_table_columns=None, additional_query_columns=None): | |||
if not filters: filters = {} | |||
columns = get_columns(additional_table_columns) | |||
item_list = get_items(filters, additional_query_columns) | |||
data = [] | |||
for d in item_list: | |||
#For actual hours time calculation = date difference in hours + time difference. There may be a simpler way to do it but ...... | |||
time_difference = 0 | |||
if d.end_date == d.start_date: | |||
time_difference = (d.end_time.seconds - d.start_time.seconds) / 3600 | |||
else: | |||
time_difference = ((86400 - d.start_time.seconds) + d.end_time.seconds) / 3600 | |||
date_difference = (d.end_date - d.start_date).total_seconds() / 3600 | |||
actual_hrs = date_difference + time_difference | |||
service_value = d.billable_hours * d.standard_cost | |||
hrs_difference = actual_hrs - d.standard_hours | |||
row = [d.name, d.technician, d.employee_name, d.start_date, d.start_time, d.end_date, d.end_time, d.service, d.standard_hours, | |||
actual_hrs, hrs_difference, d.billable_hours, d.standard_cost, service_value, d.warehouse, d.customer] | |||
data.append(row) | |||
return columns, data | |||
def get_columns(additional_table_columns): | |||
columns = [ | |||
_("Job Card") + ":Link/Job Card:120", | |||
_("Technician") + ":Link/User:100", | |||
_("Technician Name") + ":Data:100", | |||
_("Start Date") + ":Date:80", | |||
_("Start Time") + ":Time:80", | |||
_("End Date") + ":Date:80", | |||
_("End Time") + ":Time:80", | |||
_("Service") + ":Link/Maintenance Service:120", | |||
_("Standard Hrs") + ":Float:120", | |||
_("Actual Hrs") + ":Float:120", | |||
_("Hrs Difference") + ":Float:120", | |||
_("Billable Hrs") + ":Float:120", | |||
_("Standard Rate") + ":Currency/currency:120", | |||
_("Service Value") + ":Currency/currency:120", | |||
_("Warehouse") + ":Link/Warehouse:120", | |||
_("Customer") + ":Link/Customer:120"] | |||
return columns | |||
def get_conditions(filters): | |||
conditions = "" | |||
for opts in (("custm", " and `tabJob Card`.customer=%(custm)s"), | |||
("workshop", " and `tabJob Card`.warehouse = %(workshop)s"), | |||
("user", " and `tabMaintenance Services Table`.technician = %(user)s"), | |||
("from_date", " and `tabMaintenance Services Table`.start_date>=%(from_date)s"), | |||
("to_date", " and `tabMaintenance Services Table`.start_date<=%(to_date)s")): | |||
if filters.get(opts[0]): | |||
conditions += opts[1] | |||
return conditions | |||
def get_items(filters, additional_query_columns): | |||
conditions = get_conditions(filters) | |||
match_conditions = frappe.build_match_conditions("Job Card") | |||
if match_conditions: | |||
match_conditions = " and {0} ".format(match_conditions) | |||
if additional_query_columns: | |||
additional_query_columns = ', ' + ', '.join(additional_query_columns) | |||
return frappe.db.sql(""" | |||
select | |||
`tabJob Card`.name, | |||
`tabMaintenance Services Table`.start_date, | |||
`tabMaintenance Services Table`.end_date, | |||
`tabMaintenance Services Table`.start_time, | |||
`tabMaintenance Services Table`.end_time, | |||
`tabJob Card`.name, | |||
`tabJob Card`.customer, | |||
`tabJob Card`.status, | |||
`tabJob Card`.warehouse, | |||
`tabEmployee`.employee_name, | |||
`tabMaintenance Services Table`.service, | |||
`tabMaintenance Services Table`.billable_hours, | |||
`tabMaintenance Services Table`.standard_hours, | |||
`tabMaintenance Services Table`.technician, | |||
`tabMaintenance Services Table`.standard_cost | |||
from | |||
`tabJob Card`, `tabMaintenance Services Table` | |||
left join | |||
`tabEmployee` on `tabEmployee`.name = `tabMaintenance Services Table`.technician | |||
where | |||
`tabJob Card`.name = `tabMaintenance Services Table`.parent and `tabJob Card`.docstatus = 1 %s %s | |||
order by | |||
`tabMaintenance Services Table`.start_date | |||
""".format(additional_query_columns or '') % (conditions, match_conditions), filters, as_dict=1) | |||
@@ -0,0 +1,39 @@ | |||
// Copyright (c) 2016, InfluxERP | |||
// For license information, please see license.txt | |||
/* eslint-disable */ | |||
var aday = new Date(); | |||
var to_date = aday.toISOString().split('T')[0]; | |||
aday.setDate(aday.getDate() - 30); | |||
var from_date = aday.toISOString().split('T')[0]; | |||
frappe.query_reports["Workshop Performance Report"] = { | |||
"filters": [ | |||
{ | |||
"fieldname":"from_date", | |||
"label": __("From Date"), | |||
"fieldtype": "Date", | |||
"default": from_date, | |||
"reqd": 1 | |||
}, | |||
{ | |||
"fieldname":"to_date", | |||
"label": __("To Date"), | |||
"fieldtype": "Date", | |||
"default": to_date, | |||
"reqd": 1 | |||
}, | |||
{ | |||
"fieldname":"technician", | |||
"label": __("Technician"), | |||
"fieldtype": "Link", | |||
"options": "Employee", | |||
}, | |||
{ | |||
"fieldname":"workshop", | |||
"label": __("Warehouse"), | |||
"fieldtype": "Link", | |||
"options": "Warehouse", | |||
}, | |||
] | |||
} |
@@ -0,0 +1,38 @@ | |||
{ | |||
"add_total_row": 1, | |||
"creation": "2020-04-09 15:05:49.073861", | |||
"disabled": 0, | |||
"docstatus": 0, | |||
"doctype": "Report", | |||
"idx": 0, | |||
"is_standard": "Yes", | |||
"letter_head": "Default Letter Head", | |||
"modified": "2020-04-09 15:05:49.073861", | |||
"modified_by": "Administrator", | |||
"module": "After Sales Services", | |||
"name": "Workshop Performance Report", | |||
"owner": "Administrator", | |||
"ref_doctype": "Job Card", | |||
"report_name": "Workshop Performance Report", | |||
"report_type": "Script Report", | |||
"roles": [ | |||
{ | |||
"role": "System Manager" | |||
}, | |||
{ | |||
"role": "After Sales User" | |||
}, | |||
{ | |||
"role": "After Sales Manager" | |||
}, | |||
{ | |||
"role": "After Sales Branch Manager" | |||
}, | |||
{ | |||
"role": "Parts Consultant" | |||
}, | |||
{ | |||
"role": "Service and Training Supervisor" | |||
} | |||
] | |||
} |
@@ -0,0 +1,102 @@ | |||
# Copyright (c) 2013, InfluxERP | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe import _ | |||
from frappe.desk.query_report import add_total_row | |||
def execute(filters=None): | |||
columns, data = [], [] | |||
columns = [ | |||
{ | |||
"fieldname": "technician", | |||
"label": _("Technician"), | |||
"fieldtype": "Link", | |||
"options": "Employee", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "employee_name", | |||
"label": _("Technician Name"), | |||
"fieldtype": "Data", | |||
"width": 150, | |||
"hidden": True | |||
}, | |||
{ | |||
"fieldname": "workshop", | |||
"label": _("Workshop"), | |||
"fieldtype": "link", | |||
"options": "Warehouse", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "no_of_jobs_completed", | |||
"label": _("No of Jobs Completed"), | |||
"fieldtype": "Float", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "total_billable_hours", | |||
"label": _("Total Billable Hours"), | |||
"fieldtype": "Float", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "total_standard_hours", | |||
"label": _("Standard Hours"), | |||
"fieldtype": "Float", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "total_work_value", | |||
"label": _("Total Work Value"), | |||
"fieldtype": "Currency", | |||
"width": 150 | |||
}, | |||
{ | |||
"fieldname": "job_efficiency", | |||
"label": _("Technician Efficiency (%)"), | |||
"fieldtype": "Float", | |||
"width": 150 | |||
}, | |||
] | |||
if filters.from_date > filters.to_date: | |||
frappe.throw(_("From Date must be before To Date {}").format(filters.to_date)) | |||
where_filter = {"from_date": filters.from_date,"to_date": filters.to_date,} | |||
where = "" | |||
if filters.workshop: | |||
where += ' AND tjc.warehouse = %(workshop)s ' | |||
where_filter.update({"workshop": filters.workshop}) | |||
if filters.technician: | |||
where += ' AND tmst.technician = %(technician)s ' | |||
where_filter.update({"technician": filters.technician}) | |||
data = frappe.db.sql('''SELECT | |||
tmst.technician, | |||
tabEmployee.employee_name, | |||
tjc.warehouse AS workshop, | |||
COUNT(tmst.name) AS no_of_jobs_completed, | |||
SUM(tmst.billable_hours) AS total_billable_hours, | |||
SUM(tmst.standard_hours) AS total_standard_hours, | |||
SUM(tmst.standard_cost * tmst.billable_hours) as total_work_value, | |||
(SUM(tmst.billable_hours) / SUM(tmst.standard_hours)) * 100 AS job_efficiency | |||
FROM | |||
(`tabMaintenance Services Table` tmst) | |||
LEFT JOIN | |||
(`tabJob Card` tjc) ON (tmst.parent = tjc.name) | |||
LEFT JOIN | |||
tabEmployee ON tabEmployee.name = tmst.technician | |||
WHERE | |||
tmst.start_date BETWEEN %(from_date)s AND %(to_date)s AND tjc.docstatus = 1 | |||
AND tmst.service_status = 'Fully Completed' '''+ where + ''' | |||
GROUP BY | |||
tmst.technician, tjc.warehouse | |||
''', | |||
where_filter, as_list=1); | |||
return columns, data |
@@ -0,0 +1,449 @@ | |||
# -*- coding: utf-8 -*- | |||
# Copyright (c) 2020, Youssef Restom and contributors | |||
# For license information, please see license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe import _ | |||
import json | |||
import requests | |||
from frappe.utils import get_host_name, flt | |||
from time import sleep | |||
import binascii | |||
import os | |||
from werkzeug import url_fix | |||
import urllib.parse as urlparse | |||
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry | |||
from frappe.utils.background_jobs import enqueue | |||
from datetime import datetime | |||
from frappe.utils.password import get_decrypted_password | |||
from csf_tz.csf_tz.doctype.csf_api_response_log.csf_api_response_log import add_log | |||
class ToObject(object): | |||
def __init__(self, data): | |||
self.__dict__ = json.loads(data) | |||
def set_callback_token(doc, method): | |||
send_fee_details_to_bank = ( | |||
frappe.get_value("Company", doc.company, "send_fee_details_to_bank") or 0 | |||
) | |||
if not send_fee_details_to_bank: | |||
return | |||
doc.callback_token = binascii.hexlify(os.urandom(14)).decode() | |||
series = frappe.get_value("Company", doc.company, "nmb_series") or "" | |||
if not series: | |||
frappe.throw(_("Please set NMB User Series in Company {0}".format(doc.company))) | |||
reference = str(series) + "F" + str(doc.name) | |||
if not doc.abbr: | |||
doc.abbr = frappe.get_value("Company", doc.company, "abbr") or "" | |||
doc.bank_reference = reference.replace("-", "").replace("FEE" + doc.abbr, "") | |||
if method == "invoice_submission": | |||
doc.save() | |||
frappe.db.commit() | |||
def get_nmb_token(company): | |||
url = frappe.get_value("Company", company, "nmb_url") | |||
if not url: | |||
frappe.throw(_("Please set NMB URL in Company {0}".format(company))) | |||
url = url + str("auth") | |||
username = frappe.get_value("Company", company, "nmb_username") | |||
if not username: | |||
frappe.throw(_("Please set NMB User Name in Company {0}".format(company))) | |||
password = get_decrypted_password("Company", company, "nmb_password") | |||
if not password: | |||
frappe.throw(_("Please set NMB Password in Company {0}".format(company))) | |||
data = { | |||
"username": username, | |||
"password": password, | |||
} | |||
for i in range(3): | |||
try: | |||
r = requests.post(url, data=json.dumps(data), timeout=5) | |||
r.raise_for_status() | |||
frappe.logger().debug({"get_nmb_token webhook_success": r.text}) | |||
if json.loads(r.text): | |||
add_log( | |||
request_type="NMB token", | |||
request_url=url, | |||
request_header="no header", | |||
request_body=json.dumps(data), | |||
response_data=json.loads(r.text), | |||
) | |||
if json.loads(r.text)["status"] == 1: | |||
return json.loads(r.text)["token"] | |||
else: | |||
frappe.throw(json.loads(r.text)) | |||
except Exception as e: | |||
frappe.logger().debug({"get_nmb_token webhook_error": e, "try": i + 1}) | |||
sleep(3 * i + 1) | |||
if i != 2: | |||
continue | |||
else: | |||
raise e | |||
def send_nmb(method, data, company): | |||
url = frappe.get_value("Company", company, "nmb_url") | |||
if not url: | |||
frappe.throw(_("Please set NMB URL in Company {0}".format(company))) | |||
data["token"] = get_nmb_token(company) | |||
url = url + str(method) | |||
for i in range(3): | |||
try: | |||
r = requests.post(url, data=json.dumps(data), timeout=5) | |||
r.raise_for_status() | |||
frappe.logger().debug({"send_nmb webhook_success": r.text}) | |||
if json.loads(r.text): | |||
add_log( | |||
request_type="NMB " + method, | |||
request_url=url, | |||
request_header="no header", | |||
request_body=json.dumps(data), | |||
response_data=json.loads(r.text), | |||
) | |||
if json.loads(r.text)["status"] == 1: | |||
frappe.msgprint( | |||
"Response from bank:<br><hr>" + json.loads(r.text)["description"] | |||
) | |||
return json.loads(r.text) | |||
else: | |||
print(json.loads(r.text)["description"]) | |||
if json.loads(r.text)["description"] == "Duplicate Invoice Number": | |||
return json.loads(r.text) | |||
frappe.msgprint( | |||
"Error detected at bank:<br><hr>" | |||
+ json.loads(r.text)["description"] | |||
) | |||
frappe.throw(json.loads(r.text)) | |||
except Exception as e: | |||
frappe.logger().debug({"send_nmb webhook_error": e, "try": i + 1}) | |||
sleep(3 * i + 1) | |||
if i != 2: | |||
continue | |||
else: | |||
raise e | |||
@frappe.whitelist() | |||
def invoice_submission(doc=None, method=None, fees_name=None): | |||
send_fee_details_to_bank = ( | |||
frappe.get_value("Company", doc.company, "send_fee_details_to_bank") or 0 | |||
) | |||
if not send_fee_details_to_bank: | |||
return | |||
if not doc and fees_name: | |||
doc = frappe.get_doc("Fees", fees_name) | |||
if not doc.callback_token: | |||
frappe.msgprint( | |||
_( | |||
"This fee is not set with a token to be sent to the Bank. Generating the token..." | |||
), | |||
alert=True, | |||
) | |||
set_callback_token(doc, "invoice_submission") | |||
series = frappe.get_value("Company", doc.company, "nmb_series") or "" | |||
abbr = frappe.get_value("Company", doc.company, "abbr") or "" | |||
if not series: | |||
frappe.throw(_("Please set NMB User Series in Company {0}".format(doc.company))) | |||
data = { | |||
"reference": doc.bank_reference, | |||
"student_name": doc.student_name, | |||
"student_id": doc.student, | |||
"amount": doc.grand_total, | |||
"type": "Fees Invoice", | |||
"code": 10, | |||
"allow_partial": "FALSE", | |||
"callback_url": "https://" | |||
+ get_host_name() | |||
+ "/api/method/csf_tz.bank_api.receive_callback?token=" | |||
+ doc.callback_token, | |||
} | |||
send_nmb("invoice_submission", data, doc.company) | |||
@frappe.whitelist(allow_guest=True) | |||
def receive_callback(*args, **kwargs): | |||
r = frappe.request | |||
uri = url_fix(r.url.replace("+", " ")) | |||
# http_method = r.method | |||
body = r.get_data() | |||
# headers = r.headers | |||
message = {} | |||
if body: | |||
data = body.decode("utf-8") | |||
msgs = ToObject(data) | |||
atr_list = list(msgs.__dict__) | |||
for atr in atr_list: | |||
if getattr(msgs, atr): | |||
message[atr] = getattr(msgs, atr) | |||
else: | |||
frappe.throw("This has no body!") | |||
parsed_url = urlparse.urlparse(uri) | |||
message["fees_token"] = parsed_url[4][6:] | |||
message["doctype"] = "NMB Callback" | |||
nmb_doc = frappe.get_doc(message) | |||
if nmb_doc.insert(ignore_permissions=True): | |||
frappe.response["status"] = 1 | |||
frappe.response["description"] = "success" | |||
else: | |||
frappe.response["description"] = "insert failed" | |||
frappe.response["http_status_code"] = 409 | |||
enqueue( | |||
method=make_payment_entry, | |||
queue="short", | |||
timeout=10000, | |||
is_async=True, | |||
kwargs=nmb_doc, | |||
) | |||
def make_payment_entry(method="callback", **kwargs): | |||
for key, value in kwargs.items(): | |||
nmb_doc = value | |||
doc_info = get_fee_info(nmb_doc.reference) | |||
accounts = get_fees_default_accounts(doc_info["company"]) | |||
nmb_amount = flt(nmb_doc.amount) | |||
frappe.flags.ignore_account_permission = True | |||
if doc_info["doctype"] == "Fees": | |||
if method == "callback": | |||
frappe.set_user("Administrator") | |||
fees_name = doc_info["name"] | |||
bank_reference = frappe.get_value("Fees", fees_name, "bank_reference") | |||
if bank_reference == nmb_doc.reference: | |||
payment_entry = get_payment_entry( | |||
"Fees", fees_name, party_amount=nmb_amount | |||
) | |||
payment_entry.update( | |||
{ | |||
"reference_no": nmb_doc.reference, | |||
"reference_date": nmb_doc.timestamp, | |||
"remarks": "Payment Entry against {0} {1} via NMB Bank Payment {2}".format( | |||
"Fees", fees_name, nmb_doc.reference | |||
), | |||
"paid_to": accounts["bank"], | |||
} | |||
) | |||
payment_entry.flags.ignore_permissions = True | |||
# payment_entry.references = [] | |||
# payment_entry.set_missing_values() | |||
payment_entry.save() | |||
payment_entry.submit() | |||
return nmb_doc | |||
elif doc_info["doctype"] == "Student Applicant Fees": | |||
doc = frappe.get_doc("Student Applicant Fees", doc_info["name"]) | |||
if not doc.callback_token == nmb_doc.fees_token: | |||
return | |||
# Below remarked after introducing VFD in AV solutions | |||
# jl_rows = [] | |||
# debit_row = dict( | |||
# account=accounts["bank"], | |||
# debit_in_account_currency=nmb_amount, | |||
# account_currency=accounts["currency"], | |||
# cost_center=doc.cost_center, | |||
# ) | |||
# jl_rows.append(debit_row) | |||
# credit_row_1 = dict( | |||
# account=accounts["income"], | |||
# credit_in_account_currency=nmb_amount, | |||
# account_currency=accounts["currency"], | |||
# cost_center=doc.cost_center, | |||
# ) | |||
# jl_rows.append(credit_row_1) | |||
# user_remark = ( | |||
# "Journal Entry against {0} {1} via NMB Bank Payment {2}".format( | |||
# "Student Applicant Fees", doc_info["name"], nmb_doc.reference | |||
# ) | |||
# ) | |||
# jv_doc = frappe.get_doc( | |||
# dict( | |||
# doctype="Journal Entry", | |||
# posting_date=nmb_doc.timestamp, | |||
# accounts=jl_rows, | |||
# company=doc.company, | |||
# multi_currency=0, | |||
# user_remark=user_remark, | |||
# ) | |||
# ) | |||
# jv_doc.flags.ignore_permissions = True | |||
# frappe.flags.ignore_account_permission = True | |||
# jv_doc.save() | |||
# jv_doc.submit() | |||
# jv_url = frappe.utils.get_url_to_form(jv_doc.doctype, jv_doc.name) | |||
# si_msgprint = "Journal Entry Created <a href='{0}'>{1}</a>".format( | |||
# jv_url, jv_doc.name | |||
# ) | |||
# frappe.msgprint(_(si_msgprint)) | |||
frappe.db.set_value( | |||
"Student Applicant", doc.student, "application_status", "Approved" | |||
) | |||
return nmb_doc | |||
@frappe.whitelist(allow_guest=True) | |||
def receive_validate_reference(*args, **kwargs): | |||
r = frappe.request | |||
# uri = url_fix(r.url.replace("+"," ")) | |||
# http_method = r.method | |||
body = r.get_data() | |||
# headers = r.headers | |||
message = {} | |||
if body: | |||
data = body.decode("utf-8") | |||
msgs = ToObject(data) | |||
atr_list = list(msgs.__dict__) | |||
for atr in atr_list: | |||
if getattr(msgs, atr): | |||
message[atr] = getattr(msgs, atr) | |||
else: | |||
frappe.throw("This has no body!") | |||
doc_info = get_fee_info(message["reference"]) | |||
if doc_info["name"]: | |||
doc = frappe.get_doc(doc_info["doctype"], doc_info["name"]) | |||
response = dict( | |||
status=1, | |||
reference=doc.bank_reference, | |||
student_name=doc.student_name, | |||
student_id=doc.student, | |||
amount=doc.grand_total, | |||
type="Fees Invoice", | |||
code=10, | |||
allow_partial="FALSE", | |||
callback_url="https://" | |||
+ get_host_name() | |||
+ "/api/method/csf_tz.bank_api.receive_callback?token=" | |||
+ doc.callback_token, | |||
token=message["token"], | |||
) | |||
return response | |||
else: | |||
frappe.response["status"] = 0 | |||
frappe.response["description"] = "Not Exist" | |||
def cancel_invoice(doc, method): | |||
send_fee_details_to_bank = ( | |||
frappe.get_value("Company", doc.company, "send_fee_details_to_bank") or 0 | |||
) | |||
if not send_fee_details_to_bank: | |||
return | |||
data = { | |||
"reference": str(doc.bank_reference), | |||
} | |||
message = send_nmb("invoice_cancel", data, doc.company) | |||
frappe.msgprint(str(message)) | |||
def reconciliation(doc=None, method=None): | |||
companys = frappe.get_all("Company") | |||
for company in companys: | |||
if not frappe.get_value("Company", company["name"], "nmb_username"): | |||
continue | |||
data = {"reconcile_date": datetime.today().strftime("%d-%m-%Y")} | |||
frappe.msgprint(str(data)) | |||
message = send_nmb("reconcilliation", data, company["name"]) | |||
if message["status"] == 1 and len(message["transactions"]) > 0: | |||
for i in message["transactions"]: | |||
if ( | |||
len( | |||
frappe.get_all( | |||
"NMB Callback", | |||
filters=[ | |||
["NMB Callback", "reference", "=", i.reference], | |||
["NMB Callback", "receipt", "=", i.receipt], | |||
], | |||
fields=["name"], | |||
) | |||
) | |||
== 1 | |||
): | |||
doc_info = get_fee_info(message["reference"]) | |||
if doc_info["name"]: | |||
message["fees_token"] = frappe.get_value( | |||
doc_info["doctype"], doc_info["name"], "callback_token" | |||
) | |||
message["doctype"] = "NMB Callback" | |||
nmb_doc = frappe.get_doc(message) | |||
enqueue( | |||
method=make_payment_entry, | |||
queue="short", | |||
timeout=10000, | |||
is_async=True, | |||
kwargs=nmb_doc, | |||
) | |||
def get_fee_info(bank_reference): | |||
data = {"name": "", "doctype": ""} | |||
doc_list = frappe.get_all( | |||
"Fees", | |||
filters=[ | |||
["Fees", "bank_reference", "=", bank_reference], | |||
["Fees", "docstatus", "=", 1], | |||
], | |||
fields=["name", "company"], | |||
) | |||
if len(doc_list): | |||
data["name"] = doc_list[0]["name"] | |||
data["doctype"] = "Fees" | |||
data["company"] = doc_list[0]["company"] | |||
return data | |||
else: | |||
doc_list = frappe.get_all( | |||
"Student Applicant Fees", | |||
filters=[ | |||
["Student Applicant Fees", "bank_reference", "=", bank_reference], | |||
["Student Applicant Fees", "docstatus", "=", 1], | |||
], | |||
fields=["name", "company"], | |||
) | |||
if len(doc_list): | |||
data["name"] = doc_list[0]["name"] | |||
data["doctype"] = "Student Applicant Fees" | |||
data["company"] = doc_list[0]["company"] | |||
return data | |||
def get_fees_default_accounts(company): | |||
data = {"bank": "", "income": "", "currency": ""} | |||
data["currency"] = frappe.get_value("Company", company, "default_currency") or "" | |||
data["bank"] = frappe.get_value("Company", company, "fee_bank_account") or "" | |||
if not data["bank"]: | |||
data["bank"] = ( | |||
frappe.get_value("Company", company, "default_bank_account") or "" | |||
) | |||
data["income"] = ( | |||
frappe.get_value("Company", company, "student_applicant_fees_revenue_account") | |||
or "" | |||
) | |||
if not data["income"]: | |||
data["bank"] = ( | |||
frappe.get_value("Company", company, "default_income_account") or "" | |||
) | |||
if not data["bank"]: | |||
frappe.throw(_("Please set Fee Bank Account in Company {0}".format(company))) | |||
if not data["income"]: | |||
frappe.throw( | |||
_( | |||
"Please set Student Applicant Fees Revenue Account in Company {0}".format( | |||
company | |||
) | |||
) | |||
) | |||
return data | |||
@frappe.whitelist() | |||
def make_payment_entry_from_call(docname): | |||
nmb_doc = frappe.get_doc("NMB Callback", docname) | |||
make_payment_entry(method="frontend", kwargs=nmb_doc) |
@@ -0,0 +1,4 @@ | |||
#!/bin/bash | |||
bench restart | |||
bench clear-cache |