Example #1
0
 def create(self, **kwargs):
     cr, uid, context = request.cr, request.session.uid, request.context
     password = request.session.password
     version = release.version_info[0]
     if version==9:
         csrf_token = request.csrf_token()
     else :
         csrf_token = 'None'
     if not request.session.uid:
         return http.local_redirect('/saas/create')
     else :
         user_id = request.session.uid
         partner_id = request.registry['res.users'].read(cr, uid, user_id, ['partner_id'])['partner_id'][0]
     if len(kwargs):
         values = {'user':partner_id,
               'host_name': kwargs['domain_name'],
               'server':kwargs.get('server_select', False),
               }
         ids = request.registry['saas.user.info'].create(cr, uid, values,context=context)
         #request.registry['saas.user.info'].create_use_db(cr, uid, [ids],password,context=context)
         template = request.registry('ir.model.data').get_object(cr, SUPERUSER_ID, 'saas_admin', 'registry_saas_db_email')
         request.registry('email.template').send_mail(cr, SUPERUSER_ID, template.id, ids, force_send=True, raise_exception=True, context=context)
     users = http.request.env['saas.user.info']
     servers = http.request.env['saas.server']
     values = {
         'users': users.search([]),
         'servers': servers.search([]),
         'password':password,
         'csrf_token':csrf_token
     }
     return http.request.render('saas_website.list', values)
 def confirm_clinical(self, *args, **kw):
     task_id = kw.get('task_id')  # TODO: add a check if is None (?)
     cr, uid, context = request.cr, request.uid, request.context
     api = request.registry('nh.eobs.api')
     activity_api = request.registry('nh.activity')
     kw_copy = kw.copy() if kw else {}
     if 'taskId' in kw_copy:
         del kw_copy['taskId']
     if 'frequency' in kw_copy:
         kw_copy['frequency'] = int(kw_copy['frequency'])
     if 'location_id' in kw_copy:
         kw_copy['location_id'] = int(kw_copy['location_id'])
     # TODO: add a check if method 'complete' fails(?)
     api.complete(cr, uid, int(task_id), kw_copy)
     triggered_ids = activity_api.search(
         cr, uid, [['creator_id', '=', int(task_id)]])
     triggered_tasks_read = activity_api.read(cr, uid, triggered_ids, [])
     triggered_tasks = []
     for trig_task in triggered_tasks_read:
         access = api.check_activity_access(cr,
                                            uid,
                                            trig_task['id'],
                                            context=context)
         is_not_ob = 'ews' not in trig_task['data_model']
         if access and is_not_ob:
             triggered_tasks.append(trig_task)
     response_data = {'related_tasks': triggered_tasks, 'status': 1}
     response_json = ResponseJSON.get_json_data(
         status=ResponseJSON.STATUS_SUCCESS,
         title='Submission successful',
         description='The notification was successfully submitted',
         data=response_data)
     return request.make_response(response_json,
                                  headers=ResponseJSON.HEADER_CONTENT_TYPE)
    def process_ajax_form(self, *args, **kw):
        observation = kw.get('observation')  # TODO: add a check if is None (?)
        task_id = kw.get('task_id')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api = request.registry('nh.eobs.api')
        activity_api = request.registry('nh.activity')
        ob_str = 'nh.clinical.patient.observation.' + observation
        ob_pool = request.registry(ob_str)
        converter_pool = request.registry('ir.fields.converter')
        converter = converter_pool.for_model(cr,
                                             uid,
                                             ob_pool,
                                             str,
                                             context=context)
        kw_copy = kw.copy() if kw else {}
        data_timestamp = kw_copy.get('startTimestamp', None)
        data_task_id = kw_copy.get('taskId', None)
        data_device_id = kw_copy.get('device_id', None)

        if data_timestamp is not None:
            del kw_copy['startTimestamp']
        if data_task_id is not None:
            del kw_copy['taskId']
        if task_id is not None:
            del kw_copy['task_id']
        if observation is not None:
            del kw_copy['observation']
        if data_device_id is not None:
            del kw_copy['device_id']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        converted_data = converter(kw_copy, _logger.debug)
        if data_timestamp is not None:
            converted_data['date_started'] = \
                datetime.fromtimestamp(int(data_timestamp)).strftime(DTF)
        if data_device_id is not None:
            converted_data['device_id'] = data_device_id

        api.complete(cr, uid, int(task_id), converted_data, context)
        activity = activity_api.browse(cr, uid, int(task_id))
        obs = activity.data_ref

        description = self.get_submission_message(obs)
        response_data = obs.get_submission_response_data()

        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Successfully Submitted{0} {1}'.format(
                ' Partial' if obs.is_partial else '',
                ob_pool.get_description()),
            description=description,
            data=response_data)
        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
    def get_patient(self, patient_id, *args, **kw):
        """
        Renders the :class:`patient<base.nh_clinical_patient>` view.
        :returns: patient response object
        :rtype: :class:`http.Response<openerp.http.Response>`
        """

        try:
            patient_id = int(patient_id)
        except ValueError:
            return utils.redirect(URLS['patient_list'], 303)
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        patient_list = api_pool.get_patients(cr,
                                             uid, [patient_id],
                                             context=context)
        if not patient_list:
            return utils.redirect(URLS['patient_list'], 303)
        elif len(patient_list) > 0:
            patient = patient_list[0]
        obs = api_pool.get_active_observations(cr,
                                               uid,
                                               patient_id,
                                               context=context)
        for index, ob in enumerate(obs):
            if ob['type'] == 'ews':
                obs.insert(0, obs.pop(index))
            if ob['type'] == 'gcs':
                obs.insert(1, obs.pop(index))
            if ob['type'] == 'pain':
                obs.insert(2, obs.pop(index))

        follow_activities = api_pool.get_assigned_activities(
            cr,
            uid,
            activity_type='nh.clinical.patient.follow',
            context=context)
        obs_data_vis_list = api_pool.get_data_visualisation_resources(
            cr, uid, context=context)
        user_group_ids = request.registry('res.users').read(
            cr, uid, uid, ['groups_id'])
        user_groups = request.registry('res.groups').read(
            cr, uid, user_group_ids.get('groups_id'), ['display_name'])
        user_groups = [rec.get('display_name') for rec in user_groups]
        return request.render('nh_eobs_mobile.patient',
                              qcontext={
                                  'patient': patient,
                                  'urls': URLS,
                                  'section': 'patient',
                                  'obs_list': obs,
                                  'notification_count': len(follow_activities),
                                  'username': request.session['login'],
                                  'data_vis_list': obs_data_vis_list,
                                  'user_groups': user_groups
                              })
Example #5
0
    def get_patient(self, patient_id, *args, **kw):
        """
        Renders the :class:`patient<base.nh_clinical_patient>` view.
        :returns: patient response object
        :rtype: :class:`http.Response<openerp.http.Response>`
        """

        try:
            patient_id = int(patient_id)
        except ValueError:
            return utils.redirect(URLS['patient_list'], 303)
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        patient_list = api_pool.get_patients(
            cr, uid, [patient_id], context=context)
        if not patient_list:
            return utils.redirect(URLS['patient_list'], 303)
        elif len(patient_list) > 0:
            patient = patient_list[0]
        obs = api_pool.get_active_observations(
            cr, uid, patient_id, context=context)
        for index, ob in enumerate(obs):
            if ob['type'] == 'ews':
                obs.insert(0, obs.pop(index))
            if ob['type'] == 'gcs':
                obs.insert(1, obs.pop(index))
            if ob['type'] == 'pain':
                obs.insert(2, obs.pop(index))

        follow_activities = api_pool.get_assigned_activities(
            cr, uid,
            activity_type='nh.clinical.patient.follow',
            context=context)
        obs_data_vis_list = api_pool.get_data_visualisation_resources(
            cr, uid, context=context)
        user_group_ids = request.registry('res.users').read(
            cr, uid, uid, ['groups_id'])
        user_groups = request.registry('res.groups').read(
            cr, uid, user_group_ids.get('groups_id'), ['display_name']
        )
        user_groups = [rec.get('display_name') for rec in user_groups]
        return request.render(
            'nh_eobs_mobile.patient',
            qcontext={
                'patient': patient,
                'urls': URLS,
                'section': 'patient',
                'obs_list': obs,
                'notification_count': len(follow_activities),
                'username': request.session['login'],
                'data_vis_list': obs_data_vis_list,
                'user_groups': user_groups
            }
        )
