Frozen Accounts Modifier setting in Accounts Settings
diff --git a/accounts/doctype/account/account.js b/accounts/doctype/account/account.js
index 6b06572..9c0e728 100644
--- a/accounts/doctype/account/account.js
+++ b/accounts/doctype/account/account.js
@@ -18,12 +18,22 @@
cur_frm.toggle_display('account_name', doc.__islocal);
// hide fields if group
- cur_frm.toggle_display(['account_type', 'master_type', 'master_name', 'freeze_account',
+ cur_frm.toggle_display(['account_type', 'master_type', 'master_name',
'credit_days', 'credit_limit', 'tax_rate'], doc.group_or_ledger=='Ledger')
// disable fields
cur_frm.toggle_enable(['account_name', 'debit_or_credit', 'group_or_ledger',
'is_pl_account', 'company'], false);
+
+ if(doc.group_or_ledger=='Ledger') {
+ wn.model.with_doc("Accounts Settings", "Accounts Settings", function (name) {
+ var accounts_settings = wn.model.get_doc("Accounts Settings", name);
+ var display = accounts_settings["frozen_accounts_modifier"]
+ && in_list(user_roles, accounts_settings["frozen_accounts_modifier"]);
+
+ cur_frm.toggle_display('freeze_account', display);
+ });
+ }
// read-only for root accounts
if(!doc.parent_account) {
diff --git a/accounts/doctype/account/account.py b/accounts/doctype/account/account.py
index a6038dd..271b22d 100644
--- a/accounts/doctype/account/account.py
+++ b/accounts/doctype/account/account.py
@@ -24,6 +24,17 @@
address = webnotes.conn.get_value(self.doc.master_type, self.doc.master_name, "address")
return {'address': address}
+ def validate(self):
+ self.validate_master_name()
+ self.validate_parent()
+ self.validate_duplicate_account()
+ self.validate_root_details()
+ self.validate_mandatory()
+ self.validate_frozen_accounts_modifier()
+
+ if not self.doc.parent_account:
+ self.doc.parent_account = ''
+
def validate_master_name(self):
"""Remind to add master name"""
if (self.doc.master_type == 'Customer' or self.doc.master_type == 'Supplier') \
@@ -71,6 +82,15 @@
if webnotes.conn.exists("Account", self.doc.name):
if not webnotes.conn.get_value("Account", self.doc.name, "parent_account"):
webnotes.msgprint("Root cannot be edited.", raise_exception=1)
+
+ def validate_frozen_accounts_modifier(self):
+ old_value = webnotes.conn.get_value("Account", self.doc.name, "freeze_account")
+ if old_value != self.doc.freeze_account:
+ frozen_accounts_modifier = webnotes.conn.get_value( 'Accounts Settings', None,
+ 'frozen_accounts_modifier')
+ if not frozen_accounts_modifier or \
+ frozen_accounts_modifier not in webnotes.user.get_roles():
+ webnotes.throw(_("You are not authorized to set Frozen value"))
def convert_group_to_ledger(self):
if self.check_if_child_exists():
@@ -112,16 +132,6 @@
if not self.doc.is_pl_account:
msgprint("Is PL Account field is mandatory", raise_exception=1)
- def validate(self):
- self.validate_master_name()
- self.validate_parent()
- self.validate_duplicate_account()
- self.validate_root_details()
- self.validate_mandatory()
-
- if not self.doc.parent_account:
- self.doc.parent_account = ''
-
def update_nsm_model(self):
"""update lft, rgt indices for nested set model"""
import webnotes
diff --git a/accounts/doctype/account/account.txt b/accounts/doctype/account/account.txt
index da3b50f..8a07526 100644
--- a/accounts/doctype/account/account.txt
+++ b/accounts/doctype/account/account.txt
@@ -2,7 +2,7 @@
{
"creation": "2013-01-30 12:49:46",
"docstatus": 0,
- "modified": "2013-09-23 23:55:15",
+ "modified": "2013-09-24 11:22:18",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -23,7 +23,8 @@
"name": "__common__",
"parent": "Account",
"parentfield": "fields",
- "parenttype": "DocType"
+ "parenttype": "DocType",
+ "permlevel": 0
},
{
"amend": 0,
@@ -45,14 +46,12 @@
"fieldname": "properties",
"fieldtype": "Section Break",
"label": "Account Details",
- "oldfieldtype": "Section Break",
- "permlevel": 0
+ "oldfieldtype": "Section Break"
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
- "permlevel": 0,
"width": "50%"
},
{
@@ -64,7 +63,6 @@
"no_copy": 1,
"oldfieldname": "account_name",
"oldfieldtype": "Data",
- "permlevel": 0,
"read_only": 1,
"reqd": 1,
"search_index": 1
@@ -77,7 +75,6 @@
"label": "Level",
"oldfieldname": "level",
"oldfieldtype": "Int",
- "permlevel": 0,
"print_hide": 1,
"read_only": 1
},
@@ -91,7 +88,6 @@
"oldfieldname": "group_or_ledger",
"oldfieldtype": "Select",
"options": "\nLedger\nGroup",
- "permlevel": 0,
"read_only": 1,
"reqd": 1,
"search_index": 1
@@ -104,7 +100,6 @@
"label": "Debit or Credit",
"oldfieldname": "debit_or_credit",
"oldfieldtype": "Data",
- "permlevel": 0,
"read_only": 1,
"search_index": 1
},
@@ -117,7 +112,6 @@
"oldfieldname": "is_pl_account",
"oldfieldtype": "Select",
"options": "Yes\nNo",
- "permlevel": 0,
"read_only": 1,
"search_index": 1
},
@@ -130,7 +124,6 @@
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
- "permlevel": 0,
"read_only": 1,
"reqd": 1,
"search_index": 1
@@ -139,7 +132,6 @@
"doctype": "DocField",
"fieldname": "column_break1",
"fieldtype": "Column Break",
- "permlevel": 0,
"width": "50%"
},
{
@@ -150,7 +142,6 @@
"oldfieldname": "parent_account",
"oldfieldtype": "Link",
"options": "Account",
- "permlevel": 0,
"search_index": 1
},
{
@@ -163,7 +154,6 @@
"oldfieldname": "account_type",
"oldfieldtype": "Select",
"options": "\nFixed Asset Account\nBank or Cash\nExpense Account\nTax\nIncome Account\nChargeable",
- "permlevel": 0,
"search_index": 0
},
{
@@ -175,7 +165,6 @@
"label": "Rate",
"oldfieldname": "tax_rate",
"oldfieldtype": "Currency",
- "permlevel": 0,
"reqd": 0
},
{
@@ -186,8 +175,7 @@
"label": "Frozen",
"oldfieldname": "freeze_account",
"oldfieldtype": "Select",
- "options": "No\nYes",
- "permlevel": 2
+ "options": "No\nYes"
},
{
"doctype": "DocField",
@@ -197,7 +185,6 @@
"label": "Credit Days",
"oldfieldname": "credit_days",
"oldfieldtype": "Int",
- "permlevel": 0,
"print_hide": 1
},
{
@@ -209,7 +196,6 @@
"oldfieldname": "credit_limit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
- "permlevel": 0,
"print_hide": 1
},
{
@@ -220,8 +206,7 @@
"label": "Master Type",
"oldfieldname": "master_type",
"oldfieldtype": "Select",
- "options": "\nSupplier\nCustomer\nEmployee",
- "permlevel": 0
+ "options": "\nSupplier\nCustomer\nEmployee"
},
{
"doctype": "DocField",
@@ -230,8 +215,7 @@
"label": "Master Name",
"oldfieldname": "master_name",
"oldfieldtype": "Link",
- "options": "[Select]",
- "permlevel": 0
+ "options": "[Select]"
},
{
"default": "1",
@@ -239,8 +223,7 @@
"doctype": "DocField",
"fieldname": "allow_negative_balance",
"fieldtype": "Check",
- "label": "Allow Negative Balance",
- "permlevel": 0
+ "label": "Allow Negative Balance"
},
{
"doctype": "DocField",
@@ -248,7 +231,6 @@
"fieldtype": "Int",
"hidden": 1,
"label": "Lft",
- "permlevel": 0,
"print_hide": 1,
"read_only": 1
},
@@ -258,7 +240,6 @@
"fieldtype": "Int",
"hidden": 1,
"label": "Rgt",
- "permlevel": 0,
"print_hide": 1,
"read_only": 1
},
@@ -268,7 +249,6 @@
"fieldtype": "Data",
"hidden": 1,
"label": "Old Parent",
- "permlevel": 0,
"print_hide": 1,
"read_only": 1
},
diff --git a/accounts/doctype/accounts_settings/accounts_settings.txt b/accounts/doctype/accounts_settings/accounts_settings.txt
index 67b3901..cc34e65 100644
--- a/accounts/doctype/accounts_settings/accounts_settings.txt
+++ b/accounts/doctype/accounts_settings/accounts_settings.txt
@@ -2,7 +2,7 @@
{
"creation": "2013-06-24 15:49:57",
"docstatus": 0,
- "modified": "2013-09-23 23:53:25",
+ "modified": "2013-09-24 11:52:57",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -53,7 +53,7 @@
"label": "Accounts Frozen Upto"
},
{
- "description": "Users with this role are allowed to do / modify accounting entry before frozen date",
+ "description": "Users with this role are allowed to create / modify accounting entry before frozen date",
"doctype": "DocField",
"fieldname": "bde_auth_role",
"fieldtype": "Link",
@@ -61,11 +61,11 @@
"options": "Role"
},
{
- "description": "Users with this role are allowed to do / modify accounting entries against frozen accounts",
+ "description": "Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts",
"doctype": "DocField",
"fieldname": "frozen_accounts_modifier",
"fieldtype": "Link",
- "label": "Allowed Role to Edit Entries against Frozen Accounts",
+ "label": "Frozen Accounts Modifier",
"options": "Role"
},
{
diff --git a/accounts/doctype/gl_entry/gl_entry.py b/accounts/doctype/gl_entry/gl_entry.py
index d56d14a..6b6eb0e 100644
--- a/accounts/doctype/gl_entry/gl_entry.py
+++ b/accounts/doctype/gl_entry/gl_entry.py
@@ -25,6 +25,7 @@
def on_update(self, adv_adj, cancel, update_outstanding = 'Yes'):
self.validate_account_details(adv_adj)
self.validate_cost_center()
+ self.validate_frozen_account(adv_adj)
self.check_freezing_date(adv_adj)
self.check_negative_balance(adv_adj)
@@ -81,31 +82,18 @@
def validate_account_details(self, adv_adj):
"""Account must be ledger, active and not freezed"""
- ret = sql("""select group_or_ledger, docstatus, freeze_account, company
+ ret = sql("""select group_or_ledger, docstatus, company
from tabAccount where name=%s""", self.doc.account, as_dict=1)
if ret and ret[0]["group_or_ledger"]=='Group':
- msgprint(_("Account") + ": " + self.doc.account + _(" is not a ledger"), raise_exception=1)
+ webnotes.throw(_("Account is not a ledger") + "(%s)" % self.doc.account)
if ret and ret[0]["docstatus"]==2:
- msgprint(_("Account") + ": " + self.doc.account + _(" is not active"), raise_exception=1)
-
- # Account has been freezed for other users except account manager
- if ret and ret[0]["freeze_account"]== 'Yes' and not adv_adj:
- frozen_accounts_modifier = webnotes.conn.get_value( 'Accounts Settings', None,
- 'frozen_accounts_modifier')
- if not frozen_accounts_modifier:
- webnotes.throw(self.doc.account + _(" is a frozen account. \
- Either make the account active or assign role in Accounts Settings \
- who can do / modify entries against this account"))
- elif frozen_accounts_modifier not in webnotes.user.get_roles():
- webnotes.throw(self.doc.account + _(" is a frozen account. ") +
- _("To make / edit transactions against this account, you need role") + ": " +
- frozen_accounts_modifier)
+ webnotes.throw(_("Account is not active ") + "(%s)" % self.doc.account)
if self.doc.is_cancelled in ("No", None) and ret and ret[0]["company"] != self.doc.company:
- msgprint(_("Account") + ": " + self.doc.account + _(" does not belong to the company") \
- + ": " + self.doc.company, raise_exception=1)
+ webnotes.throw(_("Account") + ": " + self.doc.account +
+ _(" does not belong to the company") + ": " + self.doc.company)
def validate_cost_center(self):
if not hasattr(self, "cost_center_company"):
@@ -122,7 +110,21 @@
self.doc.cost_center and _get_cost_center_company() != self.doc.company:
msgprint(_("Cost Center") + ": " + self.doc.cost_center \
+ _(" does not belong to the company") + ": " + self.doc.company, raise_exception=True)
-
+
+ def validate_frozen_account(self, adv_adj):
+ frozen_account = webnotes.conn.get_value("Account", self.doc.account, "freeze_account")
+ if frozen_account == 'Yes' and not adv_adj:
+ frozen_accounts_modifier = webnotes.conn.get_value( 'Accounts Settings', None,
+ 'frozen_accounts_modifier')
+ if not frozen_accounts_modifier:
+ webnotes.throw(self.doc.account + _(" is a frozen account. \
+ Either make the account active or assign role in Accounts Settings \
+ who can do / modify entries against this account"))
+ elif frozen_accounts_modifier not in webnotes.user.get_roles():
+ webnotes.throw(self.doc.account + _(" is a frozen account. ") +
+ _("To make / edit transactions against this account, you need role") + ": " +
+ frozen_accounts_modifier)
+
def check_freezing_date(self, adv_adj):
"""
Nobody can do GL Entries where posting date is before freezing date
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 7f7c747..9365b91 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -211,4 +211,5 @@
"patches.september_2013.p03_update_stock_uom_in_sle",
"patches.september_2013.p03_move_website_to_framework",
"execute:webnotes.bean('Style Settings').save() #2013-09-19",
+ "execute:webnotes.conn.set_value('Accounts Settings', None, 'frozen_accounts_modifier', 'Accounts Manager') #2013-09-24",
]
\ No newline at end of file