diff --git a/netforce_clinic/layouts/clinic_patient_form.xml b/netforce_clinic/layouts/clinic_patient_form.xml
index 831af7d..8762cd1 100644
--- a/netforce_clinic/layouts/clinic_patient_form.xml
+++ b/netforce_clinic/layouts/clinic_patient_form.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/netforce_clinic/models/patient.py b/netforce_clinic/models/patient.py
index 1644a44..9f14dbd 100644
--- a/netforce_clinic/models/patient.py
+++ b/netforce_clinic/models/patient.py
@@ -3,6 +3,14 @@ import time
from netforce.model import Model, fields, get_model
from netforce.access import get_active_company, get_active_user, set_active_user
+PATIENT_TYPE={
+ "mg":"Medical Government",
+ "sc":"Social Security",
+ "nhso":"NHSO (30฿)",
+ "personal": "Personal",
+ "others": "Others",
+}
+
class Patient(Model):
_name="clinic.patient"
_string="Patient"
@@ -21,7 +29,7 @@ class Patient(Model):
return res # -> {1: 30, 2: 45,.....}
_fields={
- "type": fields.Selection([("mg","Medical Govement"),("sc","Social Security"),("nhso","NHSO (30฿)"),("personal","Personal"),("others","Others")],"Patient Type",required=False),
+ "type": fields.Selection([("mg","Medical Government"),("sc","Social Security"),("nhso","NHSO (30฿)"),("personal","Personal"),("others","Others")],"Patient Type",required=True),
"number": fields.Char("Patient No.",required=True,search=True),
"name": fields.Char("Name",required=True,search=True),
"reg_date": fields.Date("Register Date",required=False,search=True),
@@ -94,22 +102,65 @@ class Patient(Model):
obj=self.browse(ids)[0]
obj.write({"state":"voided"})
+ def get_partner_id(self,patient_type,data):
+ partner_obj=get_model("partner")
+ categ_name=PATIENT_TYPE.get(patient_type)
+ categ_ids=get_model("partner.categ").search([['name','=',categ_name]])
+ if not categ_ids:
+ raise Exception("Category: %s not found"%categ_name)
+ partner_id=None
+ if patient_type in ("mg","sc","nhso"):
+ partner_obj=get_model("partner")
+ for partner in partner_obj.search_browse([]):
+ if partner.categ_id.id in categ_ids:
+ partner_id=partner.id
+ print("Found partner ", partner.name, " ", partner.id)
+ break
+ if not partner_id:
+ name=data.get("name","")
+ partner_ids=partner_obj.search([['name','=',name]])
+ if not partner_ids:
+ partner_id=partner_obj.create({
+ 'name': name,
+ 'last_name': name,
+ 'type': 'person'
+ })
+ print("create new partner ", name)
+ else:
+ partner_id=partner_ids[0]
+ return partner_id
+
+ def onchange_type(self,context={}):
+ data=context['data']
+ patient_type=data['type']
+ partner_id=None
+ if patient_type:
+ partner_id=self.get_partner_id(patient_type,data)
+ data['partner_id']=partner_id
+ return data
+
def create(self,vals,**kw):
obj_id=super(Patient,self).create(vals,**kw)
obj=self.browse(obj_id)
- partner_id=get_model("partner").create({
- 'name': obj.name,
- 'last_name': obj.name,
- 'type': 'person'
- })
+ partner_id=self.get_partner_id(patient_type=obj.type,data={'name': obj.name})
obj.write({
'partner_id': partner_id,
})
return obj_id
def delete(self,ids,context={}):
- partner_ids=[obj.partner_id.id for obj in self.browse(ids)]
+ partner_ids=[]
+ for obj in self.browse(ids):
+ if obj.type not in ("mg","nhso","sc"):
+ partner_ids.append(obj.partner_id.id)
get_model("partner").delete(partner_ids)
super().delete(ids)
+
+ def write(self,ids,vals,**kw):
+ partner_id=vals.get('partner_id')
+ if not partner_id:
+ obj=self.browse(ids[0])
+ vals['partner_id']=self.get_partner_id(patient_type=obj.type,data={'name': obj.name})
+ super().write(ids,vals,**kw)
Patient.register()