Exemple #1
0
    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))
Exemple #2
0
    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))
Exemple #3
0
 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
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
 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]
Exemple #7
0
    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
Exemple #9
0
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
Exemple #10
0
	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
Exemple #11
0
    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
Exemple #12
0
    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},
        )
Exemple #14
0
    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