Example #6
0
    def process_ajax_form(self, *args, **kw):
        observation = kw.get('observation')  # TODO: add a check if is None (?)
        task_id = kw.get('task_id')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api = request.registry('nh.eobs.api')
        activity_api = request.registry('nh.activity')
        ob_str = 'nh.clinical.patient.observation.'+observation
        ob_pool = request.registry(ob_str)
        converter_pool = request.registry('ir.fields.converter')
        converter = converter_pool.for_model(cr, uid, ob_pool, str,
                                             context=context)
        kw_copy = kw.copy() if kw else {}
        data_timestamp = kw_copy.get('startTimestamp', None)
        data_task_id = kw_copy.get('taskId', None)
        data_device_id = kw_copy.get('device_id', None)

        if data_timestamp is not None:
            del kw_copy['startTimestamp']
        if data_task_id is not None:
            del kw_copy['taskId']
        if task_id is not None:
            del kw_copy['task_id']
        if observation is not None:
            del kw_copy['observation']
        if data_device_id is not None:
            del kw_copy['device_id']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        converted_data = converter(kw_copy, _logger.debug)
        if data_timestamp is not None:
            converted_data['date_started'] = \
                datetime.fromtimestamp(int(data_timestamp)).strftime(DTF)
        if data_device_id is not None:
            converted_data['device_id'] = data_device_id

        api.complete(cr, uid, int(task_id), converted_data, context)
        activity = activity_api.browse(cr, uid, int(task_id))
        obs = activity.data_ref

        description = self.get_submission_message(obs)
        response_data = obs.get_submission_response_data()

        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Successfully Submitted{0} {1}'.format(
                ' Partial' if obs.is_partial else '',
                ob_pool.get_description(append_observation=True)),
            description=description,
            data=response_data)
        return request.make_response(
            response_json, headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #7
0
    def group_user_detail_query(self, **kw):
        res = utils.init_response_data()
        res["data"] = []
        try:
            group_id = int(kw.get('group_id', 0))
            if not group_id:
                res["code"] = status.Status.PARMAS_ERROR
                return res

            response = Rong.rongyun_group_user_query(group_id=group_id)
            if response.has_key("data"):
                user_data = response["data"]["users"]
                for user in user_data:
                    user_id = user["id"]
                    res_users = request.registry("res.users")
                    user_obj = res_users.search_read(
                        request.cr, request.uid, [["user_id", "=", user_id]])
                    if len(user_obj):
                        user_obj = user_obj[0]
                        del user_obj["password"]
                        del user_obj["image_medium"]
                        del user_obj["image"]
                        del user_obj["image_small"]
                        res["data"].append(user_obj)
                    else:
                        continue
            else:
                res["code"] = status.Status.DHuiRongyunServerError
                return res
        except Exception, e:
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
Example #8
0
    def group_user_detail_query(self,**kw):
        res = utils.init_response_data()
        res["data"] = []
        try:
            group_id = int(kw.get('group_id',0))
            if not group_id :
                res["code"] = status.Status.PARMAS_ERROR
                return res

            response = Rong.rongyun_group_user_query(group_id=group_id)
            if response.has_key("data"):
                user_data = response["data"]["users"]
                for user in user_data:
                    user_id = user["id"]
                    res_users = request.registry("res.users")
                    user_obj = res_users.search_read(request.cr,request.uid,[["user_id","=",user_id]])
                    if len(user_obj) :
                        user_obj = user_obj[0]
                        del user_obj["password"]
                        del user_obj["image_medium"]
                        del user_obj["image"]
                        del user_obj["image_small"]
                        res["data"].append(user_obj)
                    else :
                        continue
            else :
                res["code"] = status.Status.DHuiRongyunServerError
                return res
        except Exception, e:
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
 def get_patient_barcode(self, *args, **kw):
     # TODO: add a check if is None (?)
     hospital_number = kw.get('hospital_number')
     cr, uid, context = request.cr, request.uid, request.context
     api_pool = request.registry('nh.eobs.api')
     try:
         patient_info = api_pool.get_patient_info(cr,
                                                  uid,
                                                  hospital_number,
                                                  context=context)
         if len(patient_info) > 0:
             response_json = ResponseJSON.get_json_data(
                 status=ResponseJSON.STATUS_SUCCESS,
                 title=patient_info[0]['full_name'],
                 description='Information on {0}'.format(
                     patient_info[0]['full_name']),
                 data=patient_info[0])
         else:
             response_data = {'error': 'Patient not found.'}
             response_json = ResponseJSON.get_json_data(
                 status=ResponseJSON.STATUS_ERROR,
                 title='Patient not found',
                 description='Unable to get patient with ID provided',
                 data=response_data)
     except osv.except_osv:
         response_data = {'error': 'Patient not found.'}
         response_json = ResponseJSON.get_json_data(
             status=ResponseJSON.STATUS_ERROR,
             title='Patient not found',
             description='Unable to get patient with ID provided',
             data=response_data)
     return request.make_response(response_json,
                                  headers=ResponseJSON.HEADER_CONTENT_TYPE)
    def get_patient_obs(self, *args, **kw):
        patient_id = kw.get('patient_id')  # TODO: add a check if is None (?)
        obs_type = kw.get('obs_type')
        cr, uid = request.cr, request.uid
        api_pool = request.registry('nh.eobs.api')
        patient_list = api_pool.get_patients(cr, uid, [int(patient_id)])
        if len(patient_list) > 0:
            patient = patient_list[0]
            observations = api_pool.get_activities_for_patient(
                cr, uid, patient_id=int(patient_id), activity_type=obs_type)
            observations.reverse()
            response_data = {'obs': observations, 'obsType': obs_type}
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_SUCCESS,
                title='{0}'.format(patient['full_name']),
                description='Observations for {0}'.format(
                    patient['full_name']),
                data=response_data)
        else:
            response_data = {'error': 'Data not found.'}
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_ERROR,
                title='Data not found',
                description='Unable to find data with ID and ob name provided',
                data=response_data)

        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #11
0
 def get_patient_info(self, *args, **kw):
     patient_id = kw.get('patient_id')  # TODO: add a check if is None (?)
     cr, uid, context = request.cr, request.uid, request.context
     api_pool = request.registry('nh.eobs.api')
     patient_info = api_pool.get_patients(cr, uid,
                                          [int(patient_id)],
                                          context=context)
     if len(patient_info) > 0:
         response_json = ResponseJSON.get_json_data(
             status=ResponseJSON.STATUS_SUCCESS,
             title=patient_info[0]['full_name'],
             description='Information on {0}'.format(
                 patient_info[0]['full_name']
             ),
             data=patient_info[0]
         )
         return request.make_response(
             response_json,
             headers=ResponseJSON.HEADER_CONTENT_TYPE
         )
     else:
         response_data = {'error': 'Patient not found.'}
         response_json = ResponseJSON.get_json_data(
             status=ResponseJSON.STATUS_ERROR,
             title='Patient not found',
             description='Unable to get patient with ID provided',
             data=response_data
         )
         return request.make_response(
             response_json,
             headers=ResponseJSON.HEADER_CONTENT_TYPE
         )
Example #12
0
    def get_task_form(self, cr, uid, task, patient, request, context=None):
        """
        Get the form for a task

        :param task: task object
        :return: tuple of form and form inputs
        """
        api_reg = request.registry('nh.eobs.api')
        form_desc, form = self.process_form_fields(
            api_reg.get_form_description(
                cr, uid,
                patient.get('id'),
                task.get('data_model'),
                context=context
            )
        )
        form['action'] = \
            URLS['task_form_action'] + '{0}'.format(task.get('id'))
        form['type'] = task['data_model']
        form['task-id'] = task.get('id')
        form['patient-id'] = \
            int(patient['id']) if patient and patient.get('id') else False
        form['source'] = "task"
        form['start'] = datetime.now().strftime('%s')
        return form, form_desc
Example #13
0
    def user_group(self, **kw):
        res = utils.init_response_data()
        res["data"] = []
        try:
            user_id = kw.get("user_id", None)
            if not user_id:
                res["code"] = status.Status.PARMAS_ERROR
                return res
            res_users = request.registry("res.users")
            user = res_users.search_read(request.cr, request.uid,
                                         [["user_id", "=", user_id]])
            if not len(user):
                user = user[0]
                res["code"] = status.Status.NOT_EXIST
                return res
            else:
                user = user[0]
            request.cr.execute(
                "select task_id from project_task_rel where uid=%s" %
                (user["id"]))
            row_list = request.cr.fetchall()
            project_task = request.registry("project.task")
            task_id_list = []
            for row in row_list:
                task_id = row[0]
                task_id_list.append(task_id)

            task_list = project_task.read(request.cr, request.uid,
                                          task_id_list)
            for task in task_list:
                res["data"].append(
                    dict(
                        id=task["id"],
                        create_uid=task["create_uid"],
                        create_date=task["create_date"],
                        user_id=task["user_id"],
                        parent=task["project_id"],
                        description=task["description"],
                        name=task["name"],
                        group_type=task["group_type"],
                        members=task["members"],
                    ))

        except Exception, e:
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
Example #14
0
 def populate_values(self):
     values = []
     cr, context = request.cr, request.context
     vehicle_ids = request.registry['fleet.vehicle'].search(cr, SUPERUSER_ID,[])
     driver_ids = request.registry('res.partner').search(cr,SUPERUSER_ID,[('is_driver','=',True)])
     driver_info =  request.registry('res.partner').read(cr,SUPERUSER_ID,driver_ids,['name','operator'])
     # sorting drivers based on operators
     operator_driver = {}
     for i in driver_info:
         if i.get('operator',False):
             if i.get('operator',False)[0] in operator_driver.keys():
                 operator_driver[i['operator'][0]].append({
                                                        'id':i['id'],
                                                        'name':i['name']
                                                        })
             else:
                 operator_driver.update({
                                         i.get('operator',False)[0]:[{
                                                                  'id':i['id'],
                                                                  'name':i['name']
                                                                  }]
                                         })
     for vehicle in request.registry('fleet.vehicle').browse(cr,SUPERUSER_ID,vehicle_ids,context):
         if vehicle.operator and vehicle.operator.id in operator_driver.keys():
             # looking for drivers for the operator in the driver_info
             values.append(
                           {
                                        'name':vehicle.name,
                                        'id':vehicle.id,
                                        'current_driver':vehicle.driver_id.id,
                                        'driver_ids':operator_driver[vehicle.operator.id]
                                        }
                            )
         else:
             values.append(
                            {
                                        'name':vehicle.name,
                                        'id':vehicle.id,
                                        'current_driver':vehicle.driver_id.id,
                                        'driver_ids':driver_info
                                        }
                            ) 
     return values       
