def doc_notification(self, req, db, token): # Status 1 is received every user connection to or disconnection from document co-editing. # Status 2 (3) is received 10 seconds after the document is closed for editing by the last user. # Status 4 is received after the document is closed for editing with no # changes by the last user. if req.JsonRawRequest['status'] == 1: return {"error": 0} if req.JsonRawRequest['status'] == 4: return {"error": 0} registry = RegistryManager.get(db) with registry.cursor() as cr: try: # find user via token u = registry.get('res.users') u_id = u.search(cr, openerp.SUPERUSER_ID, [('auth_token', '=', token)]) a = registry.get('ir.attachment') a.download_and_overwrite(cr, u_id[0], req.JsonRawRequest['key'], req.JsonRawRequest['url']) except Exception, e: # signup error _logger.exception("Auth: %s" % str(e))
def download_attachment_pdf(self, model, id, method, attachment_id, auth_token, db, **kw): # FIXME use /web/binary/saveas directly dbname = db registry = RegistryManager.get(dbname) Model = registry.get('project.project') with registry.cursor() as cr: try: # find user via token u = registry.get('res.users') u_id = u.search(cr, openerp.SUPERUSER_ID, [('auth_token', '=', auth_token)]) res = getattr(Model, method)(cr, u_id[0], int(id), int(attachment_id)) if res: filecontent = base64.b64decode(res.get('base64')) filename = res.get('filename') content_type = mimetypes.guess_type(filename) if filecontent and filename: return request.make_response( filecontent, headers=[('Content-Type', content_type[0] or 'application/pdf'), ('Content-Disposition', content_disposition(filename).replace( "attachment;", "inline;"))] ) # open pdf files inline instead of downloading them except Exception, e: # signup error _logger.exception("OAuth2: %s" % str(e))
def get_mention_suggestions(self, search, limit=8): registry = openerp.modules.registry.RegistryManager.get( request.cr.dbname) with registry.cursor() as cr: res = registry['res.partner'].get_mention_suggestions( cr, openerp.SUPERUSER_ID, search, limit) return res
def poll(self, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None): assert_uuid(uuid) if not openerp.evented: raise Exception("Not usable in a server not running gevent") from openerp.addons.im.watcher import ImWatcher if db is not None: openerp.service.security.check(db, uid, password) else: uid = request.session.uid db = request.session.db registry = openerp.modules.registry.RegistryManager.get(db) with registry.cursor() as cr: registry.get('im.user').im_connect(cr, uid, uuid=uuid, context=request.context) my_id = registry.get('im.user').get_my_id(cr, uid, uuid, request.context) num = 0 while True: with registry.cursor() as cr: res = registry.get('im.message').get_messages( cr, uid, last, users_watch, uuid=uuid, context=request.context) if num >= 1 or len(res["res"]) > 0: return res last = res["last"] num += 1 ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER)
def poll(self, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None): assert_uuid(uuid) if not openerp.evented: raise Exception("Not usable in a server not running gevent") from openerp.addons.im.watcher import ImWatcher if db is not None: openerp.service.security.check(db, uid, password) else: uid = request.session.uid db = request.session.db registry = openerp.modules.registry.RegistryManager.get(db) with registry.cursor() as cr: registry.get('im.user').im_connect(cr, uid, uuid=uuid, context=request.context) my_id = registry.get('im.user').get_my_id(cr, uid, uuid, request.context) num = 0 while True: with registry.cursor() as cr: res = registry.get('im.message').get_messages(cr, uid, last, users_watch, uuid=uuid, context=request.context) if num >= 1 or len(res["res"]) > 0: return res last = res["last"] num += 1 ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER)
def loop(self): _logger.info("Begin watching on channel im_channel for database " + self.db_name) stop = False while not stop: try: registry = openerp.modules.registry.RegistryManager.get(self.db_name) with registry.cursor() as cr: listen_channel(cr, "im_channel", self.handle_message, self.check_stop) stop = True except: # if something crash, we wait some time then try again _logger.exception("Exception during watcher activity") time.sleep(WATCHER_ERROR_DELAY) _logger.info("End watching on channel im_channel for database " + self.db_name) del ImWatcher.watchers[self.db_name]
def check_email(self, req, db): context = {} email = req.jsonrequest.get('email') if not email: return {"status": -1} registry = RegistryManager.get(db) with registry.cursor() as cr: try: p = registry.get('res.partner') p_id = p.search(cr, openerp.SUPERUSER_ID, [('email', '=', email)]) if len(p_id) == 0: # email not found return {"status": 0} else: return {"status": 1} except Exception, e: return {"status": -1}
def module_installed_bypass_session(dbname): loadable = http.addons_manifest.keys() modules = {} try: registry = openerp.modules.registry.RegistryManager.get(dbname) with registry.cursor() as cr: m = registry.get('ir.module.module') # TODO The following code should move to ir.module.module.list_installed_modules() domain = [('state','=','installed'), ('name','in', loadable)] ids = m.search(cr, 1, [('state','=','installed'), ('name','in', loadable)]) for module in m.read(cr, 1, ids, ['name', 'dependencies_id']): modules[module['name']] = [] deps = module.get('dependencies_id') if deps: deps_read = registry.get('ir.module.module.dependency').read(cr, 1, deps, ['name']) dependencies = [i['name'] for i in deps_read] modules[module['name']] = dependencies except Exception,e: pass
def company_logo(self,dbname=None, **kw): imgname = 'logo' imgext = '.png' placeholder = functools.partial(get_resource_path, 'biznavi', 'static', 'src', 'img') uid = None if request.session.db: dbname = request.session.db uid = request.session.uid elif dbname is None: dbname = db_monodb() if not uid: uid = openerp.SUPERUSER_ID if not dbname: response = http.send_file(placeholder(imgname + imgext)) else: try: # create an empty registry registry = openerp.modules.registry.Registry(dbname) with registry.cursor() as cr: cr.execute("""SELECT c.logo_web, c.write_date FROM res_users u LEFT JOIN res_company c ON c.id = u.company_id WHERE u.id = %s """, (uid,)) row = cr.fetchone() if row and row[0]: image_base64 = str(row[0]).decode('base64') image_data = StringIO(image_base64) imgext = '.' + (imghdr.what(None, h=image_base64) or 'png') response = http.send_file(image_data, filename=imgname + imgext, mtime=row[1]) else: response = http.send_file(placeholder('nologo.png')) except Exception: response = http.send_file(placeholder(imgname + imgext)) return response
def company_logo(self, dbname=None, **kw): imgname = 'default_logo.png' placeholder = functools.partial(get_module_resource, 'web', 'static', 'src', 'img') uid = None if request.session.db: dbname = request.session.db uid = request.session.uid elif dbname is None: dbname = db_monodb() if not uid: uid = openerp.SUPERUSER_ID if not dbname: response = http.send_file(placeholder(imgname)) else: try: registry = openerp.modules.registry.Registry(dbname) with registry.cursor() as cr: cr.execute( """SELECT c.web_company_logo, c.write_date FROM res_users u LEFT JOIN res_company c ON c.id = u.company_id WHERE u.id = %s """, (uid, )) row = cr.fetchone() if row and row[0]: image_data = StringIO(str(row[0]).decode('base64')) response = http.send_file(image_data, filename=imgname, mtime=row[1]) else: response = http.send_file(placeholder('nologo.png')) except Exception: response = http.send_file(placeholder(imgname)) return response
def user_image(self, user_id, dbname=None, **kw): imgname = 'user_image.png' placeholder = functools.partial(get_module_resource, 'web', 'static', 'src', 'img') if request.session.db: dbname = request.session.db elif dbname is None: dbname = db_monodb() if not dbname: response = http.send_file(placeholder(imgname)) else: try: # create an empty registry registry = openerp.modules.registry.Registry(dbname) with registry.cursor() as cr: cr.execute( """SELECT p.image_small, p.write_date FROM res_partner p LEFT JOIN res_users u ON u.partner_id = p.id WHERE u.id = %s """, (user_id, )) row = cr.fetchone() if row and row[0]: image_data = StringIO(str(row[0]).decode('base64')) response = http.send_file(image_data, filename=imgname, mtime=row[1]) else: response = http.send_file( placeholder('placeholder.png')) except Exception: response = http.send_file(placeholder(imgname)) return response
def index(self, req, action, token): # cr, uid, suid = request.cr, request.session.uid, openerp.SUPERUSER_ID action = simplejson.loads(action) report_srv = req.session.proxy("report") context = dict(req.context) context.update(action["context"]) report_data = {} report_ids = context["active_ids"] if "report_type" in action: report_data["report_type"] = action["report_type"] if "datas" in action: if "ids" in action["datas"]: report_ids = action["datas"].pop("ids") report_data.update(action["datas"]) report_id = report_srv.report( req.session._db, req.session._uid, req.session._password, action["report_name"], report_ids, report_data, context, ) report_struct = None while True: report_struct = report_srv.report_get(req.session._db, req.session._uid, req.session._password, report_id) if report_struct["state"]: break time.sleep(self.POLLING_DELAY) report = base64.b64decode(report_struct["result"]) if report_struct.get("code") == "zlib": report = zlib.decompress(report) report_mimetype = self.TYPES_MAPPING.get(report_struct["format"], "octet-stream") file_name = action.get("name", "report") if "name" not in action: reports = req.session.model("ir.actions.report.xml") res_id = reports.search([("report_name", "=", action["report_name"])], 0, False, False, context) if len(res_id) > 0: file_name = reports.read(res_id[0], ["name"], context)["name"] else: file_name = action["report_name"] file_name = "%s.%s" % (file_name, report_struct["format"]) # Customization starts here if action["report_name"] == "Customer Invoice": registry = openerp.modules.registry.RegistryManager.get(req.session._db) with registry.cursor() as cr: inv_obj = registry.get("account.invoice") print "context.........", context, inv_obj for i in inv_obj.browse(cr, req.session._uid, context.get("active_ids")): if "Logistics" in i.company_id.name: file_name = "%s.%s" % ("Tax Invoice", report_struct["format"]) return req.make_response( report, headers=[ ("Content-Disposition", content_disposition(file_name, req)), ("Content-Type", report_mimetype), ("Content-Length", len(report)), ], cookies={"fileToken": token}, )
def company_logo(self, dbname=None, **kw): imgname = "logo.png" placeholder = functools.partial(get_module_resource, "web", "static", "src", "img") uid = None if request.session.db: dbname = request.session.db uid = request.session.uid elif dbname is None: dbname = db_monodb() if not uid: uid = openerp.SUPERUSER_ID groups_obj = request.registry.get("res.groups") groups_id = groups_obj.search(request.cr, openerp.SUPERUSER_ID, [("name", "=", "Portal")]) pid = None if groups_id: group_browse = groups_obj.browse(request.cr, openerp.SUPERUSER_ID, groups_id, context=request.context) if group_browse.users: for user in group_browse.users: if uid == user.id: pid = uid if not dbname: response = http.send_file(placeholder(imgname)) else: try: if pid: # create an empty registry registry = openerp.modules.registry.Registry(dbname) with registry.cursor() as cr: cr.execute( """SELECT c.portal_image, c.write_date FROM res_users u LEFT JOIN res_company c ON c.id = u.company_id WHERE u.id = %s """, (uid,), ) row = cr.fetchone() if row and row[0]: image_data = StringIO(str(row[0]).decode("base64")) response = http.send_file(image_data, filename=imgname, mtime=row[1]) else: response = http.send_file(placeholder("nologo.png")) else: registry = openerp.modules.registry.Registry(dbname) with registry.cursor() as cr: cr.execute( """SELECT c.logo_web, c.write_date FROM res_users u LEFT JOIN res_company c ON c.id = u.company_id WHERE u.id = %s """, (uid,), ) row = cr.fetchone() if row and row[0]: image_data = StringIO(str(row[0]).decode("base64")) response = http.send_file(image_data, filename=imgname, mtime=row[1]) else: response = http.send_file(placeholder("nologo.png")) except Exception: response = http.send_file(placeholder(imgname)) return response