Merge develop into sla_fix
This commit is contained in:
commit
f38486b22c
@ -30,6 +30,20 @@ frappe.ui.form.on('Payment Entry', {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
frm.set_query("party_bank_account", function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"is_company_account":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
frm.set_query("bank_account", function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"is_company_account":1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
frm.set_query("contact_person", function() {
|
frm.set_query("contact_person", function() {
|
||||||
if (frm.doc.party) {
|
if (frm.doc.party) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -967,3 +967,37 @@ def get_party_and_account_balance(company, date, paid_from=None, paid_to=None, p
|
|||||||
"paid_from_account_balance": get_balance_on(paid_from, date, cost_center=cost_center),
|
"paid_from_account_balance": get_balance_on(paid_from, date, cost_center=cost_center),
|
||||||
"paid_to_account_balance": get_balance_on(paid_to, date=date, cost_center=cost_center)
|
"paid_to_account_balance": get_balance_on(paid_to, date=date, cost_center=cost_center)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def make_payment_order(source_name, target_doc=None):
|
||||||
|
from frappe.model.mapper import get_mapped_doc
|
||||||
|
def set_missing_values(source, target):
|
||||||
|
target.payment_order_type = "Payment Entry"
|
||||||
|
|
||||||
|
def update_item(source_doc, target_doc, source_parent):
|
||||||
|
target_doc.bank_account = source_parent.party_bank_account
|
||||||
|
target_doc.amount = source_parent.base_paid_amount
|
||||||
|
target_doc.account = source_parent.paid_to
|
||||||
|
target_doc.payment_entry = source_parent.name
|
||||||
|
target_doc.supplier = source_parent.party
|
||||||
|
target_doc.mode_of_payment = source_parent.mode_of_payment
|
||||||
|
|
||||||
|
|
||||||
|
doclist = get_mapped_doc("Payment Entry", source_name, {
|
||||||
|
"Payment Entry": {
|
||||||
|
"doctype": "Payment Order",
|
||||||
|
"validation": {
|
||||||
|
"docstatus": ["=", 1]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Payment Entry Reference": {
|
||||||
|
"doctype": "Payment Order Reference",
|
||||||
|
"validation": {
|
||||||
|
"docstatus": ["=", 1]
|
||||||
|
},
|
||||||
|
"postprocess": update_item
|
||||||
|
},
|
||||||
|
|
||||||
|
}, target_doc, set_missing_values)
|
||||||
|
|
||||||
|
return doclist
|
||||||
|
|||||||
@ -2,23 +2,79 @@
|
|||||||
// For license information, please see license.txt
|
// For license information, please see license.txt
|
||||||
|
|
||||||
frappe.ui.form.on('Payment Order', {
|
frappe.ui.form.on('Payment Order', {
|
||||||
|
setup: function(frm) {
|
||||||
|
frm.set_query("company_bank_account", function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"is_company_account":1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
refresh: function(frm) {
|
refresh: function(frm) {
|
||||||
if (frm.doc.docstatus == 0) {
|
if (frm.doc.docstatus == 0) {
|
||||||
frm.add_custom_button(__('Payment Request'), function() {
|
frm.add_custom_button(__('Payment Request'), function() {
|
||||||
frm.trigger("get_from_payment_request");
|
frm.trigger("get_from_payment_request");
|
||||||
}, __("Get from"));
|
}, __("Get from"));
|
||||||
|
|
||||||
|
frm.add_custom_button(__('Payment Entry'), function() {
|
||||||
|
frm.trigger("get_from_payment_entry");
|
||||||
|
}, __("Get from"));
|
||||||
|
|
||||||
|
frm.trigger('remove_button');
|
||||||
}
|
}
|
||||||
|
|
||||||
// payment Entry
|
// payment Entry
|
||||||
if (frm.doc.docstatus==1) {
|
if (frm.doc.docstatus===1 && frm.doc.payment_order_type==='Payment Request') {
|
||||||
frm.add_custom_button(__('Create Payment Entries'),
|
frm.add_custom_button(__('Create Payment Entries'), function() {
|
||||||
function() {
|
frm.trigger("make_payment_records");
|
||||||
frm.trigger("make_payment_records");
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
remove_row_if_empty: function(frm) {
|
||||||
|
// remove if first row is empty
|
||||||
|
if (frm.doc.references.length > 0 && !frm.doc.references[0].reference_name) {
|
||||||
|
frm.doc.references = [];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
remove_button: function(frm) {
|
||||||
|
// remove custom button of order type that is not imported
|
||||||
|
|
||||||
|
let label = ["Payment Request", "Payment Entry"];
|
||||||
|
|
||||||
|
if (frm.doc.references.length > 0 && frm.doc.payment_order_type) {
|
||||||
|
label = label.reduce(x => {
|
||||||
|
x!= frm.doc.payment_order_type;
|
||||||
|
return x;
|
||||||
|
});
|
||||||
|
frm.remove_custom_button(label, "Get from");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
get_from_payment_entry: function(frm) {
|
||||||
|
frm.trigger("remove_row_if_empty");
|
||||||
|
erpnext.utils.map_current_doc({
|
||||||
|
method: "erpnext.accounts.doctype.payment_entry.payment_entry.make_payment_order",
|
||||||
|
source_doctype: "Payment Entry",
|
||||||
|
target: frm,
|
||||||
|
date_field: "posting_date",
|
||||||
|
setters: {
|
||||||
|
party: frm.doc.supplier || ""
|
||||||
|
},
|
||||||
|
get_query_filters: {
|
||||||
|
bank: frm.doc.bank,
|
||||||
|
docstatus: 1,
|
||||||
|
bank_account: frm.doc.company_bank_account,
|
||||||
|
paid_from: frm.doc.account,
|
||||||
|
status: ["=", "Initiated"],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
get_from_payment_request: function(frm) {
|
get_from_payment_request: function(frm) {
|
||||||
|
frm.trigger("remove_row_if_empty");
|
||||||
erpnext.utils.map_current_doc({
|
erpnext.utils.map_current_doc({
|
||||||
method: "erpnext.accounts.doctype.payment_request.payment_request.make_payment_order",
|
method: "erpnext.accounts.doctype.payment_request.payment_request.make_payment_order",
|
||||||
source_doctype: "Payment Request",
|
source_doctype: "Payment Request",
|
||||||
@ -79,5 +135,4 @@ frappe.ui.form.on('Payment Order', {
|
|||||||
|
|
||||||
dialog.show();
|
dialog.show();
|
||||||
},
|
},
|
||||||
|
});
|
||||||
});
|
|
||||||
@ -1,375 +1,151 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"autoname": "naming_series:",
|
||||||
"allow_guest_to_view": 0,
|
"creation": "2018-07-20 16:43:08.505978",
|
||||||
"allow_import": 0,
|
"doctype": "DocType",
|
||||||
"allow_rename": 0,
|
"editable_grid": 1,
|
||||||
"autoname": "naming_series:",
|
"engine": "InnoDB",
|
||||||
"beta": 0,
|
"field_order": [
|
||||||
"creation": "2018-07-20 16:43:08.505978",
|
"naming_series",
|
||||||
"custom": 0,
|
"company",
|
||||||
"docstatus": 0,
|
"payment_order_type",
|
||||||
"doctype": "DocType",
|
"party",
|
||||||
"document_type": "",
|
"column_break_2",
|
||||||
"editable_grid": 1,
|
"posting_date",
|
||||||
"engine": "InnoDB",
|
"company_bank",
|
||||||
|
"company_bank_account",
|
||||||
|
"account",
|
||||||
|
"section_break_5",
|
||||||
|
"references",
|
||||||
|
"amended_from"
|
||||||
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"default": "PMO-",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldname": "naming_series",
|
||||||
"allow_on_submit": 0,
|
"fieldtype": "Select",
|
||||||
"bold": 0,
|
"label": "Series",
|
||||||
"collapsible": 0,
|
"no_copy": 1,
|
||||||
"columns": 0,
|
"options": "PMO-",
|
||||||
"default": "PMO-",
|
"reqd": 1
|
||||||
"fieldname": "naming_series",
|
},
|
||||||
"fieldtype": "Select",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Series",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "PMO-",
|
|
||||||
"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,
|
"fieldname": "company",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"label": "Company",
|
||||||
"bold": 0,
|
"options": "Company",
|
||||||
"collapsible": 0,
|
"reqd": 1
|
||||||
"columns": 0,
|
},
|
||||||
"fieldname": "company",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Company",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Company",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"depends_on": "eval: doc.payment_order_type=='Payment Request';",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldname": "party",
|
||||||
"allow_on_submit": 0,
|
"fieldtype": "Link",
|
||||||
"bold": 0,
|
"in_list_view": 1,
|
||||||
"collapsible": 0,
|
"label": "Supplier",
|
||||||
"columns": 0,
|
"options": "Supplier"
|
||||||
"fieldname": "party",
|
},
|
||||||
"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": "Supplier",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Supplier",
|
|
||||||
"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,
|
"fieldname": "column_break_2",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Column Break"
|
||||||
"allow_on_submit": 0,
|
},
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "column_break_2",
|
|
||||||
"fieldtype": "Column Break",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"default": "Today",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldname": "posting_date",
|
||||||
"allow_on_submit": 0,
|
"fieldtype": "Date",
|
||||||
"bold": 0,
|
"in_list_view": 1,
|
||||||
"collapsible": 0,
|
"label": "Posting Date"
|
||||||
"columns": 0,
|
},
|
||||||
"default": "Today",
|
|
||||||
"fieldname": "posting_date",
|
|
||||||
"fieldtype": "Date",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Posting 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,
|
"fieldname": "section_break_5",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Section Break"
|
||||||
"allow_on_submit": 0,
|
},
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "bank",
|
|
||||||
"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": "Bank",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Bank",
|
|
||||||
"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_bulk_edit": 1,
|
||||||
"allow_in_quick_entry": 0,
|
"fieldname": "references",
|
||||||
"allow_on_submit": 0,
|
"fieldtype": "Table",
|
||||||
"bold": 0,
|
"label": "Payment Order Reference",
|
||||||
"collapsible": 0,
|
"options": "Payment Order Reference",
|
||||||
"columns": 0,
|
"reqd": 1
|
||||||
"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,
|
"fieldname": "amended_from",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"label": "Amended From",
|
||||||
"bold": 0,
|
"no_copy": 1,
|
||||||
"collapsible": 0,
|
"options": "Payment Order",
|
||||||
"columns": 0,
|
"print_hide": 1,
|
||||||
"fieldname": "references",
|
"read_only": 1
|
||||||
"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": "Payment Order Reference",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Payment Order Reference",
|
|
||||||
"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,
|
"fieldname": "payment_order_type",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Select",
|
||||||
"allow_on_submit": 0,
|
"label": "Payment Order Type",
|
||||||
"bold": 0,
|
"options": "\nPayment Request\nPayment Entry",
|
||||||
"collapsible": 0,
|
"read_only": 1,
|
||||||
"columns": 0,
|
"reqd": 1
|
||||||
"fieldname": "amended_from",
|
},
|
||||||
"fieldtype": "Link",
|
{
|
||||||
"hidden": 0,
|
"fieldname": "company_bank_account",
|
||||||
"ignore_user_permissions": 0,
|
"fieldtype": "Link",
|
||||||
"ignore_xss_filter": 0,
|
"label": "Company Bank Account",
|
||||||
"in_filter": 0,
|
"options": "Bank Account",
|
||||||
"in_global_search": 0,
|
"reqd": 1
|
||||||
"in_list_view": 0,
|
},
|
||||||
"in_standard_filter": 0,
|
{
|
||||||
"label": "Amended From",
|
"depends_on": "company_bank_account",
|
||||||
"length": 0,
|
"fetch_from": "company_bank_account.bank",
|
||||||
"no_copy": 1,
|
"fieldname": "company_bank",
|
||||||
"options": "Payment Order",
|
"fieldtype": "Link",
|
||||||
"permlevel": 0,
|
"in_list_view": 1,
|
||||||
"print_hide": 1,
|
"label": "Bank",
|
||||||
"print_hide_if_no_value": 0,
|
"options": "Bank"
|
||||||
"read_only": 1,
|
},
|
||||||
"remember_last_selected_value": 0,
|
{
|
||||||
"report_hide": 0,
|
"depends_on": "company_bank_account",
|
||||||
"reqd": 0,
|
"fetch_from": "company_bank_account.account",
|
||||||
"search_index": 0,
|
"fieldname": "account",
|
||||||
"set_only_once": 0,
|
"fieldtype": "Data",
|
||||||
"translatable": 0,
|
"label": "Account"
|
||||||
"unique": 0
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"has_web_view": 0,
|
"is_submittable": 1,
|
||||||
"hide_heading": 0,
|
"modified": "2019-05-14 17:12:24.912666",
|
||||||
"hide_toolbar": 0,
|
"modified_by": "Administrator",
|
||||||
"idx": 0,
|
"module": "Accounts",
|
||||||
"image_view": 0,
|
"name": "Payment Order",
|
||||||
"in_create": 0,
|
"owner": "Administrator",
|
||||||
"is_submittable": 1,
|
|
||||||
"issingle": 0,
|
|
||||||
"istable": 0,
|
|
||||||
"max_attachments": 0,
|
|
||||||
"modified": "2018-07-31 18:48:00.681271",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Accounts",
|
|
||||||
"name": "Payment Order",
|
|
||||||
"name_case": "",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
"amend": 1,
|
"amend": 1,
|
||||||
"cancel": 1,
|
"cancel": 1,
|
||||||
"create": 1,
|
"create": 1,
|
||||||
"delete": 1,
|
"delete": 1,
|
||||||
"email": 1,
|
"email": 1,
|
||||||
"export": 1,
|
"export": 1,
|
||||||
"if_owner": 0,
|
"print": 1,
|
||||||
"import": 0,
|
"read": 1,
|
||||||
"permlevel": 0,
|
"report": 1,
|
||||||
"print": 1,
|
"role": "Accounts User",
|
||||||
"read": 1,
|
"share": 1,
|
||||||
"report": 1,
|
"submit": 1,
|
||||||
"role": "Accounts User",
|
|
||||||
"set_user_permissions": 0,
|
|
||||||
"share": 1,
|
|
||||||
"submit": 1,
|
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"amend": 1,
|
"amend": 1,
|
||||||
"cancel": 1,
|
"cancel": 1,
|
||||||
"create": 1,
|
"create": 1,
|
||||||
"delete": 1,
|
"delete": 1,
|
||||||
"email": 1,
|
"email": 1,
|
||||||
"export": 1,
|
"export": 1,
|
||||||
"if_owner": 0,
|
"print": 1,
|
||||||
"import": 0,
|
"read": 1,
|
||||||
"permlevel": 0,
|
"report": 1,
|
||||||
"print": 1,
|
"role": "Accounts Manager",
|
||||||
"read": 1,
|
"share": 1,
|
||||||
"report": 1,
|
"submit": 1,
|
||||||
"role": "Accounts Manager",
|
|
||||||
"set_user_permissions": 0,
|
|
||||||
"share": 1,
|
|
||||||
"submit": 1,
|
|
||||||
"write": 1
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"quick_entry": 0,
|
"sort_field": "modified",
|
||||||
"read_only": 0,
|
"sort_order": "DESC",
|
||||||
"read_only_onload": 0,
|
"track_changes": 1
|
||||||
"show_name_in_global_search": 0,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1,
|
|
||||||
"track_seen": 0,
|
|
||||||
"track_views": 0
|
|
||||||
}
|
}
|
||||||
@ -11,18 +11,20 @@ from frappe.model.document import Document
|
|||||||
|
|
||||||
class PaymentOrder(Document):
|
class PaymentOrder(Document):
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
self.update_payment_request_status()
|
self.update_payment_status()
|
||||||
|
|
||||||
def on_cancel(self):
|
def on_cancel(self):
|
||||||
self.update_payment_request_status(cancel=True)
|
self.update_payment_status(cancel=True)
|
||||||
|
|
||||||
def update_payment_request_status(self, cancel=False):
|
def update_payment_status(self, cancel=False):
|
||||||
status = 'Payment Ordered'
|
status = 'Payment Ordered'
|
||||||
if cancel:
|
if cancel:
|
||||||
status = 'Initiated'
|
status = 'Initiated'
|
||||||
|
|
||||||
|
ref_field = "status" if self.payment_order_type == "Payment Request" else "payment_order_status"
|
||||||
|
|
||||||
for d in self.references:
|
for d in self.references:
|
||||||
frappe.db.set_value('Payment Request', d.payment_request, 'status', status)
|
frappe.db.set_value(self.payment_order_type, d.get(frappe.scrub(self.payment_order_type)), ref_field, status)
|
||||||
|
|
||||||
def get_mop_query(doctype, txt, searchfield, start, page_len, filters):
|
def get_mop_query(doctype, txt, searchfield, start, page_len, filters):
|
||||||
return frappe.db.sql(""" select mode_of_payment from `tabPayment Order Reference`
|
return frappe.db.sql(""" select mode_of_payment from `tabPayment Order Reference`
|
||||||
@ -60,7 +62,7 @@ def make_journal_entry(doc, supplier, mode_of_payment=None):
|
|||||||
je.voucher_type = 'Bank Entry'
|
je.voucher_type = 'Bank Entry'
|
||||||
if mode_of_payment and mode_of_payment_type.get(mode_of_payment) == 'Cash':
|
if mode_of_payment and mode_of_payment_type.get(mode_of_payment) == 'Cash':
|
||||||
je.voucher_type = "Cash Entry"
|
je.voucher_type = "Cash Entry"
|
||||||
|
|
||||||
paid_amt = 0
|
paid_amt = 0
|
||||||
party_account = get_party_account('Supplier', supplier, doc.company)
|
party_account = get_party_account('Supplier', supplier, doc.company)
|
||||||
for d in doc.references:
|
for d in doc.references:
|
||||||
@ -84,4 +86,4 @@ def make_journal_entry(doc, supplier, mode_of_payment=None):
|
|||||||
|
|
||||||
je.flags.ignore_mandatory = True
|
je.flags.ignore_mandatory = True
|
||||||
je.save()
|
je.save()
|
||||||
frappe.msgprint(_("{0} {1} created").format(je.doctype, je.name))
|
frappe.msgprint(_("{0} {1} created").format(je.doctype, je.name))
|
||||||
29
erpnext/accounts/doctype/payment_order/regional/india.js
Normal file
29
erpnext/accounts/doctype/payment_order/regional/india.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
frappe.ui.form.on('Payment Order', {
|
||||||
|
refresh: function(frm) {
|
||||||
|
if (frm.doc.docstatus==1 && frm.doc.payment_order_type==='Payment Entry') {
|
||||||
|
frm.add_custom_button(__('Generate Text File'), function() {
|
||||||
|
frm.trigger("generate_text_and_download_file");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
generate_text_and_download_file: (frm) => {
|
||||||
|
return frappe.call({
|
||||||
|
method: "erpnext.regional.india.bank_remittance_txt.generate_report",
|
||||||
|
args: {
|
||||||
|
name: frm.doc.name
|
||||||
|
},
|
||||||
|
freeze: true,
|
||||||
|
callback: function(r) {
|
||||||
|
{
|
||||||
|
frm.reload_doc();
|
||||||
|
const a = document.createElement('a');
|
||||||
|
let file_obj = r.message;
|
||||||
|
a.href = file_obj.file_url;
|
||||||
|
a.target = '_blank';
|
||||||
|
a.download = file_obj.file_name;
|
||||||
|
a.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -1,433 +1,126 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"creation": "2018-07-20 16:38:06.630813",
|
||||||
"allow_guest_to_view": 0,
|
"doctype": "DocType",
|
||||||
"allow_import": 0,
|
"editable_grid": 1,
|
||||||
"allow_rename": 0,
|
"engine": "InnoDB",
|
||||||
"beta": 0,
|
"field_order": [
|
||||||
"creation": "2018-07-20 16:38:06.630813",
|
"reference_doctype",
|
||||||
"custom": 0,
|
"reference_name",
|
||||||
"docstatus": 0,
|
"amount",
|
||||||
"doctype": "DocType",
|
"column_break_4",
|
||||||
"document_type": "",
|
"supplier",
|
||||||
"editable_grid": 1,
|
"payment_request",
|
||||||
"engine": "InnoDB",
|
"payment_entry",
|
||||||
|
"mode_of_payment",
|
||||||
|
"bank_account_details",
|
||||||
|
"bank_account",
|
||||||
|
"column_break_10",
|
||||||
|
"account",
|
||||||
|
"payment_reference"
|
||||||
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "reference_doctype",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"in_list_view": 1,
|
||||||
"bold": 0,
|
"label": "Type",
|
||||||
"collapsible": 0,
|
"options": "DocType",
|
||||||
"columns": 0,
|
"read_only": 1,
|
||||||
"fieldname": "reference_doctype",
|
"reqd": 1
|
||||||
"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": "Type",
|
|
||||||
"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,
|
"fieldname": "reference_name",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Dynamic Link",
|
||||||
"allow_on_submit": 0,
|
"in_list_view": 1,
|
||||||
"bold": 0,
|
"label": "Name",
|
||||||
"collapsible": 0,
|
"options": "reference_doctype",
|
||||||
"columns": 0,
|
"read_only": 1,
|
||||||
"fieldname": "reference_name",
|
"reqd": 1
|
||||||
"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": 0,
|
|
||||||
"label": "Name",
|
|
||||||
"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,
|
"fieldname": "amount",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Currency",
|
||||||
"allow_on_submit": 0,
|
"in_list_view": 1,
|
||||||
"bold": 0,
|
"label": "Amount",
|
||||||
"collapsible": 0,
|
"read_only": 1,
|
||||||
"columns": 0,
|
"reqd": 1
|
||||||
"fieldname": "amount",
|
},
|
||||||
"fieldtype": "Currency",
|
|
||||||
"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": 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,
|
"fieldname": "column_break_4",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Column Break"
|
||||||
"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,
|
"fieldname": "supplier",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"in_standard_filter": 1,
|
||||||
"bold": 0,
|
"label": "Supplier",
|
||||||
"collapsible": 0,
|
"options": "Supplier",
|
||||||
"columns": 0,
|
"read_only": 1
|
||||||
"fieldname": "supplier",
|
},
|
||||||
"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": "Supplier",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Supplier",
|
|
||||||
"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,
|
"fieldname": "payment_request",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"label": "Payment Request",
|
||||||
"bold": 0,
|
"options": "Payment Request",
|
||||||
"collapsible": 0,
|
"read_only": 1
|
||||||
"columns": 0,
|
},
|
||||||
"fieldname": "payment_request",
|
|
||||||
"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": "Payment Request",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Payment Request",
|
|
||||||
"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,
|
"fetch_from": "payment_request.mode_of_payment",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldname": "mode_of_payment",
|
||||||
"allow_on_submit": 0,
|
"fieldtype": "Link",
|
||||||
"bold": 0,
|
"label": "Mode of Payment",
|
||||||
"collapsible": 0,
|
"options": "Mode of Payment",
|
||||||
"columns": 0,
|
"read_only": 1
|
||||||
"fetch_from": "payment_request.mode_of_payment",
|
},
|
||||||
"fieldname": "mode_of_payment",
|
|
||||||
"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": "Mode of Payment",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Mode of Payment",
|
|
||||||
"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,
|
"fieldname": "bank_account_details",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Section Break",
|
||||||
"allow_on_submit": 0,
|
"label": "Bank Account Details"
|
||||||
"bold": 0,
|
},
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "bank_account_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": "Bank Account 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,
|
"fieldname": "bank_account",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"label": "Bank Account",
|
||||||
"bold": 0,
|
"options": "Bank Account",
|
||||||
"collapsible": 0,
|
"read_only": 1,
|
||||||
"columns": 0,
|
"reqd": 1
|
||||||
"fieldname": "bank_account",
|
},
|
||||||
"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": "Bank Account",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Bank Account",
|
|
||||||
"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,
|
"fieldname": "column_break_10",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Column Break"
|
||||||
"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,
|
"fieldname": "account",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"label": "Account",
|
||||||
"bold": 0,
|
"options": "Account",
|
||||||
"collapsible": 0,
|
"read_only": 1
|
||||||
"columns": 0,
|
},
|
||||||
"fieldname": "account",
|
|
||||||
"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": "Account",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Account",
|
|
||||||
"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,
|
"fieldname": "payment_reference",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Data",
|
||||||
"allow_on_submit": 0,
|
"label": "Payment Reference",
|
||||||
"bold": 0,
|
"no_copy": 1,
|
||||||
"collapsible": 0,
|
"print_hide": 1,
|
||||||
"columns": 0,
|
"read_only": 1
|
||||||
"fieldname": "payment_reference",
|
},
|
||||||
"fieldtype": "Data",
|
{
|
||||||
"hidden": 0,
|
"fieldname": "payment_entry",
|
||||||
"ignore_user_permissions": 0,
|
"fieldtype": "Link",
|
||||||
"ignore_xss_filter": 0,
|
"label": "Payment Entry",
|
||||||
"in_filter": 0,
|
"options": "Payment Entry",
|
||||||
"in_global_search": 0,
|
"read_only": 1
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Payment Reference",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 1,
|
|
||||||
"options": "",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"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,
|
"istable": 1,
|
||||||
"hide_heading": 0,
|
"modified": "2019-05-08 13:56:25.724557",
|
||||||
"hide_toolbar": 0,
|
"modified_by": "Administrator",
|
||||||
"idx": 0,
|
"module": "Accounts",
|
||||||
"image_view": 0,
|
"name": "Payment Order Reference",
|
||||||
"in_create": 0,
|
"owner": "Administrator",
|
||||||
"is_submittable": 0,
|
"permissions": [],
|
||||||
"issingle": 0,
|
"quick_entry": 1,
|
||||||
"istable": 1,
|
"sort_field": "modified",
|
||||||
"max_attachments": 0,
|
"sort_order": "DESC",
|
||||||
"modified": "2018-07-31 17:21:37.698644",
|
"track_changes": 1
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Accounts",
|
|
||||||
"name": "Payment Order Reference",
|
|
||||||
"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,
|
|
||||||
"track_views": 0
|
|
||||||
}
|
}
|
||||||
@ -14,7 +14,6 @@ from frappe.integrations.utils import get_payment_gateway_controller
|
|||||||
from frappe.utils.background_jobs import enqueue
|
from frappe.utils.background_jobs import enqueue
|
||||||
from erpnext.erpnext_integrations.stripe_integration import create_stripe_subscription
|
from erpnext.erpnext_integrations.stripe_integration import create_stripe_subscription
|
||||||
from erpnext.accounts.doctype.subscription_plan.subscription_plan import get_plan_rate
|
from erpnext.accounts.doctype.subscription_plan.subscription_plan import get_plan_rate
|
||||||
from frappe.model.mapper import get_mapped_doc
|
|
||||||
|
|
||||||
class PaymentRequest(Document):
|
class PaymentRequest(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
@ -426,7 +425,9 @@ def get_subscription_details(reference_doctype, reference_name):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_payment_order(source_name, target_doc=None):
|
def make_payment_order(source_name, target_doc=None):
|
||||||
|
from frappe.model.mapper import get_mapped_doc
|
||||||
def set_missing_values(source, target):
|
def set_missing_values(source, target):
|
||||||
|
target.payment_order_type = "Payment Request"
|
||||||
target.append('references', {
|
target.append('references', {
|
||||||
'reference_doctype': source.reference_doctype,
|
'reference_doctype': source.reference_doctype,
|
||||||
'reference_name': source.reference_name,
|
'reference_name': source.reference_name,
|
||||||
@ -444,4 +445,4 @@ def make_payment_order(source_name, target_doc=None):
|
|||||||
}
|
}
|
||||||
}, target_doc, set_missing_values)
|
}, target_doc, set_missing_values)
|
||||||
|
|
||||||
return doclist
|
return doclist
|
||||||
@ -463,8 +463,8 @@ def get_timeline_data(doctype, name):
|
|||||||
after = add_years(None, -1).strftime('%Y-%m-%d')
|
after = add_years(None, -1).strftime('%Y-%m-%d')
|
||||||
group_by='group by date(creation)'
|
group_by='group by date(creation)'
|
||||||
|
|
||||||
data = get_communication_data(doctype, name,
|
data = get_communication_data(doctype, name, after=after, group_by='group by date(`tabCommunication`.creation)',
|
||||||
fields=fields, after=after, group_by=group_by, as_dict=False)
|
fields='date(`tabCommunication`.creation), count(`tabCommunication`.name)',as_dict=False)
|
||||||
|
|
||||||
# fetch and append data from Activity Log
|
# fetch and append data from Activity Log
|
||||||
data += frappe.db.sql("""select {fields}
|
data += frappe.db.sql("""select {fields}
|
||||||
|
|||||||
@ -211,6 +211,11 @@ frappe.query_reports["General Ledger"] = {
|
|||||||
"label": __("Currency"),
|
"label": __("Currency"),
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"options": erpnext.get_presentation_currency_list()
|
"options": erpnext.get_presentation_currency_list()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "show_opening_entries",
|
||||||
|
"label": __("Show Opening Entries"),
|
||||||
|
"fieldtype": "Check"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -283,7 +283,8 @@ def get_accountwise_gle(filters, gl_entries, gle_map):
|
|||||||
|
|
||||||
from_date, to_date = getdate(filters.from_date), getdate(filters.to_date)
|
from_date, to_date = getdate(filters.from_date), getdate(filters.to_date)
|
||||||
for gle in gl_entries:
|
for gle in gl_entries:
|
||||||
if gle.posting_date < from_date or cstr(gle.is_opening) == "Yes":
|
if (gle.posting_date < from_date or
|
||||||
|
(cstr(gle.is_opening) == "Yes" and not filters.get("show_opening_entries"))):
|
||||||
update_value_in_dict(gle_map[gle.get(group_by)].totals, 'opening', gle)
|
update_value_in_dict(gle_map[gle.get(group_by)].totals, 'opening', gle)
|
||||||
update_value_in_dict(totals, 'opening', gle)
|
update_value_in_dict(totals, 'opening', gle)
|
||||||
|
|
||||||
|
|||||||
@ -17,6 +17,13 @@ frappe.ui.form.on("Supplier", {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
frm.set_query("default_bank_account", function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"is_company_account":1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
refresh: function (frm) {
|
refresh: function (frm) {
|
||||||
frappe.dynamic_link = { doc: frm.doc, fieldname: 'name', doctype: 'Supplier' }
|
frappe.dynamic_link = { doc: frm.doc, fieldname: 'name', doctype: 'Supplier' }
|
||||||
|
|||||||
@ -12,6 +12,16 @@ def get_data():
|
|||||||
"description": _("Support queries from customers."),
|
"description": _("Support queries from customers."),
|
||||||
"onboard": 1,
|
"onboard": 1,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "doctype",
|
||||||
|
"name": "Issue Type",
|
||||||
|
"description": _("Issue Type."),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "doctype",
|
||||||
|
"name": "Issue Priority",
|
||||||
|
"description": _("Issue Priority."),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "doctype",
|
"type": "doctype",
|
||||||
"name": "Communication",
|
"name": "Communication",
|
||||||
|
|||||||
@ -602,7 +602,4 @@ erpnext.patches.v11_1.set_salary_details_submittable
|
|||||||
erpnext.patches.v11_1.rename_depends_on_lwp
|
erpnext.patches.v11_1.rename_depends_on_lwp
|
||||||
execute:frappe.delete_doc("Report", "Inactive Items")
|
execute:frappe.delete_doc("Report", "Inactive Items")
|
||||||
erpnext.patches.v11_1.delete_scheduling_tool
|
erpnext.patches.v11_1.delete_scheduling_tool
|
||||||
execute:frappe.reload_doc('support', 'doctype', 'service_level_priority')
|
erpnext.patches.v12_0.make_custom_fields_for_bank_remittance
|
||||||
execute:frappe.reload_doc('support', 'doctype', 'service_level')
|
|
||||||
execute:frappe.reload_doc('support', 'doctype', 'service_level_agreement')
|
|
||||||
erpnext.patches.v12_0.move_parameters_to_priority
|
|
||||||
|
|||||||
@ -0,0 +1,10 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
from erpnext.regional.india.setup import make_custom_fields
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
company = frappe.get_all('Company', filters = {'country': 'India'})
|
||||||
|
if not company:
|
||||||
|
return
|
||||||
|
|
||||||
|
make_custom_fields()
|
||||||
190
erpnext/regional/india/bank_remittance.py
Normal file
190
erpnext/regional/india/bank_remittance.py
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) 2018, Frappe and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
from frappe.model.document import Document
|
||||||
|
from frappe.utils import cint,cstr, today
|
||||||
|
from frappe import _
|
||||||
|
import re
|
||||||
|
import datetime
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
def create_bank_remittance_txt(name):
|
||||||
|
payment_order = frappe.get_cached_doc("Payment Order", name)
|
||||||
|
|
||||||
|
no_of_records = len(payment_order.get("references"))
|
||||||
|
total_amount = sum(entry.get("amount") for entry in payment_order.get("references"))
|
||||||
|
|
||||||
|
product_code, client_code, company_email = frappe.db.get_value("Company",
|
||||||
|
filters={'name' : payment_order.company},
|
||||||
|
fieldname=['product_code', 'client_code', 'email'])
|
||||||
|
|
||||||
|
header, file_name = get_header_row(payment_order, client_code)
|
||||||
|
batch = get_batch_row(payment_order, no_of_records, total_amount, product_code)
|
||||||
|
|
||||||
|
detail = []
|
||||||
|
for ref_doc in payment_order.get("references"):
|
||||||
|
detail += get_detail_row(ref_doc, payment_order, company_email)
|
||||||
|
|
||||||
|
trailer = get_trailer_row(no_of_records, total_amount)
|
||||||
|
detail_records = "\n".join(detail)
|
||||||
|
|
||||||
|
return "\n".join([header, batch, detail_records, trailer]), file_name
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def generate_report(name):
|
||||||
|
data, file_name = create_bank_remittance_txt(name)
|
||||||
|
|
||||||
|
f = frappe.get_doc({
|
||||||
|
'doctype': 'File',
|
||||||
|
'file_name': file_name,
|
||||||
|
'content': data,
|
||||||
|
"attached_to_doctype": 'Payment Order',
|
||||||
|
"attached_to_name": name,
|
||||||
|
'is_private': True
|
||||||
|
})
|
||||||
|
f.save()
|
||||||
|
return {
|
||||||
|
'file_url': f.file_url,
|
||||||
|
'file_name': file_name
|
||||||
|
}
|
||||||
|
|
||||||
|
def generate_file_name(name, company_account, date):
|
||||||
|
''' generate file name with format (account_code)_mmdd_(payment_order_no) '''
|
||||||
|
bank, acc_no = frappe.db.get_value("Bank Account", {"name": company_account}, ['bank', 'bank_account_no'])
|
||||||
|
return bank[:1]+str(acc_no)[-4:]+'_'+date.strftime("%m%d")+sanitize_data(name, '')[4:]+'.txt'
|
||||||
|
|
||||||
|
def get_header_row(doc, client_code):
|
||||||
|
''' Returns header row and generated file name '''
|
||||||
|
file_name = generate_file_name(doc.name, doc.company_bank_account, doc.posting_date)
|
||||||
|
header = ["H"]
|
||||||
|
header.append(validate_field_size(client_code, "Client Code", 20))
|
||||||
|
header += [''] * 3
|
||||||
|
header.append(validate_field_size(file_name, "File Name", 20))
|
||||||
|
return "~".join(header), file_name
|
||||||
|
|
||||||
|
def get_batch_row(doc, no_of_records, total_amount, product_code):
|
||||||
|
batch = ["B"]
|
||||||
|
batch.append(validate_field_size(no_of_records, "No Of Records", 5))
|
||||||
|
batch.append(validate_amount(format(total_amount, '0.2f'), 17))
|
||||||
|
batch.append(sanitize_data(doc.name, '_')[:20])
|
||||||
|
batch.append(format_date(doc.posting_date))
|
||||||
|
batch.append(validate_field_size(product_code,"Product Code", 20))
|
||||||
|
return "~".join(batch)
|
||||||
|
|
||||||
|
def get_detail_row(ref_doc, payment_entry, company_email):
|
||||||
|
|
||||||
|
payment_date = format_date(payment_entry.posting_date)
|
||||||
|
payment_entry = frappe.get_cached_doc('Payment Entry', ref_doc.payment_entry)
|
||||||
|
supplier_bank_details = frappe.get_cached_doc('Bank Account', ref_doc.bank_account)
|
||||||
|
company_bank_acc_no = frappe.db.get_value("Bank Account", {'name': payment_entry.bank_account}, ['bank_account_no'])
|
||||||
|
|
||||||
|
addr_link = frappe.db.get_value('Dynamic Link',
|
||||||
|
{
|
||||||
|
'link_doctype': 'Supplier',
|
||||||
|
'link_name': 'Sample Supplier',
|
||||||
|
'parenttype':'Address',
|
||||||
|
'parent': ('like', '%-Billing')
|
||||||
|
}, 'parent')
|
||||||
|
|
||||||
|
supplier_billing_address = frappe.get_cached_doc('Address', addr_link)
|
||||||
|
email = ','.join(filter(None, [supplier_billing_address.email_id, company_email]))
|
||||||
|
|
||||||
|
detail = OrderedDict(
|
||||||
|
record_identifier='D',
|
||||||
|
payment_ref_no=sanitize_data(ref_doc.payment_entry),
|
||||||
|
payment_type=cstr(payment_entry.mode_of_payment)[:10],
|
||||||
|
amount=str(validate_amount(format(ref_doc.amount, '.2f'),13)),
|
||||||
|
payment_date=payment_date,
|
||||||
|
instrument_date=payment_date,
|
||||||
|
instrument_number='',
|
||||||
|
dr_account_no_client=str(validate_field_size(company_bank_acc_no, "Company Bank Account", 20)),
|
||||||
|
dr_description='',
|
||||||
|
dr_ref_no='',
|
||||||
|
cr_ref_no='',
|
||||||
|
bank_code_indicator='M',
|
||||||
|
beneficiary_code='',
|
||||||
|
beneficiary_name=sanitize_data(validate_information(payment_entry, "party", 160), ' '),
|
||||||
|
beneficiary_bank=sanitize_data(validate_information(supplier_bank_details, "bank", 10)),
|
||||||
|
beneficiary_branch_code=cstr(validate_information(supplier_bank_details, "branch_code", 11)),
|
||||||
|
beneficiary_acc_no=validate_information(supplier_bank_details, "bank_account_no", 20),
|
||||||
|
location='',
|
||||||
|
print_location='',
|
||||||
|
beneficiary_address_1=validate_field_size(sanitize_data(cstr(supplier_billing_address.address_line1), ' '), " Beneficiary Address 1", 50),
|
||||||
|
beneficiary_address_2=validate_field_size(sanitize_data(cstr(supplier_billing_address.address_line2), ' '), " Beneficiary Address 2", 50),
|
||||||
|
beneficiary_address_3='',
|
||||||
|
beneficiary_address_4='',
|
||||||
|
beneficiary_address_5='',
|
||||||
|
beneficiary_city=validate_field_size(cstr(supplier_billing_address.city), "Beneficiary City", 20),
|
||||||
|
beneficiary_zipcode=validate_field_size(cstr(supplier_billing_address.pincode), "Pin Code", 6),
|
||||||
|
beneficiary_state=validate_field_size(cstr(supplier_billing_address.state), "Beneficiary State", 20),
|
||||||
|
beneficiary_email=cstr(email)[:255],
|
||||||
|
beneficiary_mobile=validate_field_size(cstr(supplier_billing_address.phone), "Beneficiary Mobile", 10),
|
||||||
|
payment_details_1='',
|
||||||
|
payment_details_2='',
|
||||||
|
payment_details_3='',
|
||||||
|
payment_details_4='',
|
||||||
|
delivery_mode=''
|
||||||
|
)
|
||||||
|
detail_record = ["~".join(list(detail.values()))]
|
||||||
|
|
||||||
|
detail_record += get_advice_rows(payment_entry)
|
||||||
|
return detail_record
|
||||||
|
|
||||||
|
def get_advice_rows(payment_entry):
|
||||||
|
''' Returns multiple advice rows for a single detail entry '''
|
||||||
|
payment_entry_date = payment_entry.posting_date.strftime("%b%y%d%m").upper()
|
||||||
|
mode_of_payment = payment_entry.mode_of_payment
|
||||||
|
advice_rows = []
|
||||||
|
for record in payment_entry.references:
|
||||||
|
advice = ['E']
|
||||||
|
advice.append(cstr(mode_of_payment))
|
||||||
|
advice.append(cstr(record.total_amount))
|
||||||
|
advice.append('')
|
||||||
|
advice.append(cstr(record.outstanding_amount))
|
||||||
|
advice.append(record.reference_name)
|
||||||
|
advice.append(format_date(record.due_date))
|
||||||
|
advice.append(payment_entry_date)
|
||||||
|
advice_rows.append("~".join(advice))
|
||||||
|
return advice_rows
|
||||||
|
|
||||||
|
def get_trailer_row(no_of_records, total_amount):
|
||||||
|
''' Returns trailer row '''
|
||||||
|
trailer = ["T"]
|
||||||
|
trailer.append(validate_field_size(no_of_records, "No of Records", 5))
|
||||||
|
trailer.append(validate_amount(format(total_amount, "0.2f"), 17))
|
||||||
|
return "~".join(trailer)
|
||||||
|
|
||||||
|
def sanitize_data(val, replace_str=''):
|
||||||
|
''' Remove all the non-alphanumeric characters from string '''
|
||||||
|
pattern = re.compile('[\W_]+')
|
||||||
|
return pattern.sub(replace_str, val)
|
||||||
|
|
||||||
|
def format_date(val):
|
||||||
|
''' Convert a datetime object to DD/MM/YYYY format '''
|
||||||
|
return val.strftime("%d/%m/%Y")
|
||||||
|
|
||||||
|
def validate_amount(val, max_int_size):
|
||||||
|
''' Validate amount to be within the allowed limits '''
|
||||||
|
int_size = len(str(val).split('.')[0])
|
||||||
|
|
||||||
|
if int_size > max_int_size:
|
||||||
|
frappe.throw(_("Amount for a single transaction exceeds maximum allowed amount, create a separate payment order by splitting the transactions"))
|
||||||
|
|
||||||
|
return val
|
||||||
|
|
||||||
|
def validate_information(obj, attr, max_size):
|
||||||
|
''' Checks if the information is not set in the system and is within the size '''
|
||||||
|
if hasattr(obj, attr):
|
||||||
|
return validate_field_size(getattr(obj, attr), frappe.unscrub(attr), max_size)
|
||||||
|
|
||||||
|
else:
|
||||||
|
frappe.throw(_("{0} is mandatory for generating remittance payments, set the field and try again".format(frappe.unscrub(attr))))
|
||||||
|
|
||||||
|
def validate_field_size(val, label, max_size):
|
||||||
|
''' check the size of the val '''
|
||||||
|
if len(cstr(val)) > max_size:
|
||||||
|
frappe.throw(_("{0} field is limited to size {1}".format(label, max_size)))
|
||||||
|
return cstr(val)
|
||||||
@ -281,7 +281,15 @@ def make_custom_fields(update=True):
|
|||||||
dict(fieldname='hra_component', label='HRA Component',
|
dict(fieldname='hra_component', label='HRA Component',
|
||||||
fieldtype='Link', options='Salary Component', insert_after='basic_component'),
|
fieldtype='Link', options='Salary Component', insert_after='basic_component'),
|
||||||
dict(fieldname='arrear_component', label='Arrear Component',
|
dict(fieldname='arrear_component', label='Arrear Component',
|
||||||
fieldtype='Link', options='Salary Component', insert_after='hra_component')
|
fieldtype='Link', options='Salary Component', insert_after='hra_component'),
|
||||||
|
dict(fieldname='bank_remittance_section', label='Bank Remittance Settings',
|
||||||
|
fieldtype='Section Break', collapsible=1, insert_after='arrear_component'),
|
||||||
|
dict(fieldname='client_code', label='Client Code', fieldtype='Data',
|
||||||
|
insert_after='bank_remittance_section'),
|
||||||
|
dict(fieldname='remittance_column_break', fieldtype='Column Break',
|
||||||
|
insert_after='client_code'),
|
||||||
|
dict(fieldname='product_code', label='Product Code', fieldtype='Data',
|
||||||
|
insert_after='remittance_column_break'),
|
||||||
],
|
],
|
||||||
'Employee Tax Exemption Declaration':[
|
'Employee Tax Exemption Declaration':[
|
||||||
dict(fieldname='hra_section', label='HRA Exemption',
|
dict(fieldname='hra_section', label='HRA Exemption',
|
||||||
@ -566,4 +574,4 @@ def get_tds_details(accounts, fiscal_year):
|
|||||||
doctype="Tax Withholding Category", accounts=accounts,
|
doctype="Tax Withholding Category", accounts=accounts,
|
||||||
rates=[{"fiscal_year": fiscal_year, "tax_withholding_rate": 20,
|
rates=[{"fiscal_year": fiscal_year, "tax_withholding_rate": 20,
|
||||||
"single_threshold": 2500, "cumulative_threshold": 0}])
|
"single_threshold": 2500, "cumulative_threshold": 0}])
|
||||||
]
|
]
|
||||||
@ -112,12 +112,11 @@
|
|||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "Medium",
|
|
||||||
"fieldname": "priority",
|
"fieldname": "priority",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Link",
|
||||||
"in_standard_filter": 1,
|
"in_standard_filter": 1,
|
||||||
"label": "Priority",
|
"label": "Priority",
|
||||||
"options": "Low\nMedium\nHigh"
|
"options": "Issue Priority"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "issue_type",
|
"fieldname": "issue_type",
|
||||||
@ -337,7 +336,7 @@
|
|||||||
],
|
],
|
||||||
"icon": "fa fa-ticket",
|
"icon": "fa fa-ticket",
|
||||||
"idx": 7,
|
"idx": 7,
|
||||||
"modified": "2019-05-19 11:02:10.962090",
|
"modified": "2019-05-20 15:19:00.771333",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Issue",
|
"name": "Issue",
|
||||||
|
|||||||
@ -128,6 +128,8 @@ class Issue(Document):
|
|||||||
return replicated_issue.name
|
return replicated_issue.name
|
||||||
|
|
||||||
def before_insert(self):
|
def before_insert(self):
|
||||||
|
if not self.priority:
|
||||||
|
self.priority = frappe.db.get_value("Issue Priority", {"default_priority": 1})
|
||||||
self.set_response_and_resolution_time(priority=self.priority)
|
self.set_response_and_resolution_time(priority=self.priority)
|
||||||
|
|
||||||
def set_response_and_resolution_time(self, priority=None, service_level_agreement=None):
|
def set_response_and_resolution_time(self, priority=None, service_level_agreement=None):
|
||||||
@ -153,7 +155,6 @@ class Issue(Document):
|
|||||||
self.creation = now_datetime()
|
self.creation = now_datetime()
|
||||||
|
|
||||||
start_date_time = get_datetime(self.creation)
|
start_date_time = get_datetime(self.creation)
|
||||||
|
|
||||||
self.response_by = get_expected_time_for(parameter='response', service_level=priority, start_date_time=start_date_time)
|
self.response_by = get_expected_time_for(parameter='response', service_level=priority, start_date_time=start_date_time)
|
||||||
self.resolution_by = get_expected_time_for(parameter='resolution', service_level=priority, start_date_time=start_date_time)
|
self.resolution_by = get_expected_time_for(parameter='resolution', service_level=priority, start_date_time=start_date_time)
|
||||||
|
|
||||||
|
|||||||
0
erpnext/support/doctype/issue_priority/__init__.py
Normal file
0
erpnext/support/doctype/issue_priority/__init__.py
Normal file
8
erpnext/support/doctype/issue_priority/issue_priority.js
Normal file
8
erpnext/support/doctype/issue_priority/issue_priority.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
// For license information, please see license.txt
|
||||||
|
|
||||||
|
frappe.ui.form.on('Issue Priority', {
|
||||||
|
// refresh: function(frm) {
|
||||||
|
|
||||||
|
// }
|
||||||
|
});
|
||||||
39
erpnext/support/doctype/issue_priority/issue_priority.json
Normal file
39
erpnext/support/doctype/issue_priority/issue_priority.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"autoname": "Prompt",
|
||||||
|
"creation": "2019-05-20 15:14:21.604447",
|
||||||
|
"doctype": "DocType",
|
||||||
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"description"
|
||||||
|
],
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "description",
|
||||||
|
"fieldtype": "Small Text",
|
||||||
|
"label": "Description"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"modified": "2019-05-20 17:06:38.095647",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "Support",
|
||||||
|
"name": "Issue Priority",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"create": 1,
|
||||||
|
"delete": 1,
|
||||||
|
"email": 1,
|
||||||
|
"export": 1,
|
||||||
|
"print": 1,
|
||||||
|
"read": 1,
|
||||||
|
"report": 1,
|
||||||
|
"role": "System Manager",
|
||||||
|
"share": 1,
|
||||||
|
"write": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"quick_entry": 1,
|
||||||
|
"sort_field": "modified",
|
||||||
|
"sort_order": "ASC",
|
||||||
|
"track_changes": 1
|
||||||
|
}
|
||||||
14
erpnext/support/doctype/issue_priority/issue_priority.py
Normal file
14
erpnext/support/doctype/issue_priority/issue_priority.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
from frappe import _
|
||||||
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
class IssuePriority(Document):
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
if frappe.db.exists("Issue Priority", {"name": self.name}):
|
||||||
|
frappe.throw(_("Issue Priority Already Exists"))
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
|
# See license.txt
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
class TestIssuePriority(unittest.TestCase):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def make_priorities():
|
||||||
|
insert_priority("Low")
|
||||||
|
insert_priority("Medium")
|
||||||
|
insert_priority("High")
|
||||||
|
|
||||||
|
def insert_priority(name):
|
||||||
|
frappe.get_doc({
|
||||||
|
"doctype": "Issue Priority",
|
||||||
|
"name": name,
|
||||||
|
"default_priority": 1 if name == "Medium" else 0
|
||||||
|
}).insert(ignore_permissions=True)
|
||||||
@ -12,10 +12,12 @@ from frappe.utils import get_weekdays
|
|||||||
class ServiceLevel(Document):
|
class ServiceLevel(Document):
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
self.check_default_priority()
|
||||||
self.check_priorities()
|
self.check_priorities()
|
||||||
self.check_support_and_resolution()
|
self.check_support_and_resolution()
|
||||||
|
|
||||||
def check_priorities(self):
|
def check_priorities(self):
|
||||||
|
default_priority = []
|
||||||
priorities = []
|
priorities = []
|
||||||
|
|
||||||
for priority in self.priorities:
|
for priority in self.priorities:
|
||||||
@ -24,6 +26,7 @@ class ServiceLevel(Document):
|
|||||||
frappe.throw(_("Set Response Time and Resolution for Priority {0} at index {1}.".format(priority.priority, priority.idx)))
|
frappe.throw(_("Set Response Time and Resolution for Priority {0} at index {1}.".format(priority.priority, priority.idx)))
|
||||||
|
|
||||||
priorities.append(priority.priority)
|
priorities.append(priority.priority)
|
||||||
|
#priorities.append(priority.priority)
|
||||||
|
|
||||||
if priority.response_time_period == "Hour":
|
if priority.response_time_period == "Hour":
|
||||||
response = priority.response_time * 0.0416667
|
response = priority.response_time * 0.0416667
|
||||||
@ -47,11 +50,6 @@ class ServiceLevel(Document):
|
|||||||
repeated_priority = get_repeated(priorities)
|
repeated_priority = get_repeated(priorities)
|
||||||
frappe.throw(_("Priority {0} has been repeated.".format(repeated_priority)))
|
frappe.throw(_("Priority {0} has been repeated.".format(repeated_priority)))
|
||||||
|
|
||||||
# Check if values for all the priority options is set
|
|
||||||
priority_count = ([field.options for field in frappe.get_meta("Service Level Priority").fields if field.fieldname=='priority'][0]).split("\n")
|
|
||||||
if not len(set(priorities)) == len(priority_count):
|
|
||||||
frappe.throw(_("Set values for all the Priorities {0}.".format(" ".join(priority_count))))
|
|
||||||
|
|
||||||
def check_support_and_resolution(self):
|
def check_support_and_resolution(self):
|
||||||
week = get_weekdays()
|
week = get_weekdays()
|
||||||
support_days = []
|
support_days = []
|
||||||
@ -77,13 +75,16 @@ class ServiceLevel(Document):
|
|||||||
def get_service_level_priority(self, priority):
|
def get_service_level_priority(self, priority):
|
||||||
priority = frappe.get_doc("Service Level Priority", {"priority": priority, "parent": self.name})
|
priority = frappe.get_doc("Service Level Priority", {"priority": priority, "parent": self.name})
|
||||||
|
|
||||||
return frappe._dict({
|
if priority:
|
||||||
"priority": priority.priority,
|
return frappe._dict({
|
||||||
"response_time": priority.response_time,
|
"priority": priority.priority,
|
||||||
"response_time_period": priority.response_time_period,
|
"response_time": priority.response_time,
|
||||||
"resolution_time": priority.resolution_time,
|
"response_time_period": priority.response_time_period,
|
||||||
"resolution_time_period": priority.resolution_time_period
|
"resolution_time": priority.resolution_time,
|
||||||
})
|
"resolution_time_period": priority.resolution_time_period
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
frappe.throw(_("Service Level {0} doesn't have Priority {1}.".format(self.name, priority)))
|
||||||
|
|
||||||
def get_repeated(values):
|
def get_repeated(values):
|
||||||
unique_list = []
|
unique_list = []
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
# See license.txt
|
# See license.txt
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
from erpnext.hr.doctype.employee_group.test_employee_group import make_employee_group
|
from erpnext.hr.doctype.employee_group.test_employee_group import make_employee_group
|
||||||
|
from erpnext.support.doctype.issue_priority.test_issue_priority import make_priorities
|
||||||
from frappe.utils import now_datetime
|
from frappe.utils import now_datetime
|
||||||
import datetime
|
import datetime
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
@ -16,6 +17,7 @@ class TestServiceLevel(unittest.TestCase):
|
|||||||
def make_service_level():
|
def make_service_level():
|
||||||
employee_group = make_employee_group()
|
employee_group = make_employee_group()
|
||||||
make_holiday_list()
|
make_holiday_list()
|
||||||
|
make_priorities()
|
||||||
|
|
||||||
# Default Service Level Agreement
|
# Default Service Level Agreement
|
||||||
default_service_level = frappe.get_doc({
|
default_service_level = frappe.get_doc({
|
||||||
|
|||||||
@ -134,13 +134,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
|
"depends_on": "eval: !doc.default_service_level_agreement",
|
||||||
"fieldname": "ignore_start_and_end_date",
|
"fieldname": "ignore_start_and_end_date",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Ignore Start and End Date",
|
"label": "Ignore Start and End Date",
|
||||||
"set_only_once": 1
|
"set_only_once": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"modified": "2019-05-19 09:41:55.498800",
|
"modified": "2019-05-20 15:36:00.326471",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Service Level Agreement",
|
"name": "Service Level Agreement",
|
||||||
|
|||||||
@ -14,13 +14,13 @@ class ServiceLevelAgreement(Document):
|
|||||||
if frappe.db.exists("Service Level Agreement", {"default_service_level_agreement": "1", "name": ["!=", self.name]}):
|
if frappe.db.exists("Service Level Agreement", {"default_service_level_agreement": "1", "name": ["!=", self.name]}):
|
||||||
frappe.throw(_("A Default Service Level Agreement already exists."))
|
frappe.throw(_("A Default Service Level Agreement already exists."))
|
||||||
else:
|
else:
|
||||||
if not (self.start_date and self.end_date) and self.ignore_start_and_end_date:
|
if not self.ignore_start_and_end_date and not (self.start_date and self.end_date):
|
||||||
frappe.throw(_("Enter Start and End Date for the Agreement."))
|
frappe.throw(_("Enter Start and End Date for the Agreement."))
|
||||||
|
|
||||||
if self.start_date >= self.end_date and self.ignore_start_and_end_date:
|
if not self.ignore_start_and_end_date and self.start_date >= self.end_date:
|
||||||
frappe.throw(_("Start Date of Agreement can't be greater than or equal to End Date."))
|
frappe.throw(_("Start Date of Agreement can't be greater than or equal to End Date."))
|
||||||
|
|
||||||
if self.end_date < frappe.utils.getdate() and self.ignore_start_and_end_date:
|
if not self.ignore_start_and_end_date and self.end_date < frappe.utils.getdate():
|
||||||
frappe.throw(_("End Date of Agreement can't be less than today."))
|
frappe.throw(_("End Date of Agreement can't be less than today."))
|
||||||
|
|
||||||
def check_agreement_status():
|
def check_agreement_status():
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
"field_order": [
|
"field_order": [
|
||||||
"priority",
|
"priority",
|
||||||
|
"cb_01",
|
||||||
|
"default_priority",
|
||||||
"sb_00",
|
"sb_00",
|
||||||
"response_time",
|
"response_time",
|
||||||
"response_time_period",
|
"response_time_period",
|
||||||
@ -16,10 +18,10 @@
|
|||||||
{
|
{
|
||||||
"columns": 2,
|
"columns": 2,
|
||||||
"fieldname": "priority",
|
"fieldname": "priority",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Link",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Priority",
|
"label": "Priority",
|
||||||
"options": "Low\nMedium\nHigh"
|
"options": "Issue Priority"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "sb_00",
|
"fieldname": "sb_00",
|
||||||
@ -58,10 +60,20 @@
|
|||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Resolution Time Period",
|
"label": "Resolution Time Period",
|
||||||
"options": "Hour\nDay\nWeek"
|
"options": "Hour\nDay\nWeek"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "cb_01",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "default_priority",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Default Priority"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2019-05-04 06:04:32.956731",
|
"modified": "2019-05-20 17:10:43.687547",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Service Level Priority",
|
"name": "Service Level Priority",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user