Example #15
0
    def user_group(self,**kw):
        res = utils.init_response_data()
        res["data"] = []
        try:
            user_id = kw.get("user_id",None)
            if not user_id :
                res["code"] = status.Status.PARMAS_ERROR
                return res
            res_users = request.registry("res.users")
            user = res_users.search_read(request.cr,request.uid,[["user_id","=",user_id]])
            if not len(user) :
                user = user[0]
                res["code"] = status.Status.NOT_EXIST
                return res
            else :
                user = user[0]
            request.cr.execute("select task_id from project_task_rel where uid=%s"%(user["id"]))
            row_list = request.cr.fetchall()
            project_task = request.registry("project.task")
            task_id_list = []
            for row in row_list:
                task_id = row[0]
                task_id_list.append(task_id)

            task_list = project_task.read(request.cr,request.uid,task_id_list)
            for task in task_list:
                res["data"].append(dict(
                    id = task["id"],
                    create_uid = task["create_uid"],
                    create_date = task["create_date"],
                    user_id = task["user_id"],
                    parent = task["project_id"],
                    description = task["description"],
                    name = task["name"],
                    group_type = task["group_type"],
                    members =task["members"],
                ))
            
        except Exception,e:
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
Example #16
0
 def process_form(self, task_id, *args, **kw):
     cr, uid, context = request.cr, request.uid, request.context
     activity_api = request.registry('nh.activity')
     kw_copy = kw.copy()
     del kw_copy['taskId']
     kw_copy['date_started'] = datetime.fromtimestamp(
         int(kw_copy['startTimestamp'])).strftime(DTF)
     del kw_copy['startTimestamp']
     activity_api.submit(cr, uid, int(task_id), kw_copy, context)
     activity_api.complete(cr, uid, int(task_id), context)
     return utils.redirect(URLS['task_list'])
Example #17
0
 def purchase_order_line_confirm(self, line_id, **data):
     cr, uid, context = request.cr, request.uid, request.context
     pol = request.registry('purchase.order.line')
     res = {'result': False}
     try:
         pol.update_line(cr, uid, line_id, data, context=context)
         res['result'] = True
     except ValueError as e:
         res['result'] = False
         res['message'] = e.message
     return res
Example #18
0
 def process_form(self, task_id, *args, **kw):
     cr, uid, context = request.cr, request.uid, request.context
     activity_api = request.registry('nh.activity')
     kw_copy = kw.copy()
     del kw_copy['taskId']
     kw_copy['date_started'] = datetime.fromtimestamp(
         int(kw_copy['startTimestamp'])).strftime(DTF)
     del kw_copy['startTimestamp']
     activity_api.submit(cr, uid, int(task_id), kw_copy, context)
     activity_api.complete(cr, uid, int(task_id), context)
     return utils.redirect(URLS['task_list'])
    def cancel_reasons(self, *args, **kw):
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')

        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Reason for cancelling task?',
            description='Please state reason for cancelling task',
            data=api_pool.get_cancel_reasons(cr, uid, context=context))
        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
 def session_close(self):
     cr, uid, context = request.cr, request.uid, request.context
     is_manager = is_user = None
     pos_session = request.registry('pos.session')
     ids= pos_session.search(cr, uid, [('state','<>','closed'), ('user_id','=',uid)], context=context)
     id = ids and ids[0] or False
     is_manager = request.registry('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_manager")
     result = {'result': True,'is_manager': is_manager, 'is_user':is_user}
     if not is_manager:
         is_user = request.registry('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_user")
         result["is_user"] = is_user
     
     if id and is_user:
         pos_browse = pos_session.browse(cr, uid, id, context=context)
         pos_browse.signal_workflow('cashbox_control')
         pos_browse.signal_workflow('close')
         return result
     if id and is_manager:
         return result
     result['result'] = False
     return result
 def get_partial_reasons(self, *args, **kw):
     observation = kw.get('observation')
     obs_pool = request.registry(
         'nh.clinical.patient.observation.{0}'.format(observation))
     response_json = ResponseJSON.get_json_data(
         status=ResponseJSON.STATUS_SUCCESS,
         title='Reason for partial observation',
         description='Please state reason for submitting '
         'partial observation',
         data=obs_pool._partial_reasons)
     return request.make_response(response_json,
                                  headers=ResponseJSON.HEADER_CONTENT_TYPE)
    def cancel_reasons(self, *args, **kw):
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')

        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Why is this action not required?',
            description='Please state the reason '
            'why this action is not required',
            data=api_pool.get_cancel_reasons(cr, uid, context=context))
        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #23
0
    def cancel_clinical(self, *args, **kw):
        task_id = kw.get('task_id')  # TODO: add a check if is None (?)
        cr, uid = request.cr, request.uid
        api_pool = request.registry('nh.eobs.api')
        kw_copy = kw.copy() if kw else {}

        data_timestamp = kw_copy.get('startTimestamp', None)
        data_task_id = kw_copy.get('taskId', None)

        if data_timestamp is not None:
            del kw_copy['startTimestamp']
        if data_task_id is not None:
            del kw_copy['taskId']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        # Try to get the cancel reason and add it to the dict if successful.
        cancel_reason = kw_copy.get('reason')
        if cancel_reason:
            kw_copy['reason'] = int(cancel_reason)

        try:
            api_pool.cancel(cr, uid, int(task_id), kw_copy)
        except osv.except_osv:
            response_data = {
                'error': 'The server returned an error while trying '
                         'to cancel the task.'
            }
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_ERROR,
                title='Cancellation unsuccessful',
                description='Unable to cancel the notification',
                data=response_data
            )
            return request.make_response(
                response_json,
                headers=ResponseJSON.HEADER_CONTENT_TYPE
            )

        response_data = {'related_tasks': [], 'status': 4}
        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Cancellation successful',
            description='The notification was successfully cancelled',
            data=response_data
        )
        return request.make_response(
            response_json,
            headers=ResponseJSON.HEADER_CONTENT_TYPE
        )
Example #24
0
    def cancel_reasons(self, *args, **kw):
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')

        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Reason for cancelling task?',
            description='Please state reason for cancelling task',
            data=api_pool.get_cancel_reasons(cr, uid, context=context)
        )
        return request.make_response(
            response_json,
            headers=ResponseJSON.HEADER_CONTENT_TYPE
        )
Example #25
0
 def purchase_order_approve(self, order_id, **data):
     cr, uid, context = request.cr, request.uid, request.context
     purchase_obj = request.registry('purchase.order')
     res = {'result': False}
     try:
         purchase_obj.signal_workflow(cr,
                                      uid, [order_id],
                                      'purchase_approve',
                                      context=context)
         res['result'] = True
     except ValueError as e:
         res['result'] = False
         res['message'] = e.message
     return res
Example #26
0
 def confirm_clinical(self, *args, **kw):
     task_id = kw.get('task_id')  # TODO: add a check if is None (?)
     cr, uid, context = request.cr, request.uid, request.context
     api = request.registry('nh.eobs.api')
     activity_api = request.registry('nh.activity')
     kw_copy = kw.copy() if kw else {}
     if 'taskId' in kw_copy:
         del kw_copy['taskId']
     if 'frequency' in kw_copy:
         kw_copy['frequency'] = int(kw_copy['frequency'])
     if 'location_id' in kw_copy:
         kw_copy['location_id'] = int(kw_copy['location_id'])
     # TODO: add a check if method 'complete' fails(?)
     api.complete(cr, uid, int(task_id), kw_copy)
     triggered_ids = activity_api.search(
         cr, uid,
         [['creator_id', '=', int(task_id)]]
     )
     triggered_tasks_read = activity_api.read(cr, uid, triggered_ids, [])
     triggered_tasks = []
     for trig_task in triggered_tasks_read:
         access = api.check_activity_access(cr, uid, trig_task['id'],
                                            context=context)
         is_not_ob = 'ews' not in trig_task['data_model']
         if access and is_not_ob:
             triggered_tasks.append(trig_task)
     response_data = {'related_tasks': triggered_tasks, 'status': 1}
     response_json = ResponseJSON.get_json_data(
         status=ResponseJSON.STATUS_SUCCESS,
         title='Submission successful',
         description='The notification was successfully submitted',
         data=response_data
     )
     return request.make_response(
         response_json,
         headers=ResponseJSON.HEADER_CONTENT_TYPE
     )
