def add_new_client(self, redirect_to_signup=False, **post): uid = request.session.uid if not uid: url = '/web/signup' if redirect_to_signup else '/web/login' redirect = str('/saas_portal/add_new_client?' + urlencode(post)) query = {'redirect': redirect} return http.local_redirect(path=url, query=query) dbname = self.get_full_dbname(post.get('dbname')) user_id = request.session.uid partner_id = None if user_id: user = request.env['res.users'].browse(user_id) partner_id = user.partner_id.id plan = self.get_plan(int(post.get('plan_id', 0) or 0)) trial = bool(post.get('trial')) try: res = plan.create_new_database(dbname=dbname, user_id=user_id, partner_id=partner_id, trial=trial,) except MaximumDBException: url = request.env['ir.config_parameter'].sudo().get_param('saas_portal.page_for_maximumdb', '/') return werkzeug.utils.redirect(url) except MaximumTrialDBException: url = request.env['ir.config_parameter'].sudo().get_param('saas_portal.page_for_maximumtrialdb', '/') return werkzeug.utils.redirect(url) return werkzeug.utils.redirect(res.get('url'))
def a(self, debug=False, **kw): if not request.session.uid: return http.local_redirect('/web/login?redirect=/barcode/web') context = { 'session_info': json.dumps(request.env['ir.http'].session_info()) } return request.render('stock_picking_barcode.barcode_index', qcontext=context)
def order_contact(self, order_id, **kwargs): # 根据服务团队ID order = request.env['sale.order'].browse(order_id) anonymous_name = None if request.session.geoip: anonymous_name = anonymous_name + " (" + request.requestsession.geoip.get('country_name', "") + ")" if request.session.uid: anonymous_name = request.env.user.name uuid_type = 'USER' partner = request.env.user.partner_id author = request.env['res.users'].sudo().browse(request.session.uid).partner_id content = '你好,%s发起订单咨询,订单编号%s,请处理订单。' % (anonymous_name, order.name) if order.partner_id.user_id: # 当前用户存在导购 联系导购 uuid_session = request.env['wx.user.uuid'].sudo().search( [('partner_id', '=', partner.id), ('uuid_type', '=', uuid_type)], limit=1) else: # 联系客服 uuid_type = 'service' uuid_session = request.env['wx.user.uuid'].sudo().search( [('partner_id', '=', partner.id), ('uuid_type', '=', uuid_type)], limit=1) if uuid_session.exists(): # 存在会话,在此会话上发送信息 uuid = uuid_session['uuid'] channel = request.env["mail.channel"].sudo().search([('uuid', '=', uuid)], limit=1) active_id = channel["id"] else: # 不存在会话创建会话 _logger.info('不存在会话创建会话') if order.partner_id.user_id: # 直接联系导购 _logger.info('直接联系导购') partners_to = [order.partner_id.user_id.partner_id.id] # 增加导购到会话 session_info = request.env["mail.channel"].channel_get(partners_to) else: # 联系客服 _logger.info('联系客服') wx_channel = request.env.ref('wx_tools.channel_wx') channel_id = wx_channel.id session_info = request.env["im_livechat.channel"].get_mail_channel(channel_id, anonymous_name) if not session_info: # 看是否有在线客服 session_info = request.env["im_livechat.channel"].with_context(lang=False).get_online_mail_channel(channel_id, anonymous_name) if not session_info: return "在线客服,联系失败,在线客服没有绑定微信,无法发出通知信息。" if session_info: _logger.info('创建session_info成功') active_id = session_info["id"] uuid = session_info['uuid'] request.env['wx.user.uuid'].sudo().create({ 'openid': partner.wx_user_id.openid if partner.wx_user_id else None, 'uuid': uuid, 'last_uuid_time': fields.Datetime.now(), 'uuid_type': uuid_type, 'uuid_user_id': request.env.user.id, 'wx_user_id': partner.wx_user_id.id if partner.wx_user_id else None, 'partner_id': partner.id }) else: _logger.info('创建session_info失败') return "在线客服,联系失败。" channel = request.env["mail.channel"].sudo().search([('uuid', '=', uuid)], limit=1) message = channel.sudo().with_context(mail_create_nosubscribe=True). \ message_post(author_id=author.id, email_from=False, body=content, message_type='comment', subtype='mail.mt_comment', website_published=False) _logger.info("信息已发送%s" % message.id) channel_partner_name = channel.channel_partner_ids - author messagebody = '尊敬的%s您好,我是专属经理%s,您的订单%s,我们已收到,你有什么需要可直接联系我,我随时为您提供服务,谢谢。' % (anonymous_name, channel_partner_name.name,order.name) message = channel.sudo().with_context(mail_create_nosubscribe=True). \ message_post(author_id=channel_partner_name.id, email_from=False, body=messagebody, message_type='comment', subtype='mail.mt_comment') wxuserinfo = request.env['wx.user'].sudo().search([('id', '=', channel_partner_name.wx_user_id.id)]) channel_partner_name.wx_user_id.consultation_reminder(request.env.user.partner_id, wxuserinfo.openid, content, active_id, reminder_type='订单咨询') _logger.info("信息已发送%s" % message.id) request.session.helpdeskuuid = uuid action = request.env.ref('mail.action_discuss').id menu_id = request.env.ref('mail.menu_root_discuss').id url = '/web#action=%s&active_id=%s&menu_id=%s' % (action, active_id, menu_id) return http.local_redirect(url)
def restore_via_odoo_backup_sh(self, master_pwd, backup_file_name, name, encryption_password, copy=False): if config["admin_passwd"] != master_pwd: return env.get_template("backup_list.html").render( error="Incorrect master password") if os.path.exists(config.filestore(name)): return env.get_template("backup_list.html").render( error= 'Filestore for database "{}" already exists. Please choose another database name' .format(name)) cloud_params = self.get_cloud_params(request.httprequest.url, call_from="frontend") backup_object = BackupCloudStorage.get_object( cloud_params, filename=backup_file_name) backup_file = tempfile.NamedTemporaryFile() backup_file.write(backup_object["Body"].read()) if backup_file_name.split("|")[0][-4:] == ".enc": if not encryption_password: raise UserError( _("The backup are encrypted. But encryption password is not found. Please check your module settings." )) # GnuPG ignores the --output parameter with an existing file object as value decrypted_backup_file = tempfile.NamedTemporaryFile() decrypted_backup_file_name = decrypted_backup_file.name os.unlink(decrypted_backup_file_name) backup_file.seek(0) r = gnupg.GPG().decrypt_file( backup_file, passphrase=encryption_password, output=decrypted_backup_file_name, ) if not r.ok: error = "gpg: {}".format(r.status) if not r.valid: error += ". Maybe wrong password?" return env.get_template("backup_list.html").render(error=error) backup_file = open(decrypted_backup_file_name, "rb") try: db.restore_db(name, backup_file.name, str2bool(copy)) # Make all auto backup cron records inactive with closing(db_connect(name).cursor()) as cr: cr.autocommit(True) try: cr.execute(""" UPDATE ir_cron SET active=false WHERE active=true AND id IN (SELECT ir_cron_id FROM odoo_backup_sh_config_cron); UPDATE odoo_backup_sh_config SET active=false WHERE active=true; """) except Exception: pass return http.local_redirect("/web/database/manager") except Exception as e: error = "Database restore error: %s" % (str(e) or repr(e)) return env.get_template("backup_list.html").render(error=error) finally: os.unlink(backup_file.name)
def return_wages_excel(self, *args, **kargs): return local_redirect('http://www.baidu.com')
def home(self, **kw): return local_redirect('/')
def index(self, s_action=None, db=None, **kw): return http.local_redirect('/web#menu_id={menu_id}&action={action_id}'.format( menu_id=request.env.ref('wechat_mall.wechat_mall_config_settings_menuitem_73').id, action_id=request.env.ref('wechat_mall.wechat_mall_config_settings_action_85').id, ), query=request.params, keep_hash=True)
def helpdesk_user_helpdesk(self, team_id, **kwargs): # 根据服务团队ID team = request.env['helpdesk.team'].browse(team_id) tearm_feature = team.feature_livechat_channel_id channel_id = tearm_feature.id # 团队在线客户ID # im_livechatchannel = request.env['im_livechat.channel'].sudo().browse(channel_id) author = request.env['res.users'].sudo().browse(request.session.uid).partner_id uuid = request.session.helpdeskuuid request_uid = request.session.uid anonymous_name = None isonlinecustomer = True if request.session.geoip: anonymous_name = anonymous_name + " (" + request.requestsession.geoip.get('country_name', "") + ")" if request.session.uid: anonymous_name = request.env.user.name helpdesk_useruuid = request.env['helpdesk.livechat.uuid'].sudo().search([('uuid_user_id', '=', request_uid), ('team_id', '=', team_id)], limit=1) if helpdesk_useruuid: # 存在以前的对话UUID channel = helpdesk_useruuid.channel_id active_id = channel.id uuid = channel['uuid'] helpdesk_useruuid.write({'last_uuid_time': fields.Datetime.now()}) else: # 创建新的会话 if request.session.uid: session_info = request.env["im_livechat.channel"].with_context(lang=False).get_mail_channel(channel_id, anonymous_name) if session_info: # 如果创建了session uuid = session_info['uuid'] else: # 没有选择到用户 isonlinecustomer = False # 再次选择在客服中关联了微信用户的 session_info = request.env["im_livechat.channel"].with_context(lang=False).get_online_mail_channel(channel_id, anonymous_name) if session_info: # 再次选择到了 uuid = session_info['uuid'] else: return request.render('e2yun_website_helpdesk_form.csoffline') else: return werkzeug.utils.redirect('/web/login?error=请登录然后操作') # localkwargs = {'weixin_id': 'web', 'wx_type': 'wx'} channel = request.env["mail.channel"].sudo().search([('uuid', '=', uuid)], limit=1) active_id = channel["id"] request.env['helpdesk.livechat.uuid'].sudo().create({ 'channel_id': session_info['id'], 'uuid': uuid, 'last_uuid_time': fields.Datetime.now(), 'uuid_user_id': request_uid, 'anonymous_name': anonymous_name, 'team_id': team_id }) userbody = '你好,%s发起售后咨询。' % anonymous_name message = channel.sudo().with_context(mail_create_nosubscribe=True). \ message_post(author_id=author.id, email_from=False, body=userbody, message_type='comment', subtype='mail.mt_comment', website_published=False) # _now = fields.datetime.now() # if _now - helpdesk_useruuid.last_uuid_time >= datetime.timedelta(seconds=5 * 60): channel_partner_name = channel.channel_partner_ids - author message = channel.sudo().with_context(mail_create_nosubscribe=True). \ message_post(author_id=channel_partner_name.id, email_from=False, body='尊敬的%s您好,我是售后服务经理%s,有任何问题都可以问我哦~' % (anonymous_name, channel_partner_name.name), message_type='comment', subtype='mail.mt_comment') wxuserinfo = request.env['wx.user'].sudo().search([('id', '=', channel_partner_name.wx_user_id.id)]) if wxuserinfo: channel_partner_name.wx_user_id.consultation_reminder(request.env.user.partner_id, wxuserinfo.openid, userbody, active_id, reminder_type='售后客服咨询') request.session.helpdeskuuid = uuid action = request.env.ref('mail.action_discuss').id menu_id = request.env.ref('mail.menu_root_discuss').id url = '/web#action=%s&active_id=%s&menu_id=%s' % (action, active_id, menu_id) return http.local_redirect(url)
def web_login(self, redirect=None, *args, **kw): ensure_db() request.params['login_success'] = False response = super(PropertyManagementLogin, self).web_login(*args, **kw) response.qcontext.update(self.get_auth_signup_config()) if request.httprequest.method == 'GET' and request.session.uid and request.params.get('redirect'): # Redirect if already logged in and redirect param is present return http.redirect_with_hash(request.params.get('redirect')) if not request.uid: request.uid = odoo.SUPERUSER_ID values = request.params.copy() try: values['databases'] = http.db_list() except odoo.exceptions.AccessDenied: values['databases'] = None if request.httprequest.method == 'POST': old_uid = request.uid try: uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password']) request.params['login_success'] = True if uid is not False: # code for add from cookie property ids product_ids_from_cookies = request.httprequest.cookies.get( 'property_id') product_ids_from_cookies_str = str(product_ids_from_cookies) product_ids_from_cookies_list = product_ids_from_cookies_str.split( ',') account_asset_cookie_ids = [] if product_ids_from_cookies_list[0] == 'None': account_asset_cookie_ids = [] else: for one_prod_cookie_id in product_ids_from_cookies_list: if not one_prod_cookie_id: continue one_cookie_int_id = int(one_prod_cookie_id) account_asset_cookie_ids.append(one_cookie_int_id) user_obj = request.env['res.users'] partner_obj = request.env['res.partner'] user = user_obj.browse(int(uid)) account_asset_frvorite_property_ids = [] if user and user.partner_id: for one_asset_id in user.partner_id.fav_assets_ids: account_asset_frvorite_property_ids.append( one_asset_id.id) properties_for_save = [ x for x in account_asset_cookie_ids if x not in account_asset_frvorite_property_ids] if properties_for_save: for one_property_save in properties_for_save: selected_property = user.partner_id.write( {'fav_assets_ids': [(4, int(one_property_save))]}) # code for redicet homepage when backend_users_ids = request.env.ref( 'property_website_ee.group_property_website_backend').sudo().users.ids if uid not in backend_users_ids: if uid == SUPERUSER_ID: pass else: return http.local_redirect('/') return http.redirect_with_hash(self._login_redirect(uid, redirect=redirect)) except odoo.exceptions.AccessDenied as e: request.uid = old_uid if e.args == odoo.exceptions.AccessDenied().args: values['error'] = _("Wrong login/password") else: values['error'] = e.args[0] else: if 'error' in request.params and request.params.get('error') == 'access': values['error'] = _('Only employee can access this database. Please contact the administrator.') if 'login' not in values and request.session.get('auth_login'): values['login'] = request.session.get('auth_login') if not odoo.tools.config['list_db']: values['disable_database_manager'] = True response = request.render('web.login', values) response.headers['X-Frame-Options'] = 'DENY' return response
def add_new_client(self, redirect_to_signup=False, **post): uid = request.session.uid if not uid: url = '/web/signup' if redirect_to_signup else '/web/login' redirect = str('/saas_portal/add_new_client?' + urlencode(post)) query = {'redirect': redirect} return http.local_redirect(path=url, query=query) dbname = post.get( 'dbname' ) #self.get_full_dbname(post.get('dbname'), int(post.get('plan_id', 0) or 0)) user_id = request.session.uid partner_id = None if user_id: user = request.env['res.users'].browse(user_id) partner_id = user.partner_id.id plan = self.get_plan(int(post.get('plan_id', 0) or 0)) trial = bool(post.get('trial', False)) order_id = post.get('order_id') lang = None template_db = None if order_id: order = request.env['sale.order'].sudo().browse(int(order_id)) base_plan_product = order.order_line.mapped('product_id').filtered( lambda product: product.saas_plan_id != False and product. saas_product_type == 'base') if base_plan_product.attribute_value_ids: for attr in base_plan_product.attribute_value_ids: if attr.attribute_id and attr.attribute_id.saas_code == 'lang': if attr.saas_lang: lang = attr.saas_lang if attr.template_ids: for templ in attr.template_ids: if base_plan_product.saas_plan_id.id in templ.plan_ids.ids: template_db = templ.name break else: if post.get('trial_product_id', False): trial_product = request.env['product.product'].sudo().browse( int(post.get('trial_product_id'))) for attr in trial_product.attribute_value_ids: if attr.attribute_id and attr.attribute_id.saas_code == 'lang': if attr.saas_lang: lang = attr.saas_lang if attr.template_ids: for templ in attr.template_ids: if base_plan_product.saas_plan_id.id in templ.plan_ids.ids: template_db = templ.name break try: res = plan.create_new_database(dbname=dbname, user_id=user_id, partner_id=partner_id, trial=trial, order_id=order_id, lang=lang, template_db=template_db) except MaximumDBException: _logger.info("MaximumDBException") url = request.env['ir.config_parameter'].sudo().get_param( 'saas_portal.page_for_maximumdb', '/') return werkzeug.utils.redirect(url) except MaximumTrialDBException: _logger.info("MaximumTrialDBException") url = request.env['ir.config_parameter'].sudo().get_param( 'saas_portal.page_for_maximumtrialdb', '/') return werkzeug.utils.redirect(url) if plan and plan.on_create == 'login': return werkzeug.utils.redirect(res.get('url')) elif order_id: return request.redirect('/shop/confirmation')
def delete_prd(self, pr_remove, **kwargs): pr_remove.unlink() return http.local_redirect('/avl_product_shopper')
def delete(self, usr, **kwargs): usr.unlink() return http.local_redirect('/all_sp')
def department_remove(self, department=None, **kw): department = request.env['placement.portal.department.data'].sudo( ).browse([department]) if department: department.unlink() return http.local_redirect('/departdata')
def logout(self, **kw): if request.session.get('user_id'): request.session['user_id'] = False return http.local_redirect('/login')
def a(self, **k): if not request.session.uid: return http.local_redirect('/web/login?redirect=/stock/barcode/') return request.render('stock.barcode_index')
def mfa_login_post(self, *args, **kwargs): """Process MFA login attempt. Overview: * Identify current user based on login in session. If this doesn't work, redirect to the password login page with an error message. * Validate the confirmation code provided by the user. If it's not valid, redirect to the previous login step with an error message. * Update the session to indicate that the MFA login process for this user is complete and attempt password authentication again. * Build a trusted device cookie and add it to the response if the trusted device option was checked. * Redirect to the provided URL or to '/web' if one was not given. """ # sudo() is required because there is no request.env.uid (likely since # there is no user logged in at the start of the request) user_model_sudo = request.env['res.users'].sudo() config_model_sudo = user_model_sudo.env['ir.config_parameter'].sudo() user_login = request.session.get('login') user = user_model_sudo.search([('login', '=', user_login)]) if not user: return http.local_redirect( '/web/login', query={ 'redirect': request.params.get('redirect'), 'error': _('You must log in with a password before starting the' ' MFA login process.'), }, keep_hash=True, ) confirmation_code = request.params.get('confirmation_code') if not user.validate_mfa_confirmation_code(confirmation_code): return http.local_redirect( '/auth_totp/login', query={ 'redirect': request.params.get('redirect'), 'error': _('Your confirmation code is not correct. Please try' ' again.'), }, keep_hash=True, ) request.session['mfa_login_active'] = user.id user_pass = request.session.get('password') uid = request.session.authenticate(request.db, user.login, user_pass) if uid: request.params['login_success'] = True redirect = request.params.get('redirect') if not redirect: redirect = '/web' response = http.redirect_with_hash(redirect) if not isinstance(response, WerkzeugResponse): response = Response(response) if request.params.get('remember_device'): secret = user.trusted_device_cookie_key device_cookie = JsonSecureCookie({'user_id': user.id}, secret) cookie_lifetime = timedelta(days=30) cookie_exp = datetime.utcnow() + cookie_lifetime device_cookie = device_cookie.serialize(cookie_exp) cookie_key = 'trusted_devices_%d' % user.id sec_config = config_model_sudo.get_param('auth_totp.secure_cookie') security_flag = sec_config != '0' response.set_cookie( cookie_key, device_cookie, max_age=cookie_lifetime.total_seconds(), expires=cookie_exp, httponly=True, secure=security_flag, ) return response
def index(self, s_action=None, db=None, **kw): return http.local_redirect('/mobile_app_picking/static/www/index.html', query=request.params)
def index(self): if not request.session.uid: return http.local_redirect('/web/login', query=request.params, keep_hash=True) else: return http.local_redirect('/web', query=request.params, keep_hash=True)
def index(self, *args, **kw): if request.session.uid and not request.env['res.users'].sudo().browse(request.session.uid).has_group('base.group_user'): return http.local_redirect('/my', query=request.params, keep_hash=True) return super(Home, self).index(*args, **kw)
def osignup(self, *args, **kw): qcontext = self.get_auth_signup_qcontext() return local_redirect('/zz/signup')
def web_client(self, s_action=None, **kw): if request.session.uid and not request.env['res.users'].sudo().browse(request.session.uid).has_group('base.group_user'): return http.local_redirect('/my', query=request.params, keep_hash=True) return super(Home, self).web_client(s_action, **kw)
def a(self, debug=False, **k): if not request.session.uid: return http.local_redirect('/web/login?redirect=/stock/barcode/') return request.render('stock.barcode_index')
def index(self, s_action=None, db=None, **kw): logger.info("Redirected to Portal") if request.session.get('login') in [None,False]: return http.local_redirect('/web', query=request.params, keep_hash=True) else: return http.local_redirect('/page/homepage', query=request.params, keep_hash=True)
def web_login(self, redirect=None, **kw): # OAuth提供商id provider_id = kw.get('state', 'default') # 以下微信相关 # code = kw.get('code', '') codetype = kw.get('codetype', '') wx_user_info = {} # 获取从WX过来的code # wx_client_code = client.wxenv(request.env) # wxcode = wx_client_code.WX_CODE # if not wxcode: # wxcode = {} #logging.info("登录:%s" % code) values = request.params.copy() user_agent = request.httprequest.headers.get('user-agent').lower() is_wx_client = True if 'micromessenger' in user_agent else False if code is False: return super(LoginHome, self).web_login(redirect, **kw) if code: # code换取token entry = client.wxenv(request.env) # if code not in wxcode: # 判断用户code是使用 if not entry.wxclient.session.get(code): # code 没有使用,用code 换取 # 将获取到的用户放到Session中 if codetype == 'corp': wx_user_info = corp_client.get_user_info( request, code) # code 换取微信登录信息 企业号 else: wx_user_info = client.get_user_info( request, code, code) # code 换取微信登录信息 微信号 wx_user_info['UserId'] = wx_user_info['openid'] kw.pop('code') wx_user_info['codetype'] = codetype request.session.wx_user_info = wx_user_info entry.wxclient.session.set(code, code) # wx_client_code.WX_CODE[code] = code else: # 如果使用,直接用session中的用户信息 wx_user_info = request.session.wx_user_info if not wx_user_info or 'UserId' not in wx_user_info: return super(LoginHome, self).web_login(redirect, **kw) odoouser = request.env['wx.user.odoouser'].sudo().search( [('openid', '=', wx_user_info['UserId'])], limit=1) if odoouser.exists(): kw['login'] = odoouser.user_id.login kw['password'] = odoouser.password request.params['login'] = odoouser.user_id.login request.params['password'] = odoouser.password tracetype = request.env['wx.tracelog.type'].sudo().search([ ('code', '=', provider_id) ]) if tracetype.exists(): request.env['wx.tracelog'].sudo().create({ "tracelog_type": tracetype.id, "title": '菜单访问%s' % tracetype.name, "user_id": odoouser.user_id.id if odoouser.user_id else None, "wx_user_id": odoouser.wx_user_id.id if odoouser.wx_user_id else None }) login_as = super(LoginHome, self).web_login(redirect, **kw) if 'error' in login_as.qcontext: return login_as logging.info("登录用户%s:%s" % (odoouser.user_id.login, wx_user_info['UserId'])) try: uid = request.session.authenticate(request.session.db, odoouser.user_id.login, odoouser.password) except Exception as e: logging.info( "登录用户出错:%s:%s:%s" % (odoouser.user_id.login, wx_user_info['UserId'], e)) request.params['login_success'] = False return http.local_redirect('/web/login') if redirect: return http.local_redirect(redirect) else: return http.local_redirect('/') else: # request.session.logout() # uid = request.session.authenticate(request.session.db, obj.user_id.login, '') request.session.uid = None request.params['login_success'] = False return http.local_redirect('/web/login') ## return super(LoginHome, self).web_login(redirect, **kw) elif request.session.wx_user_info: # 存在微信登录访问 wx_user_info = request.session.wx_user_info wx_user_info['openid'] = wx_user_info['UserId'] request.session.wx_user_info = wx_user_info # 查询当前微信号绑定的用户信息 userinfo = request.env['wx.user.odoouser'].sudo().search([ ('openid', '=', wx_user_info['UserId']) ]) # 查询前面用户日否已存在 userinfo_exist = request.env['res.users'].sudo().search([ ('wx_user_id.openid', '=', wx_user_info['UserId']) ]) if 'login' in values: for user_e in userinfo_exist: # 在用里面已存在微信登录 if user_e.login != kw.get('login') and kw.get('login'): error_message = "微信账号%s(%s)已绑定账号%s(%s),用户%s不能正常登录,请联系管理员。" % ( wx_user_info['UserId'], wx_user_info['nickname'], user_e.login, user_e.name, kw.get('login')) error_str = "此微信已绑定账号%s(%s),请联系管理员。" % (user_e.name, user_e.login) tracetype = request.env['wx.tracelog.type'].sudo( ).search([('code', '=', provider_id)]) if tracetype.exists(): request.env['wx.tracelog'].sudo().create({ "tracelog_type": tracetype.id, "title": '登录出错%s' % error_message, "user_id": userinfo.user_id.id if userinfo.user_id else None, "wx_user_id": userinfo.wx_user_id.id if userinfo.wx_user_id else None }) request.params['login_success'] = False return werkzeug.utils.redirect('/web/login?error=%s' % error_str) userinfo_login = request.env['wx.user.odoouser'].sudo().search( [('user_id.login', '=', kw['login'])]) for user_l in userinfo_login: # 检查用户否在其它微信登录 if user_l.openid != wx_user_info['UserId']: error_message = "账号%s(%s)已在微信%s(%s)登录,请先注销登录,如问题无法解决请联系管理员。" % ( kw['login'], user_l.user_id.name, user_l.wx_user_id.nickname if user_l.wx_user_id else '', user_l.openid) tracetype = request.env['wx.tracelog.type'].sudo( ).search([('code', '=', provider_id)]) if tracetype.exists(): request.env['wx.tracelog'].sudo().create({ "tracelog_type": tracetype.id, "title": '登录出错%s' % error_message, "user_id": userinfo.user_id.id if userinfo.user_id else None, "wx_user_id": userinfo.wx_user_id.id if userinfo.wx_user_id else None }) request.params['login_success'] = False return werkzeug.utils.redirect('/web/login?error=%s' % error_message) if 'login' not in values or 'password' not in values: request.params['login_success'] = False return super(LoginHome, self).web_login(redirect, **kw) login_as = super(LoginHome, self).web_login(redirect, **kw) if 'error' in login_as.qcontext: return login_as logging.info("登录用户%s" % request.params['login']) uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password']) if uid is not False: wx_user_info['user_id'] = uid wx_user_info['password'] = request.params['password'] if userinfo: tracetype = request.env['wx.tracelog.type'].sudo().search([ ('code', '=', provider_id) ]) if tracetype.exists(): request.env['wx.tracelog'].sudo().create({ "tracelog_type": tracetype.id, "title": '菜单访问%s' % tracetype.name, "user_id": userinfo.user_id.id if userinfo.user_id else None, "wx_user_id": userinfo.wx_user_id.id if userinfo.wx_user_id else None }) wxuserinfo = request.env['wx.user'].sudo().search([ ('openid', '=', wx_user_info['UserId']) ]) wx_user_info['wx_user_id'] = wxuserinfo.id request.env['wx.user.odoouser'].sudo().write(wx_user_info) odoouser = userinfo.write(wx_user_info) else: wxuserinfo = request.env['wx.user'].sudo().search([ ('openid', '=', wx_user_info['UserId']) ]) wx_user_info['wx_user_id'] = wxuserinfo.id odoouser = request.env['wx.user.odoouser'].sudo().create( wx_user_info) resuser = request.env['res.users'].sudo().search( [('id', '=', uid)], limit=1) if resuser: _data = client.get_img_data( str(wx_user_info['headimgurl'])) resuser.write({ "wx_user_id": wxuserinfo.id, "wx_id": wx_user_info['UserId'], "image": base64.b64encode(_data), }) tracetype = request.env['wx.tracelog.type'].sudo( ).search([('code', '=', "login")]) if tracetype.exists(): request.env['wx.tracelog'].sudo().create({ "tracelog_type": tracetype.id, "title": '通过微信登录', "user_id": odoouser.user_id.id if odoouser.user_id else None, "wx_user_id": odoouser.wx_user_id.id if odoouser.wx_user_id else None }) if redirect: return http.local_redirect(redirect) else: return http.local_redirect('/web#home') else: if kw.get('login') and kw.get('password'): userinfo = request.env['wx.user.odoouser'].sudo().search([ ('user_id.login', '=', kw['login']) ]) if userinfo.exists(): userinfo.write({'password': kw['password']}) if is_wx_client and kw.get('login') and kw.get('password'): request.params['login_success'] = False return werkzeug.utils.redirect('/web/login?error=请从微信菜单发起登录') return super(LoginHome, self).web_login(redirect, **kw)
def training_plan_local_redirect(self, **kw): # &t=%s % int(round(time.time())) print('/funenc_xa_station/static/html/get_drill_plan_code.html?drill_plan_id={}'.format(kw.get('drill_plan_id'))) return http.local_redirect( '/funenc_xa_station/static/html/test.html?drill_plan_id={}'.format(kw.get('drill_plan_id')))
def handler3(*args, **kw): return http.local_redirect('http://www.premiumquartz.com/?p=1822')
def app_index(self, **kw): time_1 = round(time.time()) return http.local_redirect( '/funenc_xa_station/static/static/index.html?t={}'.format(time_1))
def a(self, debug=False, **kw): if not request.session.uid: return http.local_redirect('/web/login?redirect=/barcode/web') return request.render('stock_picking_barcode.barcode_index')