Ejemplo n.º 1
0
    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'))
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 def return_wages_excel(self, *args, **kargs):
     return local_redirect('http://www.baidu.com')
Ejemplo n.º 6
0
 def home(self, **kw):
     return local_redirect('/')
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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')
Ejemplo n.º 13
0
 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')
Ejemplo n.º 14
0
 def logout(self, **kw):
     if request.session.get('user_id'):
         request.session['user_id'] = False
         return http.local_redirect('/login')
Ejemplo n.º 15
0
    def a(self, **k):
        if not request.session.uid:
            return http.local_redirect('/web/login?redirect=/stock/barcode/')

        return request.render('stock.barcode_index')
Ejemplo n.º 16
0
    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
Ejemplo n.º 17
0
 def index(self, s_action=None, db=None, **kw):
     return http.local_redirect('/mobile_app_picking/static/www/index.html',
                                query=request.params)
Ejemplo n.º 18
0
 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)
Ejemplo n.º 19
0
 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)
Ejemplo n.º 20
0
 def osignup(self, *args, **kw):
     qcontext = self.get_auth_signup_qcontext()
     return local_redirect('/zz/signup')
Ejemplo n.º 21
0
 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)
Ejemplo n.º 22
0
Archivo: main.py Proyecto: 10537/odoo
    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')
Ejemplo n.º 23
0
	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)
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
 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')))
Ejemplo n.º 26
0
 def handler3(*args, **kw):
  return http.local_redirect('http://www.premiumquartz.com/?p=1822')
Ejemplo n.º 27
0
    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))
Ejemplo n.º 28
0
Archivo: web.py Proyecto: 10537/odoo
 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)
Ejemplo n.º 29
0
    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')