Example #27
0
 def get_partial_reasons(self, *args, **kw):
     observation = kw.get('observation')
     obs_pool = request.registry(
         'nh.clinical.patient.observation.{0}'.format(observation))
     response_json = ResponseJSON.get_json_data(
         status=ResponseJSON.STATUS_SUCCESS,
         title='Reason for partial observation',
         description='Please state reason for submitting '
                     'partial observation',
         data=obs_pool._partial_reasons
     )
     return request.make_response(
         response_json,
         headers=ResponseJSON.HEADER_CONTENT_TYPE
     )
Example #28
0
 def group_quit(self, **kw):
     res = utils.init_response_data()
     try:
         project_task = request.registry("project.task")
         uid = request.uid
         group_id = int(kw.get("group_id", 0))
         if not group_id:
             res["code"] = status.Status.PARMAS_ERROR
             return res
         join_user_id_list = json.loads(kw.get("uid_list", '[]'))
         project_task.quit_group(request, uid, group_id, join_user_id_list)
     except Exception, e:
         res["code"] = status.Status.ERROR
         res["error_info"] = str(e)
         return res
Example #29
0
 def group_quit(self,**kw):
     res = utils.init_response_data()
     try :
         project_task = request.registry("project.task")
         uid = request.uid
         group_id = int(kw.get("group_id",0))
         if not group_id :
             res["code"] = status.Status.PARMAS_ERROR
             return res
         join_user_id_list = json.loads(kw.get("uid_list",'[]'))
         project_task.quit_group(request,uid,group_id,join_user_id_list)
     except Exception,e :
         res["code"] = status.Status.ERROR
         res["error_info"] = str(e)
         return res
Example #30
0
    def get_patient_obs(self, *args, **kw):
        patient_id = kw.get('patient_id')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        patient_list = api_pool.get_patients(cr, uid, [int(patient_id)])
        if len(patient_list) > 0:
            patient = patient_list[0]
            ews = api_pool.get_activities_for_patient(
                cr, uid,
                patient_id=int(patient_id),
                activity_type='ews'
            )
            for ew in ews:
                for e in ew:
                    if e in ['date_terminated', 'create_date',
                             'write_date', 'date_started']:
                        if not ew[e]:
                            continue
                        ew[e] = fields.datetime.context_timestamp(
                            cr, uid, datetime.strptime(ew[e], DTF),
                            context=context
                        ).strftime(DTF)

            response_data = {
                'obs': ews,
                'obsType': 'ews'
            }
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_SUCCESS,
                title='{0}'.format(patient['full_name']),
                description='Observations for {0}'.format(
                    patient['full_name']
                ),
                data=response_data
            )
        else:
            response_data = {'error': 'Patient not found.'}
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_ERROR,
                title='Patient not found',
                description='Unable to find patient with ID provided',
                data=response_data
            )

        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
    def cancel_clinical(self, *args, **kw):
        task_id = kw.get('task_id')  # TODO: add a check if is None (?)
        cr, uid = request.cr, request.uid
        api_pool = request.registry('nh.eobs.api')
        kw_copy = kw.copy() if kw else {}

        data_timestamp = kw_copy.get('startTimestamp', None)
        data_task_id = kw_copy.get('taskId', None)

        if data_timestamp is not None:
            del kw_copy['startTimestamp']
        if data_task_id is not None:
            del kw_copy['taskId']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        # Try to get the cancel reason and add it to the dict if successful.
        cancel_reason = kw_copy.get('reason')
        if cancel_reason:
            kw_copy['reason'] = int(cancel_reason)

        try:
            api_pool.cancel(cr, uid, int(task_id), kw_copy)
        except osv.except_osv:
            response_data = {
                'error':
                'The server returned an error while trying '
                'to cancel the task.'
            }
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_ERROR,
                title='Cancellation unsuccessful',
                description='Unable to cancel the notification',
                data=response_data)
            return request.make_response(
                response_json, headers=ResponseJSON.HEADER_CONTENT_TYPE)

        response_data = {'related_tasks': [], 'status': 4}
        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Cancellation successful',
            description='The notification was successfully cancelled',
            data=response_data)
        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #32
0
    def rapid_tranq(self, *args, **kwargs):
        """
        Endpoint for reading and writing the `rapid_tranq` field on a patient's
        spell.

        Let's the API model create the JSON encoded response and simply wraps
        it in a response object to be returned to the client.

        :param args:
        :param kwargs:
        :return:
        """
        api_model = request.registry('nh.eobs.api')
        response = api_model.set_rapid_tranq(request.cr, request.uid, request,
                                             **kwargs)
        return request.make_response(response,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #33
0
    def rapid_tranq(self, *args, **kwargs):
        """
        Endpoint for reading and writing the `rapid_tranq` field on a patient's
        spell.

        Let's the API model create the JSON encoded response and simply wraps
        it in a response object to be returned to the client.

        :param args:
        :param kwargs:
        :return:
        """
        api_model = request.registry('nh.eobs.api')
        response = api_model.set_rapid_tranq(request.cr, request.uid, request,
                                             **kwargs)
        return request.make_response(response,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
    def get_patient_obs(self, *args, **kw):
        patient_id = kw.get('patient_id')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        patient_list = api_pool.get_patients(cr, uid, [int(patient_id)])
        if len(patient_list) > 0:
            patient = patient_list[0]
            ews = api_pool.get_activities_for_patient(
                cr, uid, patient_id=int(patient_id), activity_type='ews')
            for ew in ews:
                for e in ew:
                    if e in [
                            'date_terminated', 'create_date', 'write_date',
                            'date_started'
                    ]:
                        if not ew[e]:
                            continue
                        ew[e] = fields.datetime.context_timestamp(
                            cr,
                            uid,
                            datetime.strptime(ew[e], DTF),
                            context=context).strftime(DTF)

            response_data = {'obs': ews, 'obsType': 'ews'}
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_SUCCESS,
                title='{0}'.format(patient['full_name']),
                description='Observations for {0}'.format(
                    patient['full_name']),
                data=response_data)
        else:
            response_data = {'error': 'Patient not found.'}
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_ERROR,
                title='Patient not found',
                description='Unable to find patient with ID provided',
                data=response_data)

        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #35
0
    def get_task_form(self, cr, uid, task, patient, request, context=None):
        """
        Get the form for a task

        :param task: task object
        :return: tuple of form and form inputs
        """
        activity_model = request.registry('nh.activity')
        activity_record = activity_model.browse(cr, uid, task.get('id'))
        form_desc, form = self.process_form_fields(
            activity_record.data_ref.get_form_description(patient.get('id')))
        form['action'] = \
            URLS['task_form_action'] + '{0}'.format(task.get('id'))
        # Add data model changing bit here
        model_name = task['data_model']
        form['type'] = model_name[(model_name.rindex('.') + 1):]
        form['task-id'] = task.get('id')
        form['patient-id'] = \
            int(patient['id']) if patient and patient.get('id') else False
        form['source'] = "task"
        form['start'] = datetime.now().strftime('%s')
        return form, form_desc
Example #36
0
    def get_task_form(self, cr, uid, task, patient, request, context=None):
        """
        Get the form for a task

        :param task: task object
        :return: tuple of form and form inputs
        """
        api_reg = request.registry('nh.eobs.api')
        form_desc, form = self.process_form_fields(
            api_reg.get_form_description(cr,
                                         uid,
                                         patient.get('id'),
                                         task.get('data_model'),
                                         context=context))
        form['action'] = \
            URLS['task_form_action'] + '{0}'.format(task.get('id'))
        form['type'] = task['data_model']
        form['task-id'] = task.get('id')
        form['patient-id'] = \
            int(patient['id']) if patient and patient.get('id') else False
        form['source'] = "task"
        form['start'] = datetime.now().strftime('%s')
        return form, form_desc
Example #37
0
    def get_task_form(self, cr, uid, task, patient, request, context=None):
        """
        Get the form for a task

        :param task: task object
        :return: tuple of form and form inputs
        """
        activity_model = request.registry('nh.activity')
        activity_record = activity_model.browse(cr, uid, task.get('id'))
        form_desc, form = self.process_form_fields(
            activity_record.data_ref.get_form_description(patient.get('id'))
        )
        form['action'] = \
            URLS['task_form_action'] + '{0}'.format(task.get('id'))
        # Add data model changing bit here
        model_name = task['data_model']
        form['type'] = model_name[(model_name.rindex('.') + 1):]
        form['task-id'] = task.get('id')
        form['patient-id'] = \
            int(patient['id']) if patient and patient.get('id') else False
        form['source'] = "task"
        form['start'] = datetime.now().strftime('%s')
        return form, form_desc
