From 0a5657809a9282e03664e53f829a3ccc4011be74 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 20 Jan 2012 10:52:53 +0530 Subject: [PATCH 1/2] fixes to add user --- erpnext/home/page/my_company/my_company.py | 45 ++++-- .../jan_mar_2012/subdomain_login_patch.py | 4 +- .../profile_control/profile_control.py | 129 ------------------ 3 files changed, 39 insertions(+), 139 deletions(-) diff --git a/erpnext/home/page/my_company/my_company.py b/erpnext/home/page/my_company/my_company.py index c239162797..09bb9eef74 100644 --- a/erpnext/home/page/my_company/my_company.py +++ b/erpnext/home/page/my_company/my_company.py @@ -1,6 +1,7 @@ import webnotes from webnotes.utils import cint, load_json, cstr +from webnotes.model.doc import Document try: import json except: import simplejson as json @@ -65,8 +66,7 @@ def add_user(args): # add profile record # def add_profile(args): - from webnotes.utils import validate_email_add - from webnotes.model.doc import Document + from webnotes.utils import validate_email_add, now email = args['user'] sql = webnotes.conn.sql @@ -80,7 +80,7 @@ def add_profile(args): if sql("select name from tabProfile where name = %s", email): # exists, enable it sql("update tabProfile set enabled = 1, docstatus=0 where name = %s", email) - webnotes.msgprint('Profile exists, enabled it') + webnotes.msgprint('Profile exists, enabled it with new password') else: # does not exist, create it! pr = Document('Profile') @@ -92,11 +92,25 @@ def add_profile(args): pr.user_type = 'System User' pr.save(1) - if args.get('password'): - sql(""" - UPDATE tabProfile - SET password = PASSWORD(%s) - WHERE name = %s""", (args.get('password'), email)) + if args.get('password'): + sql(""" + UPDATE tabProfile + SET password = PASSWORD(%s), modified = %s + WHERE name = %s""", (args.get('password'), now, email)) + + send_welcome_mail(email, args.get('password')) + +def send_welcome_mail(email, password): + """send welcome mail to user with password and login url""" + pr = Document('Profile', email) + from webnotes.utils.email_lib import sendmail_md + args = { + 'company': webnotes.conn.get_default('company'), + 'name': email, + 'password': password, + 'account_url': webnotes.conn.get_default('account_url') + } + sendmail_md(pr.email, subject="Welcome to ERPNext", msg=welcome_txt % args) # # post comment @@ -166,3 +180,18 @@ def update_security(args=''): else: webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s", (args['new_password'], args['user'])) else: webnotes.msgprint('Settings Updated') + +welcome_txt = """ +## %(company)s + +#### Welcome! + +A new account has been created for you, here are your details: + +login-id: %(name)s +password: %(password)s + +To login to your new ERPNext account, please go to: + +%(account_url)s +""" \ No newline at end of file diff --git a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py b/erpnext/patches/jan_mar_2012/subdomain_login_patch.py index 9c72b0ec31..b0633cc3be 100644 --- a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py +++ b/erpnext/patches/jan_mar_2012/subdomain_login_patch.py @@ -4,7 +4,7 @@ from webnotes.model.doc import Document def execute(): add_default_home_page() cleanup() - + def cleanup(): from webnotes.model import delete_doc delete_doc("DocType", "SSO Control") @@ -19,4 +19,4 @@ def add_default_home_page(): d.parentfield = 'default_home_pages' d.role = 'Guest' d.home_page = 'Login Page' - d.save(1) \ No newline at end of file + d.save(1) diff --git a/erpnext/utilities/doctype/profile_control/profile_control.py b/erpnext/utilities/doctype/profile_control/profile_control.py index 189d8b14b4..b8db231340 100644 --- a/erpnext/utilities/doctype/profile_control/profile_control.py +++ b/erpnext/utilities/doctype/profile_control/profile_control.py @@ -22,66 +22,9 @@ class DocType: self.doc, self.doclist = d,dl self.last_profile = None - # Sync Profile with Gateway - # ------------------------- - def sync_with_gateway(self,pid): - p = Document('Profile',pid) - - # login to gateway - from webnotes.utils.webservice import FrameworkServer - fw = FrameworkServer('www.erpnext.com','/','__system@webnotestech.com','password',https=1) - - account_id = sql("select value from tabSingles where doctype='Control Panel' and field='account_id'")[0][0] - - # call add profile - ret = fw.runserverobj('Profile Control','Profile Control','add_profile_gateway',str([p.first_name, p.middle_name, p.last_name, p.email, p.name, account_id])) - - if ret.get('exc'): - msgprint(ret['exc']) - raise Exception - def get_role_permission(self,role): perm = sql("select distinct t1.`parent`, t1.`read`, t1.`write`, t1.`create`, t1.`submit`,t1.`cancel`,t1.`amend` from `tabDocPerm` t1, `tabDocType` t2 where t1.`role` ='%s' and t1.docstatus !=2 and t1.permlevel = 0 and t1.`read` = 1 and t2.module != 'Recycle Bin' and t1.parent=t2.name "%role) return perm or '' - - - # Check if password is expired - # -------------------------------- - def has_pwd_expired(self): - if session['user'] != 'Administrator' and session['user'].lower() != 'demo': - last_pwd_date = None - try: - last_pwd_date = sql("select password_last_updated from tabProfile where name=%s",session['user'])[0][0] or '' - except: - return 'No' - if cstr(last_pwd_date) == '': - sql("update tabProfile set password_last_updated = '%s' where name='%s'"% (nowdate(),session['user'])) - return 'No' - else: - date_diff = (getdate(nowdate()) - last_pwd_date).days - expiry_period = sql("select value from tabSingles where doctype='Control Panel' and field='password_expiry_days'") - if expiry_period and cint(expiry_period[0][0]) and cint(expiry_period[0][0]) < date_diff: - return 'Yes' - return 'No' - - def reset_password(self,pwd): - if sql("select name from tabProfile where password=PASSWORD(%s) and name=%s", (pwd,session['user'])): - return 'Password cannot be same as old password' - sql("update tabProfile set password=PASSWORD(%s),password_last_updated=%s where name = %s", (pwd,nowdate(),session['user'])) - return 'ok' - -#------------------------------------------------------------------------------------------------------- - #functions for manage user page - #-----------Enable/Disable Profile----------------------------------------------------------------------------------------------- - def change_login(self,args): - args = eval(args) - - if cint(args['set_disabled'])==0: - sql("update `tabProfile` set enabled=1 where name='%s'"%args['user']) - else: - sql("update `tabProfile` set enabled=0 where name='%s'"%args['user']) - - return 'ok' #------------return role list ------------------------------------------------------------------------------------------------- # All roles of Role Master @@ -113,75 +56,3 @@ class DocType: pr.parentfield = 'userroles' pr.save(1) - - - # Add new member - # --------------- - def add_profile(self,arg): - - # Check credit balance - get_obj('WN ERP Client Control').check_credit_balance() - - arg=eval(arg) - pr=Document('Profile') - for d in arg.keys(): - if d!='role': - pr.fields[d] = arg[d] - - pr.enabled=0 - pr.user_type='System User' - pr.save(1) - pr_obj = get_obj('Profile',pr.name) - if (pr.name): - msg="New member is added" - pr_obj.on_update() - else: - msg="Profile not created" - - return cstr(msg) - - # to find currently login user - def current_login(self): - cl_list=sql("select distinct user from tabSessions") - if cl_list: - cl_list=[x[0] for x in cl_list] - - return cl_list - - - # Remove Profile - # --------------- - def remove_profile(self, user): - # delete profile - webnotes.model.delete_doc('Profile',user) - - # Update WN ERP Client Control - sql("update tabSingles set value = value - 1 where field = 'total_users' and doctype = 'WN ERP Client Control'") - - # login to gateway - from webnotes.utils.webservice import FrameworkServer - fw = FrameworkServer('www.erpnext.com','/','__system@webnotestech.com','password',https=1) - - account_id = sql("select value from tabSingles where doctype='Control Panel' and field='account_id'")[0][0] - - # call remove profile - ret = fw.runserverobj('Profile Control','Profile Control','remove_app_sub',str([user, account_id, session['user']])) - - if ret.get('exc'): - msgprint(ret['exc']) - raise Exception - - return "User Removed Successfully" - - - # Create Profile - # --------------- - def create_profile(self, email): - if sql("select name from tabProfile where name = %s", email): - sql("update tabProfile set docstatus = 0 where name = %s", email) - else: - pr = Document('Profile') - pr.email = email - pr.enabled=0 - pr.user_type='System User' - pr.save(1) From 764fdb942e1f577b7ea090499095ccf0c80aee76 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 20 Jan 2012 12:07:56 +0530 Subject: [PATCH 2/2] updated account url and js version --- erpnext/home/page/dashboard/dashboard.js | 1 + .../jan_mar_2012/subdomain_login_patch.py | 4 +- .../doctype/manage_account/manage_account.js | 2 +- .../doctype/manage_account/manage_account.py | 114 +++++++++--------- .../doctype/manage_account/manage_account.txt | 46 +++++-- index.html | 3 +- version.num | 2 +- 7 files changed, 96 insertions(+), 76 deletions(-) diff --git a/erpnext/home/page/dashboard/dashboard.js b/erpnext/home/page/dashboard/dashboard.js index aac42a3e3b..8ef2ffb0c5 100644 --- a/erpnext/home/page/dashboard/dashboard.js +++ b/erpnext/home/page/dashboard/dashboard.js @@ -1,6 +1,7 @@ pscript.onload_dashboard = function() { // load jqplot $.scriptPath = 'js/' + wn.require('lib/css/jqpot.css'); wn.require('lib/js/legacy/jquery/jquery.jqplot.min.js'); wn.require('lib/js/legacy/jquery/jqplot-plugins/jqplot.barRenderer.js'); wn.require('lib/js/legacy/jquery/jqplot-plugins/jqplot.canvasAxisTickRenderer.min.js'); diff --git a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py b/erpnext/patches/jan_mar_2012/subdomain_login_patch.py index b0633cc3be..edfcb66535 100644 --- a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py +++ b/erpnext/patches/jan_mar_2012/subdomain_login_patch.py @@ -2,9 +2,11 @@ import webnotes from webnotes.model.doc import Document def execute(): + from webnotes.modules import reload_doc add_default_home_page() cleanup() - + reload_doc('setup','doctype','manage_account') + def cleanup(): from webnotes.model import delete_doc delete_doc("DocType", "SSO Control") diff --git a/erpnext/setup/doctype/manage_account/manage_account.js b/erpnext/setup/doctype/manage_account/manage_account.js index 7c3b193335..63cc1d5e74 100644 --- a/erpnext/setup/doctype/manage_account/manage_account.js +++ b/erpnext/setup/doctype/manage_account/manage_account.js @@ -1,6 +1,6 @@ // Validate cur_frm.cscript.validate = function(doc, cdt, cdn) { - $c_obj(make_doclist(cdt, cdn), 'update_cp', '', function(r, rt){ + $c_obj(make_doclist(cdt, cdn), 'get_defaults', '', function(r, rt){ sys_defaults = r.message; }); } \ No newline at end of file diff --git a/erpnext/setup/doctype/manage_account/manage_account.py b/erpnext/setup/doctype/manage_account/manage_account.py index 5b1292aba2..757d323fef 100644 --- a/erpnext/setup/doctype/manage_account/manage_account.py +++ b/erpnext/setup/doctype/manage_account/manage_account.py @@ -1,66 +1,60 @@ -# Please edit this list and import only required elements +"""Global Defaults""" import webnotes -from webnotes.utils import cint, cstr, get_defaults, set_default, fmt_money, get_last_day, get_first_day -from webnotes import session, form, is_testing, msgprint, errprint - -sql = webnotes.conn.sql - - -# ----------------------------------------------------------------------------------------- - +keydict = { + "fiscal_year": "current_fiscal_year", + 'company': 'default_company', + 'currency': 'default_currency', + 'price_list_name': 'default_price_list', + 'price_list_currency': 'default_price_list_currency', + 'item_group': 'default_item_group', + 'customer_group': 'default_customer_group', + 'cust_master_name': 'cust_master_name', + 'supplier_type': 'default_supplier_type', + 'supp_master_name': 'supp_master_name', + 'territory': 'default_territory', + 'stock_uom': 'default_stock_uom', + 'fraction_currency': 'default_currency_fraction', + 'valuation_method': 'default_valuation_method', + 'date_format': 'date_format', + 'currency_format':'default_currency_format', + 'account_url':'account_url' +} class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl + def __init__(self, d, dl): + self.doc, self.doclist = d, dl -#--------------------------------------------------------------------------------------------------------------------------------------------- - def get_bal(self,arg): - bal = sql("select `tabAccount Balance`.balance,`tabAccount`.debit_or_credit from `tabAccount`,`tabAccount Balance` where `tabAccount Balance`.account=%s and `tabAccount Balance`.period=%s and `tabAccount Balance`.account=`tabAccount`.name ",(arg,self.doc.current_fiscal_year)) - if bal: - return fmt_money(flt(bal[0][0])) + ' ' + bal[0][1] - - -# ========================================================================================================================================= - - # Update Default - # --------------- - def set_system_default(self, defkey, defvalue): - set_default(defkey, defvalue) - - if defkey == 'fiscal_year': - ysd = sql("select year_start_date from `tabFiscal Year` where name=%s", cstr(defvalue)) - ysd = ysd and ysd[0][0] or '' - if ysd: - set_default('year_start_date', ysd.strftime('%Y-%m-%d')) - set_default('year_end_date', get_last_day(get_first_day(ysd,0,11)).strftime('%Y-%m-%d')) - - - # Update - # -------- - def update_cp(self): - def_list = [['fiscal_year',self.doc.current_fiscal_year], - ['company',self.doc.default_company], - ['currency',self.doc.default_currency], - ['price_list_name',self.doc.default_price_list or ''], - ['price_list_currency', self.doc.default_price_list_currency or ''], - ['item_group',self.doc.default_item_group or ''], - ['customer_group',self.doc.default_customer_group or ''], - ['cust_master_name',self.doc.cust_master_name or ''], - ['supplier_type',self.doc.default_supplier_type or ''], - ['supp_master_name',self.doc.supp_master_name], - ['territory',self.doc.default_territory or ''], - ['stock_uom',self.doc.default_stock_uom or ''], - ['fraction_currency',self.doc.default_currency_fraction or ''], - ['valuation_method',self.doc.default_valuation_method]] - - for d in def_list: - self.set_system_default(d[0],d[1]) - # Update Currency Format + def get_bal(self,arg): + """get account balance (??)""" + from webnotes.utils import fmt_money, flt + bal = webnotes.conn.sql("select `tabAccount Balance`.balance,`tabAccount`.debit_or_credit from `tabAccount`,`tabAccount Balance` where `tabAccount Balance`.account=%s and `tabAccount Balance`.period=%s and `tabAccount Balance`.account=`tabAccount`.name ",(arg,self.doc.current_fiscal_year)) + if bal: + return fmt_money(flt(bal[0][0])) + ' ' + bal[0][1] - sql("update `tabSingles` set value = '%s' where field = 'currency_format' and doctype = 'Control Panel'" % self.doc.default_currency_format) - sql("update `tabSingles` set value = '%s' where field = 'date_format' and doctype = 'Control Panel'" %self.doc.date_format) - - - return get_defaults() - + def validate(self): + """validate""" + if not (self.doc.account_url and (self.doc.account_url.startswith('http://') \ + or self.doc.account_url.startswith('https://'))): + webnotes.msgprint("Account URL must start with 'http://' or 'https://'", raise_exception=1) + + def on_update(self): + """update defaults""" + self.validate() + + for key in keydict: + webnotes.conn.set_default(key, self.doc.fields.get(keydict[key], '')) + + # update year start date and year end date from fiscal_year + ysd = webnotes.conn.sql("""select year_start_date from `tabFiscal Year` + where name=%s""", self.doc.fiscal_year) + + ysd = ysd and ysd[0][0] or '' + from webnotes.utils import get_first_day, get_last_day + if ysd: + webnotes.conn.set_default('year_start_date', ysd.strftime('%Y-%m-%d')) + webnotes.conn.set_default('year_end_date', \ + get_last_day(get_first_day(ysd,0,11)).strftime('%Y-%m-%d')) + + def get_defaults(self): + return webnotes.conn.get_defaults() \ No newline at end of file diff --git a/erpnext/setup/doctype/manage_account/manage_account.txt b/erpnext/setup/doctype/manage_account/manage_account.txt index 8a156a06d1..18a9872d1c 100644 --- a/erpnext/setup/doctype/manage_account/manage_account.txt +++ b/erpnext/setup/doctype/manage_account/manage_account.txt @@ -5,14 +5,13 @@ { 'creation': '2010-08-08 17:09:09', 'docstatus': 0, - 'modified': '2011-12-21 13:22:33', + 'modified': '2012-01-20 11:25:18', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1323855502', 'allow_copy': 1, 'allow_email': 1, @@ -29,7 +28,7 @@ 'section_style': 'Tabbed', 'server_code_error': ' ', 'show_in_menu': 1, - 'version': 515 + 'version': 517 }, # These values are common for all DocField @@ -102,6 +101,37 @@ 'write': 1 }, + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Section Break', + 'label': 'System' + }, + + # DocField + { + 'colour': 'White:FFF', + 'description': 'Example: http://frappe.erpnext.com', + 'doctype': 'DocField', + 'fieldname': 'account_url', + 'fieldtype': 'Data', + 'label': 'Account URL' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Column Break' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'sms_sender_name', + 'fieldtype': 'Data', + 'label': 'SMS Sender Name' + }, + # DocField { 'doctype': 'DocField', @@ -173,14 +203,6 @@ 'label': 'Default Currency Fraction' }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'sms_sender_name', - 'fieldtype': 'Data', - 'label': 'SMS Sender Name' - }, - # DocField { 'doctype': 'DocField', @@ -510,4 +532,4 @@ 'label': 'Employee Records to be created by ', 'options': '\nNaming Series\nEmployee Number' } -] +] \ No newline at end of file diff --git a/index.html b/index.html index ebe217bc5c..076064ac66 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,8 @@ ERPNext -