title first_name and last_name for patient & staff

conv_bal
watcha.h 2015-02-25 12:17:58 +07:00
parent bac6fc081d
commit 0ee5de47de
6 changed files with 227 additions and 18 deletions

View File

@ -1,7 +1,7 @@
<menu string="Clinic"> <menu string="Clinic">
<item string="Dashboard" action="clinic_board"/> <item string="Dashboard" action="clinic_board"/>
<item string="Staffs" perm="clinic_staff"> <item string="Staffs" perm="clinic_staff">
<item string="Staffs" action="clinic_staff" action_options="tab_no=2"/> <item string="Staffs" action="clinic_staff" action_options="tab_no=0"/>
<item string="Doctors" action="clinic_staff" action_options="tab_no=3"/> <item string="Doctors" action="clinic_staff" action_options="tab_no=3"/>
<item string="Nurses" action="clinic_staff" action_options="tab_no=4"/> <item string="Nurses" action="clinic_staff" action_options="tab_no=4"/>
<divider/> <divider/>

View File

@ -9,16 +9,16 @@
</head> </head>
<field name="number"/> <field name="number"/>
<field name="trt_no"/> <field name="trt_no"/>
<!--<field name="name"/>-->
<field name="title_id" required="1"/>
<field name="type_id"/> <field name="type_id"/>
<field name="name"/> <field name="first_name" required="1"/>
<field name="last_name" required="1"/>
<field name="reg_date"/> <field name="reg_date"/>
<field name="doctor_id"/> <field name="doctor_id"/>
<field name="categ_id"/> <field name="categ_id"/>
<field name="branch_id" required="1"/> <field name="branch_id" required="1"/>
<field name="title_id" required="1"/>
<field name="department_id" required="1" domain='[["branch_id","=",branch_id]]'/> <field name="department_id" required="1" domain='[["branch_id","=",branch_id]]'/>
<field name="first_name" required="1"/>
<field name="last_name" required="1"/>
<tabs> <tabs>
<tab string="General Information"> <tab string="General Information">
<group span="6" columns="1"> <group span="6" columns="1">

View File

@ -39,7 +39,32 @@ class Patient(Model):
res[obj.id]=hn res[obj.id]=hn
return res return res
def _get_name_check(self,ids,context={}): def _get_name(self,ids,context={}):
res={}
for obj in self.browse(ids):
name=''
title=obj.title_id
if title:
title_name=title.name or ""
title_name=title_name.replace(" ","")
if title_name.lower()!='notitle':
name+=obj.title_id.name or ""
if obj.first_name:
name+=obj.first_name or ""
name+=" "
if obj.last_name:
name+=obj.last_name or ""
if not obj.active:
name+='not_use'
elif context.get('active'):
name+='not_use'
res[obj.id]={
'name': name,
'name_check': name.replace(" ",""), # remove all space for make sure
}
return res
def _get_name_old(self,ids,context={}):
# remove all space for make sure # remove all space for make sure
res={} res={}
for obj in self.browse(ids): for obj in self.browse(ids):
@ -48,7 +73,9 @@ class Patient(Model):
name+='not_use' name+='not_use'
elif context.get('active'): elif context.get('active'):
name+='not_use' name+='not_use'
res[obj.id]=name res[obj.id]={
'name_check': name,
}
return res return res
_fields={ _fields={
@ -59,8 +86,8 @@ class Patient(Model):
'title_id': fields.Many2One("clinic.name.title","Title"), 'title_id': fields.Many2One("clinic.name.title","Title"),
"first_name": fields.Char("First Name"), "first_name": fields.Char("First Name"),
"last_name": fields.Char("Last Name"), "last_name": fields.Char("Last Name"),
"name": fields.Char("Name",search=True), "name": fields.Char("Name",function="_get_name",function_multi=True,store=True,search=True),
"name_check": fields.Char("Name",function="_get_name_check",store=True), # prevent duplicate "name_check": fields.Char("Name",function="_get_name",function_multi=True,store=True), # prevent duplicate
'type_id': fields.Many2One("clinic.patient.type","Type",search=True,required=True), 'type_id': fields.Many2One("clinic.patient.type","Type",search=True,required=True),
"reg_date": fields.Date("Reg. Date",required=False,search=True), "reg_date": fields.Date("Reg. Date",required=False,search=True),
"birthday": fields.Date("Birthday",required=False,search=True), "birthday": fields.Date("Birthday",required=False,search=True),
@ -169,7 +196,7 @@ class Patient(Model):
_order="resign_date desc,number desc" _order="resign_date desc,number desc"
def create(self, vals,**kw): def create(self, vals,**kw):
obj_id=super(Patient,self).create(vals,**kw) obj_id=super().create(vals,**kw)
self.function_store([obj_id]) self.function_store([obj_id])
obj=self.browse(obj_id) obj=self.browse(obj_id)
partner_id=obj.partner_id partner_id=obj.partner_id
@ -211,6 +238,8 @@ class Patient(Model):
address_ids=[addr.id for addr in obj.partner_id.addresses] address_ids=[addr.id for addr in obj.partner_id.addresses]
get_model("partner").delete(partner_ids) get_model("partner").delete(partner_ids)
get_model("address").delete(address_ids) get_model("address").delete(address_ids)
vids=get_model("clinic.visit").search([['patient_id','in',ids],['state','in',['draft','pending']]])
get_model('clinic.visit').delete(vids)
super().delete(ids) super().delete(ids)
def write(self,ids,vals,**kw): def write(self,ids,vals,**kw):
@ -244,6 +273,7 @@ class Patient(Model):
'doctor_id': vals['doctor_id'], 'doctor_id': vals['doctor_id'],
} }
update_visit_pending(obj,visit_vals) update_visit_pending(obj,visit_vals)
# get name
partner_id=obj.partner_id partner_id=obj.partner_id
if not partner_id: if not partner_id:
for partner in get_model("partner").search_browse([['name', '=', obj.name]]): for partner in get_model("partner").search_browse([['name', '=', obj.name]]):
@ -280,8 +310,13 @@ class Patient(Model):
visit_ids=get_model('clinic.visit').search([['patient_id','=',obj.id],['state','in',('draft','pending')]]) visit_ids=get_model('clinic.visit').search([['patient_id','=',obj.id],['state','in',('draft','pending')]])
get_model('clinic.visit').delete(visit_ids) get_model('clinic.visit').delete(visit_ids)
print('remove visit auto %s'%visit_ids) print('remove visit auto %s'%visit_ids)
self.function_store(ids,context=ctx)
super().write(ids,vals,**kw) super().write(ids,vals,**kw)
self.function_store(ids,context=ctx)
for obj in self.browse(ids):
print(obj.name or "")
obj.partner_id.write({
'last_name': obj.name,
})
def name_get(self,ids,context={}): def name_get(self,ids,context={}):
vals=[] vals=[]