Example #38
0
    def get_patient_obs(self, *args, **kw):
        patient_id = kw.get('patient_id')  # TODO: add a check if is None (?)
        obs_type = kw.get('obs_type')
        cr, uid = request.cr, request.uid
        api_pool = request.registry('nh.eobs.api')
        patient_list = api_pool.get_patients(cr, uid, [int(patient_id)])
        if len(patient_list) > 0:
            patient = patient_list[0]
            observations = api_pool.get_activities_for_patient(
                cr, uid,
                patient_id=int(patient_id),
                activity_type=obs_type
            )
            observations.reverse()
            response_data = {
                'obs': observations,
                'obsType': obs_type
            }
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_SUCCESS,
                title='{0}'.format(patient['full_name']),
                description='Observations for {0}'.format(
                    patient['full_name']
                ),
                data=response_data
            )
        else:
            response_data = {'error': 'Data not found.'}
            response_json = ResponseJSON.get_json_data(
                status=ResponseJSON.STATUS_ERROR,
                title='Data not found',
                description='Unable to find data with ID and ob name provided',
                data=response_data
            )

        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
    def process_patient_observation_form(self, *args, **kw):
        # TODO: add a check if is None (?)
        obs_model_name = kw.get('observation')
        # TODO: add a check if is None (?)
        patient_id = kw.get('patient_id')
        cr, uid, context = request.cr, request.uid, request.context
        api = request.registry('nh.eobs.api')
        activity_api = request.registry('nh.activity')
        obs_str = 'nh.clinical.patient.observation.' + obs_model_name
        observation_pool = request.registry(obs_str)
        converter_pool = request.registry('ir.fields.converter')
        converter = converter_pool.for_model(cr,
                                             uid,
                                             observation_pool,
                                             str,
                                             context=context)
        kw_copy = kw.copy() if kw else {}
        data_timestamp = kw_copy.get('startTimestamp', False)
        data_task_id = kw_copy.get('taskId', False)
        data_device_id = kw_copy.get('device_id', False)
        data_recorded_concerns = kw_copy.get('recorded_concerns', False)
        data_dietary_needs = kw_copy.get('dietary_needs', False)

        if data_timestamp:
            del kw_copy['startTimestamp']
        if data_task_id:
            del kw_copy['taskId']
        if obs_model_name is not None:
            del kw_copy['observation']
        if patient_id is not None:
            del kw_copy['patient_id']
        if data_device_id:
            del kw_copy['device_id']
        if data_recorded_concerns:
            del kw_copy['recorded_concerns']
        if data_dietary_needs:
            del kw_copy['dietary_needs']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        converted_data = converter(kw_copy, _logger.debug)
        if data_timestamp:
            converted_data['date_started'] = datetime.fromtimestamp(
                int(data_timestamp)).strftime(DTF)
        if data_device_id:
            converted_data['device_id'] = data_device_id
        if data_recorded_concerns:
            converted_data['recorded_concerns'] = \
                [[6, 0, map(int, data_recorded_concerns.split(','))]]
        if data_dietary_needs:
            converted_data['dietary_needs'] = \
                [[6, 0, map(int, data_dietary_needs.split(','))]]

        vals_data = {}
        if obs_model_name == 'neurological':
            if 'eyes' in converted_data:
                vals_data['eyes'] = converted_data['eyes']
            if 'verbal' in converted_data:
                vals_data['verbal'] = converted_data['verbal']
            if 'motor' in converted_data:
                vals_data['motor'] = converted_data['motor']
        # elif obs_model_name == 'food_fluid':
        #     if 'passed_urine' in converted_data:
        #         vals_data['passed_urine'] = converted_data['passed_urine']
        #     if 'bowels_open' in converted_data:
        #         vals_data['bowels_open'] = converted_data['bowels_open']
        else:
            vals_data = converted_data

        new_activity_id = api.create_activity_for_patient(cr,
                                                          uid,
                                                          int(patient_id),
                                                          obs_model_name,
                                                          vals_data=vals_data,
                                                          context=context)
        api.complete(cr, uid, int(new_activity_id), converted_data, context)
        new_activity = activity_api.browse(cr, uid, new_activity_id)
        obs = new_activity.data_ref

        description = self.get_submission_message(obs)
        response_data = obs.get_submission_response_data()

        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Successfully Submitted{0} {1}'.format(
                ' Partial' if obs.is_partial else '',
                observation_pool.get_description()),
            description=description,
            data=response_data)
        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #40
0
    def take_patient_observation(self, observation, patient_id, *args, **kw):
        """
        Renders the
        :class:`observation<observations.nh_clinical_patient_observation>`
        entry view.
        :returns: observations entry response object
        :rtype: :class:`http.Response<openerp.http.Response>`
        """
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        follow_activities = api_pool.get_assigned_activities(
            cr,
            uid,
            activity_type='nh.clinical.patient.follow',
            context=context)

        patient = dict()
        patient_info = api_pool.get_patients(cr,
                                             uid, [int(patient_id)],
                                             context=context)
        if not patient_info:
            exceptions.abort(404)
        elif len(patient_info) > 0:
            patient_info = patient_info[0]
        patient['url'] = URLS['single_patient'] + '{0}'.format(
            patient_info['id'])
        patient['name'] = patient_info['full_name']
        patient['id'] = patient_info['id']
        ob_model_name = \
            'nh.clinical.patient.observation.{0}'.format(observation)

        form_desc, form = self.process_form_fields(
            api_pool.get_form_description(cr,
                                          uid,
                                          int(patient_id),
                                          ob_model_name,
                                          context=context))
        ob_rec = request.registry(ob_model_name)
        view_desc = ob_rec.new(cr, uid).get_view_description(form_desc)
        form['action'] = URLS['patient_form_action'] + '{0}/{1}'.format(
            observation, patient_id)
        form['type'] = observation
        form['task-id'] = False
        form['patient-id'] = int(patient_id)
        form['source'] = "patient"
        form['start'] = datetime.now().strftime('%s')
        observation_name_list = []
        for ob in api_pool.get_active_observations(cr, uid, patient_id):
            if ob['type'] == observation:
                observation_name_list.append(ob['name'])
        if len(observation_name_list) == 0:
            exceptions.abort(404)
        return request.render('nh_eobs_mobile.data_input_screen',
                              qcontext={
                                  'view_description': view_desc,
                                  'name': observation_name_list[0],
                                  'patient': patient,
                                  'form': form,
                                  'section': 'patient',
                                  'notification_count': len(follow_activities),
                                  'username': request.session['login'],
                                  'urls': URLS,
                                  'task_valid': True
                              })
