diff --git a/netforce_clinic/layouts/clinic_branch_form.xml b/netforce_clinic/layouts/clinic_branch_form.xml index 550aad3..279bba4 100644 --- a/netforce_clinic/layouts/clinic_branch_form.xml +++ b/netforce_clinic/layouts/clinic_branch_form.xml @@ -1,4 +1,9 @@
+ + + diff --git a/netforce_clinic/layouts/clinic_staff_form.xml b/netforce_clinic/layouts/clinic_staff_form.xml index ed89d2d..56e9440 100644 --- a/netforce_clinic/layouts/clinic_staff_form.xml +++ b/netforce_clinic/layouts/clinic_staff_form.xml @@ -35,8 +35,8 @@ - - + + diff --git a/netforce_clinic/models/branch.py b/netforce_clinic/models/branch.py index bdfbbe4..b5a402b 100644 --- a/netforce_clinic/models/branch.py +++ b/netforce_clinic/models/branch.py @@ -1,4 +1,4 @@ -from netforce.model import Model, fields +from netforce.model import Model, fields, get_model from netforce.access import get_active_company class Branch(Model): @@ -19,4 +19,56 @@ class Branch(Model): 'active': True, } + def create_profile(self,ids,context={}): + for obj in self.browse(ids): + code=obj.code or '' + pf_ids=get_model('profile').search(['code','=',code]) + if pf_ids: + raise Exception("Profile %s is already exist"%(code)) + return + except_perms=['Clinic Menu Settings','Clinic Staff Tab Accounting'] + other_perms=[] + for otp in get_model('permission').search_read(['name','ilike','clinic'],['name']): + name=otp['name'] + if name in except_perms: + continue + other_perms.append(otp['id']) + except_model=['clinic.cycle','clinic.department'] + perms=[] + for model in get_model('model').search_read([['name','ilike','clinic']],['name']): + vals={ + 'model_id': model['id'], + 'perm_read': True, + 'perm_create': True, + 'perm_write': True, + 'perm_delete': True, + } + name=model['name'] + if name in except_model: + vals['perm_create']=False + vals['perm_write']=False + vals['perm_delete']=False + perms.append(('create', vals)) + get_model('profile').create({ + 'perms': perms, + 'code': code, + 'name': code, + 'perms': perms, + 'other_perms': [('set',other_perms)], + 'login_company_id': get_active_company(), + }) + print("create profile %s"%(code)) + + def share_access(self,ids,context={}): + obj=self.browse(ids)[0] + obj.create_profile() + return { + 'next': { + 'name': 'clinic_branch', + 'active_id': obj.id, + 'mode': 'form', + }, + 'flash': 'Branch %s is shared sucessfully'%obj.code, + } + Branch.register() diff --git a/netforce_clinic/models/department.py b/netforce_clinic/models/department.py index ac0bedb..550fde9 100644 --- a/netforce_clinic/models/department.py +++ b/netforce_clinic/models/department.py @@ -45,19 +45,74 @@ class Department(Model): if name in except_perms: continue other_perms.append(otp['id']) + except_model=['clinic.cycle','clinic.department'] + perms=[] for model in get_model('model').search_read([['name','ilike','clinic']],['name']): - pass - get_model('profile').create({ + vals={ + 'model_id': model['id'], + 'perm_read': True, + 'perm_create': True, + 'perm_write': True, + 'perm_delete': True, + } + name=model['name'] + if name in except_model: + vals['perm_create']=False + vals['perm_write']=False + vals['perm_delete']=False + perms.append(('create', vals)) + profile_id=get_model('profile').create({ 'perms': perms, 'code': code, 'name': code, + 'perms': perms, 'other_perms': [('set',other_perms)], + 'login_company_id': get_active_company(), }) print("create profile %s"%(code)) + return profile_id + + def create_sharing(self,ids,context={}): + #rule: branch_code-deparment_code + profile_id=context.get('profile_id') + if not profile_id: + raise Exception("Profile not found") + models=[ + ['clinic.patient','department_id.code','='], + ['clinic.patient.cycle','department_id.code','='], + ['clinic.staff','location','ilike'], + ['clinic.staff.rotation','staff_id.department_id.code','='], + ['clinic.visit','department_id.code','='], + ['clinic.hd.case','department_id.code','='], + ['clinic.cycle.item','department_id.code','='], + ['clinic.sickbed','department_id.code','='], + ['clinic.shop','department_id.code','='], + #['clinic.department','code','='], + ['clinic.dialyzer','department_id.code','='], + ['clinic.schedule','department_id.code','='], + ] + for obj in self.browse(ids): + for sa in get_model('share.access').search_browse([]): + if obj.code in sa.domain or not sa.profiles: + print("profile %s is deleted"%(obj.code)) + sa.delete() + for model,field_dom, op in models: + for model_id in get_model("model").search(['name','=',model]): + get_model('share.access').create({ + 'model_id': model_id, + 'profiles': [['set',[profile_id]]], #need to include another profile ex: profile of branch + 'default_access': 'custom', + 'filter_type': 'rw', + 'select_profile': 'include', + 'domain': '[["%s","%s","%s"]]'%(field_dom,op,obj.code), + }) + print("Done!") def share_access(self,ids,context={}): obj=self.browse(ids)[0] - obj.create_profile() + context['profile_id']=obj.create_profile() + obj.create_sharing(context=context) + # create sharing setting return { 'next': { 'name': 'clinic_department',