diff --git a/hr/doctype/expense_claim/expense_claim.py b/hr/doctype/expense_claim/expense_claim.py index 9fdb2335bb..9e476e5595 100644 --- a/hr/doctype/expense_claim/expense_claim.py +++ b/hr/doctype/expense_claim/expense_claim.py @@ -20,6 +20,7 @@ import webnotes from webnotes.utils import add_days from webnotes.model.wrapper import getlist from webnotes import form, msgprint +from webnotes.model.code import get_obj sql = webnotes.conn.sql @@ -36,8 +37,8 @@ class DocType: def on_submit(self): if self.doc.approval_status=="Draft": - webnotes.msgprint("""Please set Approval Status to 'Approved' or 'Rejected' before submitting""", - raise_exception=1) + webnotes.msgprint("""Please set Approval Status to 'Approved' or \ + 'Rejected' before submitting""", raise_exception=1) def validate_fiscal_year(self): fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year) @@ -57,5 +58,6 @@ def get_approver_list(): roles = [r[0] for r in webnotes.conn.sql("""select distinct parent from `tabUserRole` where role='Expense Approver'""")] if not roles: - webnotes.msgprint("No Expense Approvers. Please assign 'Expense Approver' Role to atleast one user.") + webnotes.msgprint("No Expense Approvers. Please assign 'Expense Approver' \ + Role to atleast one user.") return roles diff --git a/selling/page/selling_home/selling_home.html b/selling/page/selling_home/selling_home.html index 54f2e386f9..3009cebe3b 100644 --- a/selling/page/selling_home/selling_home.html +++ b/selling/page/selling_home/selling_home.html @@ -14,8 +14,8 @@
Sales Order

Confirmed orders from Customers


-
Communication
-

Confirmed orders from Customers

+
Communication
+

All communication records