Example #41
0
    def take_patient_observation(self, observation, patient_id, *args, **kw):
        """
        Renders the
        :class:`observation<observations.nh_clinical_patient_observation>`
        entry view.
        :returns: observations entry response object
        :rtype: :class:`http.Response<openerp.http.Response>`
        """
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        follow_activities = api_pool.get_assigned_activities(
            cr, uid,
            activity_type='nh.clinical.patient.follow',
            context=context)

        patient = dict()
        patient_info = api_pool.get_patients(
            cr, uid, [int(patient_id)], context=context)
        if not patient_info:
                exceptions.abort(404)
        elif len(patient_info) > 0:
            patient_info = patient_info[0]
        patient['url'] = URLS['single_patient'] + '{0}'.format(
            patient_info['id'])
        patient['name'] = patient_info['full_name']
        patient['id'] = patient_info['id']

        form = dict()
        form['action'] = URLS['patient_form_action']+'{0}/{1}'.format(
            observation, patient_id)
        form['type'] = observation
        form['task-id'] = False
        form['patient-id'] = int(patient_id)
        form['source'] = "patient"
        form['start'] = datetime.now().strftime('%s')
        form['obs_needs_score'] = False

        form_desc = api_pool.get_form_description(
            cr, uid, int(patient_id),
            'nh.clinical.patient.observation.{0}'.format(observation),
            context=context)

        for form_input in form_desc:
            if form_input['type'] in ['float', 'integer']:
                input_type = form_input['type']
                form_input['step'] = 0.1 if input_type is 'float' else 1
                form_input['type'] = 'number'
                form_input['number'] = True
                form_input['info'] = ''
                form_input['errors'] = ''
                form_input['min'] = str(form_input['min'])
            elif form_input['type'] == 'selection':
                form_input['selection_options'] = []
                form_input['info'] = ''
                form_input['errors'] = ''
                for option in form_input['selection']:
                    opt = dict()
                    opt['value'] = '{0}'.format(option[0])
                    opt['label'] = option[1]
                    form_input['selection_options'].append(opt)
            elif form_input['type'] == 'meta':
                obs_score = form_input['score']
                score_present = 'score' in form_input
                form['obs_needs_score'] = obs_score if score_present else False
        observation_name_list = []
        for ob in api_pool._active_observations:
            if ob['type'] == observation:
                observation_name_list.append(ob['name'])
        if len(observation_name_list) == 0:
            exceptions.abort(404)
        return request.render(
            'nh_eobs_mobile.observation_entry',
            qcontext={
                'inputs': form_desc,
                'name': observation_name_list[0],
                'patient': patient,
                'form': form,
                'section': 'patient',
                'notification_count': len(follow_activities),
                'username': request.session['login'],
                'urls': URLS
            }
        )
    def web_login(self, redirect=None, **kw):
        ensure_db()
        if request.httprequest.method == 'GET' and redirect and request.session.uid:
            return http.redirect_with_hash(redirect)

        if not request.uid:
            request.uid = openerp.SUPERUSER_ID

        values = request.params.copy()
        if not redirect:
            redirect = '/web?' + request.httprequest.query_string
        values['redirect'] = redirect

        try:
            values['databases'] = http.db_list()
        except openerp.exceptions.AccessDenied:
            values['databases'] = None

        if request.httprequest.method == 'POST':
            old_uid = request.uid
            uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password'])
            cr, context = request.cr, request.context
            pos_session = request.registry('pos.session')
            def check_contraints(config_id):
                check, value = False,None
                domain = [
                          ('state', '!=', 'closed'),
                          ('config_id', '=', config_id)
                ]
                if pos_session.search_count(cr, uid, domain, context=context)>0:
                    check, value = True, "You cannot create two active sessions related to the same point of sale. Contact Administrator!"
                domain = [
                    ('state', 'not in', ('closed','closing_control')),
                    ('user_id', '=', uid)
                ]
                if pos_session.search_count(cr, uid, domain, context=context)>0:
                    check, value = True, "You cannot create two active sessions with the same responsible. Contact Administrator!"
                return check, value
            
            if uid is not False:
                user = request.registry['res.users'].browse(cr, uid, uid, context)
                is_manager = request.registry('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_manager")
                if not is_manager:
                    is_user = request.registry('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_user")
                    if is_user:
                        current_user = request.registry('res.users').browse(cr, uid, uid, context= context)
                        pos_config_id = current_user.pos_config and current_user.pos_config.id or False
                        if not pos_config_id:
                            r = request.registry('pos.config').search(cr, uid, [], context=context)
                            pos_config_id = r and r[0] or False
                        check, error = check_contraints(pos_config_id)
                        if check:
                            values['error'] = error
                            return request.render('web.login', values)
                        session_id = pos_session.create(cr, uid, {'user_id' : uid,'config_id' : pos_config_id}, context=context)
                        if pos_session.browse(cr, uid, session_id, context=context).state == 'opened':
                            redirect = redirect.replace("/web","/pos/web")
                else:
                    #To do code for manager
                    pass
                return http.redirect_with_hash(redirect)
            request.uid = old_uid
            values['error'] = "Wrong login/password"
        return request.render('web.login', values)
    def process_patient_observation_form(self, *args, **kw):
        observation = kw.get('observation')  # TODO: add a check if is None (?)
        patient_id = kw.get('patient_id')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api = request.registry('nh.eobs.api')
        activity_api = request.registry('nh.activity')
        obs_str = 'nh.clinical.patient.observation.' + observation
        observation_pool = request.registry(obs_str)
        converter_pool = request.registry('ir.fields.converter')
        converter = converter_pool.for_model(cr,
                                             uid,
                                             observation_pool,
                                             str,
                                             context=context)
        kw_copy = kw.copy() if kw else {}
        test = {}
        data_timestamp = kw_copy.get('startTimestamp', False)
        data_task_id = kw_copy.get('taskId', False)
        data_device_id = kw_copy.get('device_id', False)

        if data_timestamp:
            del kw_copy['startTimestamp']
        if data_task_id:
            del kw_copy['taskId']
        if observation is not None:
            del kw_copy['observation']
        if patient_id is not None:
            del kw_copy['patient_id']
        if data_device_id:
            del kw_copy['device_id']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        converted_data = converter(kw_copy, test)
        if data_timestamp:
            converted_data['date_started'] = datetime.fromtimestamp(
                int(data_timestamp)).strftime(DTF)
        if data_device_id:
            converted_data['device_id'] = data_device_id

        new_activity = api.create_activity_for_patient(cr,
                                                       uid,
                                                       int(patient_id),
                                                       observation,
                                                       context=context)
        api.complete(cr, uid, int(new_activity), converted_data, context)
        triggered_ids = activity_api.search(
            cr, uid, [['creator_id', '=', int(new_activity)]])
        triggered_tasks_read = activity_api.read(cr, uid, triggered_ids, [])
        triggered_tasks = []
        for trig_task in triggered_tasks_read:
            access = api.check_activity_access(cr, uid, trig_task['id'])
            is_not_ob = observation not in trig_task['data_model']
            is_open = trig_task['state'] not in ['completed', 'cancelled']
            if access and is_open and is_not_ob:
                triggered_tasks.append(trig_task)
        partial = 'partial_reason' in kw_copy and kw_copy['partial_reason']
        response_data = {'related_tasks': triggered_tasks, 'status': 1}
        rel_tasks = 'Here are related tasks based on the observation' if len(
            triggered_tasks) > 0 else ''
        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Successfully Submitted{0} {1}'.format(
                ' Partial' if partial else '', observation_pool._description),
            description=rel_tasks,
            data=response_data)
        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #44
0
    def process_patient_observation_form(self, *args, **kw):
        # TODO: add a check if is None (?)
        obs_model_name = kw.get('observation')
        # TODO: add a check if is None (?)
        patient_id = kw.get('patient_id')
        cr, uid, context = request.cr, request.uid, request.context
        api = request.registry('nh.eobs.api')
        activity_api = request.registry('nh.activity')
        obs_str = 'nh.clinical.patient.observation.'+obs_model_name
        observation_pool = request.registry(obs_str)
        converter_pool = request.registry('ir.fields.converter')
        converter = converter_pool.for_model(cr, uid, observation_pool,
                                             str, context=context)
        kw_copy = kw.copy() if kw else {}
        data_timestamp = kw_copy.get('startTimestamp', False)
        data_task_id = kw_copy.get('taskId', False)
        data_device_id = kw_copy.get('device_id', False)

        if data_timestamp:
            del kw_copy['startTimestamp']
        if data_task_id:
            del kw_copy['taskId']
        if obs_model_name is not None:
            del kw_copy['observation']
        if patient_id is not None:
            del kw_copy['patient_id']
        if data_device_id:
            del kw_copy['device_id']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        converted_data = converter(kw_copy, _logger.debug)
        if data_timestamp:
            converted_data['date_started'] = datetime.fromtimestamp(
                int(data_timestamp)).strftime(DTF)
        if data_device_id:
            converted_data['device_id'] = data_device_id

        vals_data = {}
        if obs_model_name == 'neurological' or obs_model_name == 'gcs':
            if 'eyes' in converted_data:
                vals_data['eyes'] = converted_data['eyes']
            if 'verbal' in converted_data:
                vals_data['verbal'] = converted_data['verbal']
            if 'motor' in converted_data:
                vals_data['motor'] = converted_data['motor']
        elif obs_model_name == 'food_fluid':
            if 'passed_urine' in converted_data:
                vals_data['passed_urine'] = converted_data['passed_urine']
            if 'bowels_open' in converted_data:
                vals_data['bowels_open'] = converted_data['bowels_open']
        else:
            vals_data = converted_data

        new_activity_id = api.create_activity_for_patient(
            cr, uid, int(patient_id), obs_model_name, vals_data=vals_data,
            context=context
        )
        api.complete(cr, uid, int(new_activity_id), converted_data, context)
        new_activity = activity_api.browse(cr, uid, new_activity_id)
        obs = new_activity.data_ref

        description = self.get_submission_message(obs)
        response_data = obs.get_submission_response_data()

        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Successfully Submitted{0} {1}'.format(
                ' Partial' if obs.is_partial else '',
                observation_pool.get_description(append_observation=True)
            ),
            description=description,
            data=response_data
        )
        return request.make_response(
            response_json,
            headers=ResponseJSON.HEADER_CONTENT_TYPE
        )
