@@ -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 |