View File

@ -110,6 +110,132 @@ class ClinicSetting(Model):
if user_id !=1: if user_id !=1:
print("Only admin!!") print("Only admin!!")
return return
titles=dict([(t.name, t.id) for t in get_model("clinic.name.title").search_browse([])])
title_id=None
gtile_id=title_id
for name, tid in titles.items():
if name=='No Title':
gtitle_id=tid
for model_name in ('clinic.staff', 'clinic.patient'):
for st in get_model(model_name).search_browse([]):
name=st.name
vals={}
if 'นายแพทย์' in name:
name=name.replace("นายแพทย์","")
tname='นายแพทย์'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'male',
})
elif 'นพ.' in name:
name=name.replace("นพ.","")
tname='นพ.'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'male',
})
elif 'นาย' in name:
name=name.replace("นาย","")
tname='นาย'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'male',
})
elif 'พันตำรวจเอก' in name:
name=name.replace("พันตำรวจเอก","")
tname='พันตำรวจเอก'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'male',
})
elif 'นางสาว' in name:
name=name.replace("นางสาว","")
tname='นางสาว'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
elif 'นาง' in name:
name=name.replace("นาง","")
tname='นาง'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
elif 'น.ส.' in name:
name=name.replace("น.ส.","")
tname='น.ส.'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
elif 'พญ..' in name:
name=name.replace("พญ..","")
tname='พญ..'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
elif 'แพทย์หญิง' in name:
name=name.replace("แพทย์หญิง","")
tname='แพทย์หญิง'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
elif 'ร้อยเอกหญิง' in name:
name=name.replace("ร้อยเอกหญิง","")
tname='ร้อยเอกหญิง'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
elif 'พันตรีหญิง' in name:
name=name.replace("พันตรีหญิง","")
tname='พันตรีหญิง'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
elif 'พันตำรวจโทหญิง' in name:
name=name.replace("พันตำรวจโทหญิง","")
tname='พันตำรวจโทหญิง'
title_id=titles.get(tname)
vals.update({
'title_id': title_id,
'gender': 'female',
})
else:
vals.update({
'first_name': name, #XXX
'title_id': gtitle_id,
#'gender': 'male',
})
names=name.split()
names=[n for n in names if n] # skip space
if len(names)==2:
vals.update({
'first_name':names[0],
'last_name': names[1],
})
else:
print(name)
st.write(vals)
if not st.gender:
st.write({
'gender': 'male',
})
print("Done!") print("Done!")
def reset_last_import(self,ids,context={}): def reset_last_import(self,ids,context={}):