Example #45
0
    def shop(self, page=0, category=None, search='', **post):
        cr, uid, context, pool = request.cr, request.uid, request.context, request.registry

        ir_rule_obj = request.registry("ir.rule")
        user_obj = request.registry("res.users")
        prod_ids = ir_rule_obj.product_filter(cr, uid, [], context=context)

        newdom = []
        #         dom = ir_rule_obj._compute_domain(cr, uid, self.name, 'read') or []

        domain = request.website.sale_product_domain()
        dom = []
        u_id = context.get("uid", uid)
        user = user_obj.browse(cr, uid, [u_id])
        if user.user_roles in ('magicemart_portal_user',
                               'magicemart_portal_manager',
                               'magicemart_supplier_portal'):
            if prod_ids:
                newdom = [('id', 'in', [x[0] for x in prod_ids])]

            else:
                newdom = [('id', '=', 1)]

            if len(dom):
                domain = list((['&'] + dom + newdom))

            else:
                domain = list(newdom)

        if search:
            for srch in search.split(" "):
                domain += [
                    '|', '|', '|', ('name', 'ilike', srch),
                    ('description', 'ilike', srch),
                    ('description_sale', 'ilike', srch),
                    ('product_variant_ids.default_code', 'ilike', srch)
                ]
        if category:
            domain += [('public_categ_ids', 'child_of', int(category))]

        attrib_list = request.httprequest.args.getlist('attrib')
        attrib_values = [map(int, v.split("-")) for v in attrib_list if v]
        attrib_set = set([v[1] for v in attrib_values])

        if attrib_values:
            attrib = None
            ids = []
            for value in attrib_values:
                if not attrib:
                    attrib = value[0]
                    ids.append(value[1])
                elif value[0] == attrib:
                    ids.append(value[1])
                else:
                    domain += [('attribute_line_ids.value_ids', 'in', ids)]
                    attrib = value[0]
                    ids = [value[1]]
            if attrib:
                domain += [('attribute_line_ids.value_ids', 'in', ids)]

        keep = WSmain.QueryURL('/shop',
                               category=category and int(category),
                               search=search,
                               attrib=attrib_list)

        if not context.get('pricelist'):
            pricelist = self.get_pricelist()
            context['pricelist'] = int(pricelist)
        else:
            pricelist = pool.get('product.pricelist').browse(
                cr, uid, context['pricelist'], context)

        product_obj = pool.get('product.template')

        url = "/shop"
        product_count = product_obj.search_count(cr,
                                                 uid,
                                                 domain,
                                                 context=context)
        if search:
            post["search"] = search
        if category:
            category = pool['product.public.category'].browse(cr,
                                                              uid,
                                                              int(category),
                                                              context=context)
            url = "/shop/category/%s" % slug(category)
        pager = request.website.pager(url=url,
                                      total=product_count,
                                      page=page,
                                      step=PPG,
                                      scope=7,
                                      url_args=post)
        product_ids = product_obj.search(
            cr,
            uid,
            domain,
            limit=PPG,
            offset=pager['offset'],
            order='website_published desc, website_sequence desc',
            context=context)
        products = product_obj.browse(cr, uid, product_ids, context=context)

        style_obj = pool['product.style']
        style_ids = style_obj.search(cr, uid, [], context=context)
        styles = style_obj.browse(cr, uid, style_ids, context=context)

        category_obj = pool['product.public.category']
        category_ids = category_obj.search(cr,
                                           uid, [('parent_id', '=', False)],
                                           context=context)
        categs = category_obj.browse(cr, uid, category_ids, context=context)

        attributes_obj = request.registry['product.attribute']
        attributes_ids = attributes_obj.search(cr, uid, [], context=context)
        attributes = attributes_obj.browse(cr,
                                           uid,
                                           attributes_ids,
                                           context=context)

        from_currency = pool.get('product.price.type')._get_field_currency(
            cr, uid, 'list_price', context)
        to_currency = pricelist.currency_id
        compute_currency = lambda price: pool['res.currency']._compute(
            cr, uid, from_currency, to_currency, price, context=context)

        values = {
            'search':
            search,
            'category':
            category,
            'attrib_values':
            attrib_values,
            'attrib_set':
            attrib_set,
            'pager':
            pager,
            'pricelist':
            pricelist,
            'products':
            products,
            'bins':
            WSmain.table_compute().process(products),
            'rows':
            PPR,
            'styles':
            styles,
            'categories':
            categs,
            'attributes':
            attributes,
            'compute_currency':
            compute_currency,
            'keep':
            keep,
            'style_in_product':
            lambda style, product: style.id in
            [s.id for s in product.website_style_ids],
            'attrib_encode':
            lambda attribs: werkzeug.url_encode([('attrib', i)
                                                 for i in attribs]),
        }
        return request.website.render("website_sale.products", values)
Example #46
0
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
        return res

    @http.route('/odoo/api/task/create',type='http')
    @serialize_exception
    def create_group(self,**kw):
        res = utils.init_response_data()
        try :
            name = kw.get("name","")
        except Exception ,e :
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
        project_task = request.registry("project.task")
        uid = request.uid
        vals = {
                'message_follower_ids': False,
                'sequence': 10, 
                'date_end': False, 
                'planned_hours': 0,
                'partner_id': False, 
                'message_ids': False,
                'user_id': 1, 
                'date_start': '2016-07-08 10:15:04', 
                'company_id': 1,
                'priority': '0',
                'project_id': False,
                'date_last_stage_update': '2016-07-08 10:15:04',
                'group_type': False,
Example #47
0
 def purchase_order_line_unlik(self, line_id, **data):
     cr, uid, context = request.cr, request.uid, request.context
     pol = request.registry('purchase.order.line')
     return pol.unlink(cr, uid, [line_id], context=context)
    def calculate_obs_score(self, *args, **kw):
        observation = kw.get('observation')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        model = 'nh.clinical.patient.observation.' + observation
        converter_pool = request.registry('ir.fields.converter')
        observation_pool = request.registry(model)
        converter = converter_pool.for_model(cr,
                                             uid,
                                             observation_pool,
                                             str,
                                             context=context)
        data = kw.copy() if kw else {}
        section = 'patient'
        if 'startTimestamp' in data:
            del data['startTimestamp']
        if 'taskId' in data:
            section = 'task'
            del data['taskId']
        if observation is not None:
            del data['observation']
        if observation == 'ews':
            observation = 'news'
            for key, value in data.items():
                if not value or key not in [
                        'avpu_text', 'blood_pressure_systolic',
                        'body_temperature', 'indirect_oxymetry_spo2',
                        'oxygen_administration_flag', 'pulse_rate',
                        'respiration_rate'
                ]:
                    del data[key]
        converted_data = converter(data, _logger.debug)

        score_dict = api_pool.get_activity_score(cr,
                                                 uid,
                                                 model,
                                                 converted_data,
                                                 context=context)
        if not score_dict:
            exceptions.abort(400)
        modal_vals = {}
        score_type = observation.upper() if observation != 'neurological' \
            else 'Coma Scale'
        # TODO: Need to add patient name in somehow
        modal_vals['title'] = 'Submit {score_type} score of {score}'.format(
            score_type=score_type, score=score_dict.get('score', ''))
        if 'clinical_risk' in score_dict:
            modal_vals['content'] = '<p><strong>' \
                                    'Clinical risk: {risk}</strong>' \
                                    '</p><p>' \
                                    'Please confirm you want to ' \
                                    'submit this score</p>'.format(
                risk=score_dict['clinical_risk'])
        else:
            modal_vals['content'] = '<p>Please confirm you want to ' \
                                    'submit this score</p>'

        response_data = {
            'score': score_dict,
            'modal_vals': modal_vals,
            'status': 3,
            'next_action': 'json_{}_form_action'.format(section)
        }
        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title=modal_vals['title'],
            description=modal_vals['content'],
            data=response_data)
        return request.make_response(response_json,
                                     headers=ResponseJSON.HEADER_CONTENT_TYPE)
Example #49
0
    def process_patient_observation_form(self, *args, **kw):
        observation = kw.get('observation')  # TODO: add a check if is None (?)
        patient_id = kw.get('patient_id')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api = request.registry('nh.eobs.api')
        activity_api = request.registry('nh.activity')
        obs_str = 'nh.clinical.patient.observation.'+observation
        observation_pool = request.registry(obs_str)
        converter_pool = request.registry('ir.fields.converter')
        converter = converter_pool.for_model(cr, uid, observation_pool,
                                             str, context=context)
        kw_copy = kw.copy() if kw else {}
        test = {}
        data_timestamp = kw_copy.get('startTimestamp', False)
        data_task_id = kw_copy.get('taskId', False)
        data_device_id = kw_copy.get('device_id', False)

        if data_timestamp:
            del kw_copy['startTimestamp']
        if data_task_id:
            del kw_copy['taskId']
        if observation is not None:
            del kw_copy['observation']
        if patient_id is not None:
            del kw_copy['patient_id']
        if data_device_id:
            del kw_copy['device_id']
        for key, value in kw_copy.items():
            if not value:
                del kw_copy[key]

        converted_data = converter(kw_copy, test)
        if data_timestamp:
            converted_data['date_started'] = datetime.fromtimestamp(
                int(data_timestamp)).strftime(DTF)
        if data_device_id:
            converted_data['device_id'] = data_device_id

        new_activity = api.create_activity_for_patient(cr, uid,
                                                       int(patient_id),
                                                       observation,
                                                       context=context)
        api.complete(cr, uid, int(new_activity), converted_data, context)
        triggered_ids = activity_api.search(
            cr, uid,
            [['creator_id', '=', int(new_activity)]]
        )
        triggered_tasks_read = activity_api.read(cr, uid, triggered_ids, [])
        triggered_tasks = []
        for trig_task in triggered_tasks_read:
            access = api.check_activity_access(cr, uid, trig_task['id'])
            is_not_ob = observation not in trig_task['data_model']
            is_open = trig_task['state'] not in ['completed', 'cancelled']
            if access and is_open and is_not_ob:
                triggered_tasks.append(trig_task)
        partial = 'partial_reason' in kw_copy and kw_copy['partial_reason']
        response_data = {'related_tasks': triggered_tasks, 'status': 1}
        rel_tasks = 'Here are related tasks based on the observation' if len(
            triggered_tasks
        ) > 0 else ''
        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title='Successfully Submitted{0} {1}'.format(
                ' Partial' if partial else '', observation_pool._description
            ),
            description=rel_tasks,
            data=response_data
        )
        return request.make_response(
            response_json,
            headers=ResponseJSON.HEADER_CONTENT_TYPE
        )
