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()