View File

@ -71,11 +71,29 @@ class Staff(Model):
res[obj.id]=hids res[obj.id]=hids
return res return res
def _get_name_check(self,ids,context={}): def _get_name(self,ids,context={}):
# remove all space for make sure
res={} res={}
for obj in self.browse(ids): for obj in self.browse(ids):
res[obj.id]=(obj.name or "").replace(" ","") name=''
title=obj.title_id
if title:
title_name=title.name or ""
title_name=title_name.replace(" ","")
if title_name.lower()!='notitle':
name+=obj.title_id.name or ""
if obj.first_name:
name+=obj.first_name or ""
name+=" "
if obj.last_name:
name+=obj.last_name or ""
if not obj.active:
name+='not_use'
elif context.get('active'):
name+='not_use'
res[obj.id]={
'name': name,
'name_check': name.replace(" ",""), # remove all space for make sure
}
return res return res
_fields={ _fields={
@ -84,8 +102,8 @@ class Staff(Model):
"title_id": fields.Many2One("clinic.name.title","Title"), "title_id": fields.Many2One("clinic.name.title","Title"),
"first_name": fields.Char("First Name"), "first_name": fields.Char("First Name"),
"last_name": fields.Char("Last Name"), "last_name": fields.Char("Last Name"),
"name": fields.Char("Name",required=True,search=True), "name": fields.Char("Name",function="_get_name",function_multi=True,store=True,required=True,search=True),
"name_check": fields.Char("Name",function="_get_name_check",store=True), "name_check": fields.Char("Name",function="_get_name",function_multi=True,store=True),
"name_eng": fields.Char("Eng Name",search=True), "name_eng": fields.Char("Eng Name",search=True),
"nick_name": fields.Char("Nick Name",search=True), "nick_name": fields.Char("Nick Name",search=True),
"identification" : fields.Char("Identification Card"), "identification" : fields.Char("Identification Card"),
@ -133,7 +151,6 @@ class Staff(Model):
'branch_id': fields.Many2One("clinic.branch","Branch", search=True), 'branch_id': fields.Many2One("clinic.branch","Branch", search=True),
"partner_id": fields.Many2One("partner","Contact"), "partner_id": fields.Many2One("partner","Contact"),
'departments': fields.Many2Many("clinic.department","Departments"), 'departments': fields.Many2Many("clinic.department","Departments"),
'test': fields.Boolean("Test",search=True),
} }
def _get_number(self,context={}): def _get_number(self,context={}):
@ -256,8 +273,8 @@ class Staff(Model):
address_id=None address_id=None
if not partner_id: if not partner_id:
vals['partner_id'],address_id=self.create_contact(name) vals['partner_id'],address_id=self.create_contact(name)
self.function_store(ids)
super().write(ids,vals,**kw) super().write(ids,vals,**kw)
self.function_store(ids)
if address_id: if address_id:
addr=get_model('address').browse(address_id) addr=get_model('address').browse(address_id)
addr.write({ addr.write({

View File

@ -10,3 +10,34 @@ todo:
matching payment > ok matching payment > ok
create contact from staff -> ok create contact from staff -> ok
script to clear invoice -> ok script to clear invoice -> ok
requirement:
1.1 Profile STAFF ยังไม่สามารถ กำหนดให้ 1คน มี profile ได้หลาย Department (ตามเมล์ date: Mon, Feb 23, 2015 at 3:15 PM ที่คุณพอลลี่แจ้งมา อยู่ระหว่างกำลังแก้ไข)
1.2 HD Cases ยังพบ bug ในส่วน Expense EPO ที่เบิกได้ตามสิทธิ์ของผู้ป่วย เลือก Product แล้วราคาไม่แสดง
-> config on product price list and retest it again
1.3 HD Cases ในส่วน Expense ที่ถูกต้อง เมื่อเลือก Product แล้ว Product นั้นต้องสัมพันธ์กับสถานะ Reimbursable (เช่น Category: EPO Product: [61006-SSO] EPIAO-SSO Reimbursable ต้องเป็น Yes ถ้า EPO ขาย สถานะ Reimbursable เป็น No)
->ok
1.4 RC เป็น PDF + ชื่อพยาบาล วันที่ (ตรงลายเซ็นคุณผดา ต้องการให้สามารถใส่ไฟล์แก้ไขได้เอง)
1.5 HD Case Summary สร้าง filter กรองตามชั้น
-> ok
2. Accounting issues
2.1 HD Cases Matching
2.2 Statement Matching
2.3 ค่าตอบแทนแพทย์ และพยาบาล (ตามที่ คุณบอย แจ้งเมื่อวันที่ 19 ก.พ. 58)
2.4 Bank Reconciliation
2.5 Fixed Asset