Example #50
0
    def calculate_obs_score(self, *args, **kw):
        observation = kw.get('observation')  # TODO: add a check if is None (?)
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        model = 'nh.clinical.patient.observation.' + observation
        converter_pool = request.registry('ir.fields.converter')
        observation_pool = request.registry(model)
        converter = converter_pool.for_model(
            cr, uid, observation_pool, str, context=context
        )
        data = kw.copy() if kw else {}
        section = 'patient'
        if 'startTimestamp' in data:
            del data['startTimestamp']
        if 'taskId' in data:
            section = 'task'
            del data['taskId']
        if observation is not None:
            del data['observation']
        if observation == 'ews':
            observation = 'news'
            for key, value in data.items():
                if not value or key not in [
                    'avpu_text',
                    'blood_pressure_systolic',
                    'body_temperature',
                    'indirect_oxymetry_spo2',
                    'oxygen_administration_flag',
                    'pulse_rate',
                    'respiration_rate'
                ]:
                    del data[key]
        converted_data = converter(data, _logger.debug)

        score_dict = api_pool.get_activity_score(
            cr, uid, model, converted_data, context=context
        )
        if not score_dict:
            exceptions.abort(400)
        modal_vals = {}
        score_type = observation.upper() if observation != 'neurological' \
            else 'Coma Scale'
        # TODO: Need to add patient name in somehow
        modal_vals['title'] = 'Submit {score_type} score of {score}'.format(
            score_type=score_type,
            score=score_dict.get('score', '')
        )
        if 'clinical_risk' in score_dict:
            modal_vals['content'] = '<p><strong>' \
                                    'Clinical risk: {risk}</strong>' \
                                    '</p><p>' \
                                    'Please confirm you want to ' \
                                    'submit this score</p>'.format(
                risk=score_dict['clinical_risk'])
        else:
            modal_vals['content'] = '<p>Please confirm you want to ' \
                                    'submit this score</p>'

        response_data = {
            'score': score_dict,
            'modal_vals': modal_vals,
            'status': 3,
            'next_action': 'json_{}_form_action'.format(section)
        }
        response_json = ResponseJSON.get_json_data(
            status=ResponseJSON.STATUS_SUCCESS,
            title=modal_vals['title'],
            description=modal_vals['content'],
            data=response_data
        )
        return request.make_response(
            response_json,
            headers=ResponseJSON.HEADER_CONTENT_TYPE
        )
Example #51
0
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
        return res

    @http.route('/odoo/api/task/create', type='http')
    @serialize_exception
    def create_group(self, **kw):
        res = utils.init_response_data()
        try:
            name = kw.get("name", "")
        except Exception, e:
            res["code"] = status.Status.ERROR
            res["error_info"] = str(e)
            return res
        project_task = request.registry("project.task")
        uid = request.uid
        vals = {
            'message_follower_ids': False,
            'sequence': 10,
            'date_end': False,
            'planned_hours': 0,
            'partner_id': False,
            'message_ids': False,
            'user_id': 1,
            'date_start': '2016-07-08 10:15:04',
            'company_id': 1,
            'priority': '0',
            'project_id': False,
            'date_last_stage_update': '2016-07-08 10:15:04',
            'group_type': False,
Example #52
0
    def take_patient_observation(self, observation, patient_id, *args, **kw):
        """
        Renders the
        :class:`observation<observations.nh_clinical_patient_observation>`
        entry view.
        :returns: observations entry response object
        :rtype: :class:`http.Response<openerp.http.Response>`
        """
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        follow_activities = api_pool.get_assigned_activities(
            cr, uid,
            activity_type='nh.clinical.patient.follow',
            context=context)

        patient = dict()
        patient_info = api_pool.get_patients(
            cr, uid, [int(patient_id)], context=context)
        if not patient_info:
                exceptions.abort(404)
        elif len(patient_info) > 0:
            patient_info = patient_info[0]
        patient['url'] = URLS['single_patient'] + '{0}'.format(
            patient_info['id'])
        patient['name'] = patient_info['full_name']
        patient['id'] = patient_info['id']
        ob_model_name = \
            'nh.clinical.patient.observation.{0}'.format(observation)

        form_desc, form = self.process_form_fields(
            api_pool.get_form_description(
                cr, uid, int(patient_id),
                ob_model_name,
                context=context)
        )
        ob_rec = request.registry(ob_model_name)
        view_desc = ob_rec.new(cr, uid).get_view_description(form_desc)
        form['action'] = URLS['patient_form_action'] + '{0}/{1}'.format(
            observation, patient_id)
        form['type'] = observation
        form['task-id'] = False
        form['patient-id'] = int(patient_id)
        form['source'] = "patient"
        form['start'] = datetime.now().strftime('%s')
        observation_name_list = []
        for ob in api_pool.get_active_observations(cr, uid, patient_id):
            if ob['type'] == observation:
                observation_name_list.append(ob['name'])
        if len(observation_name_list) == 0:
            exceptions.abort(404)
        return request.render(
            'nh_eobs_mobile.data_input_screen',
            qcontext={
                'view_description': view_desc,
                'name': observation_name_list[0],
                'patient': patient,
                'form': form,
                'section': 'patient',
                'notification_count': len(follow_activities),
                'username': request.session['login'],
                'urls': URLS,
                'task_valid': True
            }
        )
Example #53
0
    def take_patient_observation(self, observation, patient_id, *args, **kw):
        """
        Renders the
        :class:`observation<observations.nh_clinical_patient_observation>`
        entry view.
        :returns: observations entry response object
        :rtype: :class:`http.Response<openerp.http.Response>`
        """
        cr, uid, context = request.cr, request.uid, request.context
        api_pool = request.registry('nh.eobs.api')
        follow_activities = api_pool.get_assigned_activities(
            cr,
            uid,
            activity_type='nh.clinical.patient.follow',
            context=context)

        patient = dict()
        patient_info = api_pool.get_patients(cr,
                                             uid, [int(patient_id)],
                                             context=context)
        if not patient_info:
            exceptions.abort(404)
        elif len(patient_info) > 0:
            patient_info = patient_info[0]
        patient['url'] = URLS['single_patient'] + '{0}'.format(
            patient_info['id'])
        patient['name'] = patient_info['full_name']
        patient['id'] = patient_info['id']

        form = dict()
        form['action'] = URLS['patient_form_action'] + '{0}/{1}'.format(
            observation, patient_id)
        form['type'] = observation
        form['task-id'] = False
        form['patient-id'] = int(patient_id)
        form['source'] = "patient"
        form['start'] = datetime.now().strftime('%s')
        form['obs_needs_score'] = False

        form_desc = api_pool.get_form_description(
            cr,
            uid,
            int(patient_id),
            'nh.clinical.patient.observation.{0}'.format(observation),
            context=context)

        for form_input in form_desc:
            if form_input['type'] in ['float', 'integer']:
                input_type = form_input['type']
                form_input['step'] = 0.1 if input_type is 'float' else 1
                form_input['type'] = 'number'
                form_input['number'] = True
                form_input['info'] = ''
                form_input['errors'] = ''
                form_input['min'] = str(form_input['min'])
            elif form_input['type'] == 'selection':
                form_input['selection_options'] = []
                form_input['info'] = ''
                form_input['errors'] = ''
                for option in form_input['selection']:
                    opt = dict()
                    opt['value'] = '{0}'.format(option[0])
                    opt['label'] = option[1]
                    form_input['selection_options'].append(opt)
            elif form_input['type'] == 'meta':
                obs_score = form_input['score']
                score_present = 'score' in form_input
                form['obs_needs_score'] = obs_score if score_present else False
        observation_name_list = []
        for ob in api_pool._active_observations:
            if ob['type'] == observation:
                observation_name_list.append(ob['name'])
        if len(observation_name_list) == 0:
            exceptions.abort(404)
        return request.render('nh_eobs_mobile.observation_entry',
                              qcontext={
                                  'inputs': form_desc,
                                  'name': observation_name_list[0],
                                  'patient': patient,
                                  'form': form,
                                  'section': 'patient',
                                  'notification_count': len(follow_activities),
                                  'username': request.session['login'],
                                  'urls': URLS
                              })