Customer
diff --git a/setup/doctype/authorization_control/authorization_control.py b/setup/doctype/authorization_control/authorization_control.py index 9e0d979f30..9455f8a874 100644 --- a/setup/doctype/authorization_control/authorization_control.py +++ b/setup/doctype/authorization_control/authorization_control.py @@ -60,7 +60,7 @@ class DocType(TransactionBase): if appr_users: add_msg = "Users : "+cstr(appr_users) if appr_roles: add_msg = "Roles : "+cstr(appr_roles) if appr_users and appr_roles: add_msg = "Users : "+cstr(appr_users)+" or "+"Roles : "+cstr(appr_roles) - msgprint("You do not have an authority to submit this %s %s. Please send for approval to %s" % (doctype_name, msg, add_msg)) + msgprint("You are not authorize to submit this %s %s. Please send for approval to %s" % (doctype_name, msg, add_msg)) raise Exception diff --git a/setup/doctype/authorization_rule/authorization_rule.js b/setup/doctype/authorization_rule/authorization_rule.js index b29d88915e..184c761b9d 100644 --- a/setup/doctype/authorization_rule/authorization_rule.js +++ b/setup/doctype/authorization_rule/authorization_rule.js @@ -26,13 +26,13 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) { cur_frm.cscript.refresh = function(doc,cdt,cdn){ - if(doc.based_on == 'Grand Total' || doc.based_on == 'Average Discount' || doc.based_on == 'Total Claimed Amount' || doc.based_on == 'Not Applicable') hide_field('master_name'); + if(doc.based_on == 'Grand Total' || doc.based_on == 'Average Discount' || doc.based_on == 'Not Applicable') hide_field('master_name'); else unhide_field('master_name'); if(doc.based_on == 'Not Applicable') hide_field('value'); else unhide_field('value'); - if(doc.transaction == 'Expense Claim' || doc.transaction == 'Appraisal'){ + if(doc.transaction == 'Appraisal'){ hide_field(['master_name','system_role', 'system_user']); unhide_field(['to_emp','to_designation']); if(doc.transaction == 'Appraisal') hide_field('value'); @@ -45,7 +45,7 @@ cur_frm.cscript.refresh = function(doc,cdt,cdn){ } cur_frm.cscript.based_on = function(doc){ - if(doc.based_on == 'Grand Total' || doc.based_on == 'Average Discount' || doc.based_on == 'Total Claimed Amount' || doc.based_on == 'Not Applicable'){ + if(doc.based_on == 'Grand Total' || doc.based_on == 'Average Discount' || doc.based_on == 'Not Applicable'){ doc.master_name = ''; refresh_field('master_name'); hide_field('master_name'); @@ -63,24 +63,20 @@ cur_frm.cscript.based_on = function(doc){ } cur_frm.cscript.transaction = function(doc,cdt,cdn){ - if(doc.transaction == 'Expense Claim' || doc.transaction == 'Appraisal'){ + if (doc.transaction == 'Appraisal'){ doc.master_name = doc.system_role = doc.system_user = ''; refresh_many(['master_name','system_role', 'system_user']); hide_field(['master_name','system_role', 'system_user']); unhide_field(['to_emp','to_designation']); - if(doc.transaction == 'Appraisal') { - doc.value =0; - refresh_many('value'); - hide_field('value'); - } - else unhide_field('value'); + doc.value =0; + refresh_many('value'); + hide_field('value'); } else { unhide_field(['master_name','system_role', 'system_user','value']); hide_field(['to_emp','to_designation']); } - if(doc.transaction == 'Expense Claim') doc.based_on = 'Total Claimed Amount'; if(doc.transaction == 'Appraisal') doc.based_on == 'Not Applicable'; } diff --git a/setup/doctype/authorization_rule/authorization_rule.py b/setup/doctype/authorization_rule/authorization_rule.py index a3646c06ae..be6c0aee33 100644 --- a/setup/doctype/authorization_rule/authorization_rule.py +++ b/setup/doctype/authorization_rule/authorization_rule.py @@ -8,11 +8,11 @@ # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . from __future__ import unicode_literals import webnotes @@ -27,74 +27,80 @@ sql = webnotes.conn.sql class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl + def __init__(self, d, dl): + self.doc, self.doclist = d, dl - # Duplicate Entry - # ---------------- - def check_duplicate_entry(self): - exists = sql("select name, docstatus from `tabAuthorization Rule` where transaction = %s and based_on = %s and system_user = %s and system_role = %s and approving_user = %s and approving_role = %s and to_emp =%s and to_designation=%s and name != %s", (self.doc.transaction, self.doc.based_on, cstr(self.doc.system_user), cstr(self.doc.system_role), cstr(self.doc.approving_user), cstr(self.doc.approving_role), cstr(self.doc.to_emp), cstr(self.doc.to_designation), self.doc.name)) - auth_exists = exists and exists[0][0] or '' - if auth_exists: - if cint(exists[0][1]) == 2: - msgprint("Duplicate Entry. Please remove from trash Authorization Rule : %s." %(auth_exists)) - raise Exception - else: - msgprint("Duplicate Entry. Please check Authorization Rule : %s." % (auth_exists)) - raise Exception + def check_duplicate_entry(self): + exists = sql("""select name, docstatus from `tabAuthorization Rule` + where transaction = %s and based_on = %s and system_user = %s + and system_role = %s and approving_user = %s and approving_role = %s + and to_emp =%s and to_designation=%s and name != %s""", + (self.doc.transaction, self.doc.based_on, cstr(self.doc.system_user), + cstr(self.doc.system_role), cstr(self.doc.approving_user), + cstr(self.doc.approving_role), cstr(self.doc.to_emp), + cstr(self.doc.to_designation), self.doc.name)) + auth_exists = exists and exists[0][0] or '' + if auth_exists: + if cint(exists[0][1]) == 2: + msgprint("""Duplicate Entry. Please untrash Authorization Rule : %s \ + from Recycle Bin""" % (auth_exists), raise_exception=1) + else: + msgprint("Duplicate Entry. Please check Authorization Rule : %s" % + (auth_exists), raise_exception=1) - # Validate Master Name - # --------------------- - def validate_master_name(self): - if self.doc.based_on == 'Customerwise Discount' and not sql("select name from tabCustomer where name = '%s' and docstatus != 2" % (self.doc.master_name)): - msgprint("Please select valid Customer Name for Customerwise Discount.") - raise Exception - elif self.doc.based_on == 'Itemwise Discount' and not sql("select name from tabItem where name = '%s' and docstatus != 2" % (self.doc.master_name)): - msgprint("Please select valid Item Name for Itemwise Discount.") - raise Exception - elif (self.doc.based_on == 'Grand Total' or self.doc.based_on == 'Average Discount') and self.doc.master_name: - msgprint("Please remove Customer / Item Name for %s." % (self.doc.based_on)) - raise Exception + def validate_master_name(self): + if self.doc.based_on == 'Customerwise Discount' and \ + not sql("select name from tabCustomer where name = '%s' and docstatus != 2" % \ + (self.doc.master_name)): + msgprint("Please select valid Customer Name for Customerwise Discount", + raise_exception=1) + elif self.doc.based_on == 'Itemwise Discount' and \ + not sql("select name from tabItem where name = '%s' and docstatus != 2" % \ + (self.doc.master_name)): + msgprint("Please select valid Item Name for Itemwise Discount", raise_exception=1) + elif (self.doc.based_on == 'Grand Total' or \ + self.doc.based_on == 'Average Discount') and self.doc.master_name: + msgprint("Please remove Customer/Item Name for %s." % + self.doc.based_on, raise_exception=1) - # Validate Rule - # -------------- - def validate_rule(self): - if not self.doc.transaction == 'Expense Claim' and not self.doc.transaction == 'Appraisal': - if not self.doc.approving_role and not self.doc.approving_user: - msgprint("Please enter Approving Role or Approving User") - raise Exception - elif self.doc.system_user and self.doc.system_user == self.doc.approving_user: - msgprint("Approving User cannot be same as user the rule is Applicable To (User).") - raise Exception - elif self.doc.system_role and self.doc.system_role == self.doc.approving_role: - msgprint("Approving Role cannot be same as user the rule is Applicable To (Role).") - raise Exception - elif self.doc.system_user and self.doc.approving_role and has_common([self.doc.approving_role],[x[0] for x in sql("select role from `tabUserRole` where parent = '%s'" % (self.doc.system_user))]): - msgprint("System User : %s is assigned role : %s. So rule does not make sense." % (self.doc.system_user,self.doc.approving_role)) - raise Exception - elif (self.doc.transaction == 'Purchase Order' or self.doc.transaction == 'Purchase Receipt' or self.doc.transaction == 'Purchase Invoice' or self.doc.transaction == 'Stock Entry') and (self.doc.based_on == 'Average Discount' or self.doc.based_on == 'Customerwise Discount' or self.doc.based_on == 'Itemwise Discount'): - msgprint("You cannot set authorization on basis of Discount for %s." % (self.doc.transaction)) - raise Exception - elif self.doc.based_on == 'Average Discount' and flt(self.doc.value) > 100.00: - msgprint("Discount cannot given for more than 100 %s." % ('%')) - raise Exception - elif self.doc.based_on == 'Customerwise Discount' and not self.doc.master_name: - msgprint("Please enter Customer Name for 'Customerwise Discount'") - raise Exception - else: - if self.doc.transaction == 'Appraisal' and self.doc.based_on != 'Not Applicable': - msgprint("Based on is 'Not Applicable' while setting authorization rule for 'Appraisal'") - raise Exception - if self.doc.transaction == 'Expense Claim' and self.doc.based_on != 'Total Claimed Amount': - msgprint("Authorization rule should be based on 'Total Calimed Amount' while setting authorization rule for 'Expense Claim'") - raise Exception + def validate_rule(self): + if self.doc.transaction != 'Appraisal': + if not self.doc.approving_role and not self.doc.approving_user: + msgprint("Please enter Approving Role or Approving User", raise_exception=1) + elif self.doc.system_user and self.doc.system_user == self.doc.approving_user: + msgprint("Approving User cannot be same as user the rule is Applicable To (User)", + raise_exception=1) + elif self.doc.system_role and self.doc.system_role == self.doc.approving_role: + msgprint("Approving Role cannot be same as user the rule is \ + Applicable To (Role).", raise_exception=1) + elif self.doc.system_user and self.doc.approving_role and \ + has_common([self.doc.approving_role], [x[0] for x in \ + sql("select role from `tabUserRole` where parent = '%s'" % \ + (self.doc.system_user))]): + msgprint("System User : %s is assigned role : %s. So rule does not make sense" % + (self.doc.system_user,self.doc.approving_role), raise_exception=1) + elif self.doc.transaction in ['Purchase Order', 'Purchase Receipt', \ + 'Purchase Invoice', 'Stock Entry'] and self.doc.based_on \ + in ['Average Discount', 'Customerwise Discount', 'Itemwise Discount']: + msgprint("You cannot set authorization on basis of Discount for %s" % + self.doc.transaction, raise_exception=1) + elif self.doc.based_on == 'Average Discount' and flt(self.doc.value) > 100.00: + msgprint("Discount cannot given for more than 100%", raise_exception=1) + elif self.doc.based_on == 'Customerwise Discount' and not self.doc.master_name: + msgprint("Please enter Customer Name for 'Customerwise Discount'", + raise_exception=1) + else: + if self.doc.transaction == 'Appraisal' and self.doc.based_on != 'Not Applicable': + msgprint("Based on should be 'Not Applicable' while setting authorization rule\ + for 'Appraisal'", raise_exception=1) - def validate(self): - self.check_duplicate_entry() - self.validate_rule() - self.validate_master_name() - if not self.doc.value: self.doc.value = flt(0) \ No newline at end of file + + def validate(self): + self.check_duplicate_entry() + self.validate_rule() + self.validate_master_name() + if not self.doc.value: self.doc.value = 0.0 \ No newline at end of file diff --git a/setup/doctype/authorization_rule/authorization_rule.txt b/setup/doctype/authorization_rule/authorization_rule.txt index e358544982..7061da37b1 100644 --- a/setup/doctype/authorization_rule/authorization_rule.txt +++ b/setup/doctype/authorization_rule/authorization_rule.txt @@ -1,212 +1,163 @@ -# DocType, Authorization Rule [ - - # These values are common in all dictionaries - { - 'creation': '2012-03-27 14:36:18', - 'docstatus': 0, - 'modified': '2012-03-27 14:36:18', - 'modified_by': u'Administrator', - 'owner': u'Administrator' - }, - - # These values are common for all DocType - { - '_last_update': u'1308741898', - 'allow_trash': 1, - 'autoname': u'AR.####', - 'colour': u'White:FFF', - 'doctype': 'DocType', - 'document_type': u'Master', - 'module': u'Setup', - 'name': '__common__', - 'search_fields': u'transaction,based_on,system_user,system_role,approving_user,approving_role', - 'section_style': u'Simple', - 'server_code_error': u' ', - 'version': 58 - }, - - # These values are common for all DocField - { - 'doctype': u'DocField', - 'name': '__common__', - 'parent': u'Authorization Rule', - 'parentfield': u'fields', - 'parenttype': u'DocType', - 'permlevel': 0 - }, - - # These values are common for all DocPerm - { - 'cancel': 1, - 'create': 1, - 'doctype': u'DocPerm', - 'name': '__common__', - 'parent': u'Authorization Rule', - 'parentfield': u'permissions', - 'parenttype': u'DocType', - 'permlevel': 0, - 'read': 1, - 'role': u'System Manager', - 'write': 1 - }, - - # DocType, Authorization Rule - { - 'doctype': 'DocType', - 'name': u'Authorization Rule' - }, - - # DocPerm - { - 'doctype': u'DocPerm' - }, - - # DocPerm - { - 'doctype': u'DocPerm' - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'company', - 'fieldtype': u'Link', - 'label': u'Company', - 'oldfieldname': u'company', - 'oldfieldtype': u'Link', - 'options': u'Company', - 'reqd': 0, - 'search_index': 0 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'transaction', - 'fieldtype': u'Select', - 'label': u'Transaction', - 'oldfieldname': u'transaction', - 'oldfieldtype': u'Select', - 'options': u'\nDelivery Note\nPurchase Invoice\nPurchase Order\nPurchase Receipt\nQuotation\nSales Invoice\nSales Order\nStock Entry\nExpense Claim\nAppraisal', - 'reqd': 1 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'based_on', - 'fieldtype': u'Select', - 'label': u'Based On', - 'oldfieldname': u'based_on', - 'oldfieldtype': u'Select', - 'options': u'\nGrand Total\nAverage Discount\nCustomerwise Discount\nItemwise Discount\nTotal Claimed Amount\nNot Applicable', - 'reqd': 1, - 'trigger': u'Client' - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'master_name', - 'fieldtype': u'Link', - 'label': u'Customer / Item Name', - 'oldfieldname': u'master_name', - 'oldfieldtype': u'Link', - 'trigger': u'Client' - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'system_role', - 'fieldtype': u'Link', - 'label': u'Applicable To (Role)', - 'oldfieldname': u'system_role', - 'oldfieldtype': u'Link', - 'options': u'Role' - }, - - # DocField - { - 'colour': u'White:FFF', - 'doctype': u'DocField', - 'fieldname': u'system_user', - 'fieldtype': u'Link', - 'label': u'Applicable To (User)', - 'oldfieldname': u'system_user', - 'oldfieldtype': u'Link', - 'options': u'Profile' - }, - - # DocField - { - 'colour': u'White:FFF', - 'description': u'This will be used for setting rule in HR module', - 'doctype': u'DocField', - 'fieldname': u'to_emp', - 'fieldtype': u'Link', - 'label': u'Applicable To (Employee)', - 'oldfieldname': u'to_emp', - 'oldfieldtype': u'Link', - 'options': u'Employee', - 'search_index': 0 - }, - - # DocField - { - 'colour': u'White:FFF', - 'description': u'This will be used for setting rule in HR module', - 'doctype': u'DocField', - 'fieldname': u'to_designation', - 'fieldtype': u'Link', - 'label': u'Applicable To (Designation)', - 'oldfieldname': u'to_designation', - 'oldfieldtype': u'Link', - 'options': u'Designation', - 'search_index': 0 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'approving_role', - 'fieldtype': u'Link', - 'label': u'Approving Role', - 'oldfieldname': u'approving_role', - 'oldfieldtype': u'Link', - 'options': u'Role' - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'approving_user', - 'fieldtype': u'Link', - 'label': u'Approving User', - 'oldfieldname': u'approving_user', - 'oldfieldtype': u'Link', - 'options': u'Profile' - }, - - # DocField - { - 'default': u'0.00', - 'doctype': u'DocField', - 'fieldname': u'value', - 'fieldtype': u'Currency', - 'label': u'Above Value', - 'oldfieldname': u'value', - 'oldfieldtype': u'Currency' - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'trash_reason', - 'fieldtype': u'Small Text', - 'label': u'Trash Reason', - 'oldfieldname': u'trash_reason', - 'oldfieldtype': u'Small Text' - } + { + "owner": "Administrator", + "docstatus": 0, + "creation": "2012-07-03 13:30:00", + "modified_by": "Administrator", + "modified": "2012-12-12 10:42:42" + }, + { + "autoname": "AR.####", + "name": "__common__", + "search_fields": "transaction,based_on,system_user,system_role,approving_user,approving_role", + "module": "Setup", + "doctype": "DocType", + "document_type": "Master" + }, + { + "name": "__common__", + "parent": "Authorization Rule", + "doctype": "DocField", + "parenttype": "DocType", + "permlevel": 0, + "parentfield": "fields" + }, + { + "name": "__common__", + "parent": "Authorization Rule", + "read": 1, + "create": 1, + "doctype": "DocPerm", + "write": 1, + "cancel": 1, + "parenttype": "DocType", + "role": "System Manager", + "permlevel": 0, + "parentfield": "permissions" + }, + { + "name": "Authorization Rule", + "doctype": "DocType" + }, + { + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Company", + "oldfieldname": "company", + "fieldname": "company", + "fieldtype": "Link", + "search_index": 0, + "reqd": 0, + "options": "Company" + }, + { + "oldfieldtype": "Select", + "doctype": "DocField", + "label": "Transaction", + "oldfieldname": "transaction", + "fieldname": "transaction", + "fieldtype": "Select", + "reqd": 1, + "options": "\nDelivery Note\nPurchase Invoice\nPurchase Order\nPurchase Receipt\nQuotation\nSales Invoice\nSales Order\nStock Entry\nAppraisal" + }, + { + "oldfieldtype": "Select", + "doctype": "DocField", + "label": "Based On", + "oldfieldname": "based_on", + "fieldname": "based_on", + "fieldtype": "Select", + "reqd": 1, + "options": "\nGrand Total\nAverage Discount\nCustomerwise Discount\nItemwise Discount\nNot Applicable" + }, + { + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Customer / Item Name", + "oldfieldname": "master_name", + "fieldname": "master_name", + "fieldtype": "Link", + "options": "[Select]" + }, + { + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Applicable To (Role)", + "oldfieldname": "system_role", + "fieldname": "system_role", + "fieldtype": "Link", + "options": "Role" + }, + { + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Applicable To (User)", + "oldfieldname": "system_user", + "fieldname": "system_user", + "fieldtype": "Link", + "options": "Profile" + }, + { + "description": "This will be used for setting rule in HR module", + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Applicable To (Employee)", + "oldfieldname": "to_emp", + "fieldname": "to_emp", + "fieldtype": "Link", + "search_index": 0, + "options": "Employee" + }, + { + "description": "This will be used for setting rule in HR module", + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Applicable To (Designation)", + "oldfieldname": "to_designation", + "fieldname": "to_designation", + "fieldtype": "Link", + "search_index": 0, + "options": "Designation" + }, + { + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Approving Role", + "oldfieldname": "approving_role", + "fieldname": "approving_role", + "fieldtype": "Link", + "options": "Role" + }, + { + "oldfieldtype": "Link", + "doctype": "DocField", + "label": "Approving User", + "oldfieldname": "approving_user", + "fieldname": "approving_user", + "fieldtype": "Link", + "options": "Profile" + }, + { + "default": "0.00", + "oldfieldtype": "Currency", + "doctype": "DocField", + "label": "Above Value", + "oldfieldname": "value", + "fieldname": "value", + "fieldtype": "Currency" + }, + { + "oldfieldtype": "Small Text", + "doctype": "DocField", + "label": "Trash Reason", + "oldfieldname": "trash_reason", + "fieldname": "trash_reason", + "fieldtype": "Small Text" + }, + { + "doctype": "DocPerm" + }, + { + "doctype": "DocPerm" + } ] \ No newline at end of file