From c8b1ea1ca8302c136f3056e58f8d914bdadc7cee Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Tue, 13 Jun 2017 00:51:25 +0700 Subject: [PATCH] improvement --- netforce_clinic/layouts/patient_move_form.xml | 3 +- netforce_clinic/models/new_patient.py | 1 + netforce_clinic/models/patient_move.py | 32 ++++++++++++++++++ .../models/report_hdcase_summary.py | 7 ++-- .../reports/report_hdcase_summary.xlsx | Bin 6630 -> 7323 bytes .../templates/report_hdcase_summary.hbs | 13 ++++--- 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/netforce_clinic/layouts/patient_move_form.xml b/netforce_clinic/layouts/patient_move_form.xml index c4286ec..4df8d7c 100644 --- a/netforce_clinic/layouts/patient_move_form.xml +++ b/netforce_clinic/layouts/patient_move_form.xml @@ -6,6 +6,7 @@ - + + diff --git a/netforce_clinic/models/new_patient.py b/netforce_clinic/models/new_patient.py index 24f1dd5..f5c2178 100644 --- a/netforce_clinic/models/new_patient.py +++ b/netforce_clinic/models/new_patient.py @@ -163,6 +163,7 @@ class NewPatient(Model): vals={ 'patient_id': patient_id, + 'patient_type_id': patient.type_id.id, 'location_from_id': obj.location_from_id.id, 'location_to_id': obj.location_to_id.id, 'state': 'new', diff --git a/netforce_clinic/models/patient_move.py b/netforce_clinic/models/patient_move.py index dde8f8b..90cb7af 100644 --- a/netforce_clinic/models/patient_move.py +++ b/netforce_clinic/models/patient_move.py @@ -12,6 +12,7 @@ class PatientMove(Model): _fields={ 'patient_id': fields.Many2One('clinic.patient','Patient',search=True, required=True), + 'patient_type_id': fields.Many2One("clinic.patient.type","Patient Type"), 'date': fields.Date("Date", required=True,search=True), 'location_from_id': fields.Many2One("clinic.department","Location From",search=True,required=True), 'location_to_id': fields.Many2One("clinic.department","Location To",search=True,required=True), @@ -35,6 +36,7 @@ class PatientMove(Model): data.update({ 'location_from_id': location_from_id, 'location_to_id': location_to_id, + 'patient_type_id': patient.type_id.id, }) return data @@ -76,12 +78,16 @@ class PatientMove(Model): ['date','<=','%s-%s-%s'%(y,str(m).zfill(2),day_month)], ['location_to_id','=', department_id], ] + cond=cond1+[['state','=','normal']] ids=self.search(cond) + move_ids=ids + prev_month=len(ids) cond=cond1+[['state','=','new']] ids=self.search(cond) + move_ids+=ids current_month=len(ids) current_items=[] for index, val in enumerate(self.read(ids)): @@ -91,12 +97,35 @@ class PatientMove(Model): cond=cond1+[['state','=','dispose']] ids=self.search(cond) + dispose_ids=ids dispose_month=len(ids) dispose_items=[] for index, val in enumerate(self.read(ids)): val['no']=index+1 dispose_items.append(val) + move_ids=[id for id in move_ids if id not in dispose_ids] + + # group by type + types={} + for move in get_model("clinic.patient.move").browse(move_ids): + type_name=move.patient_type_id.name + types.setdefault(type_name,0) + types[type_name]+=1 + + patient_types={} + for pt in get_model("clinic.patient.type").search_browse([]): + patient_types[pt.name]=types.get(pt.name, '') + + type_lines=[] + type_names=sorted(patient_types.keys()) + for type_name in type_names: + qty=patient_types[type_name] + type_lines.append({ + 'name': type_name, + 'qty': qty, + }) + next_month=prev_month+current_month-dispose_month prev_m=m-1 @@ -125,6 +154,7 @@ class PatientMove(Model): 'next_month': next_month, 'next_month_thai': next_month_thai, + 'type_lines': type_lines, } return res @@ -178,6 +208,7 @@ class PatientMove(Model): 'location_from_id': obj.location_from_id.id, 'location_to_id': obj.location_to_id.id, 'patient_id': obj.patient_id.id, + 'patient_type_id': obj.patient_type_id.id, 'date': date, } self.create(vals) @@ -202,6 +233,7 @@ class PatientMove(Model): 'location_from_id': locations[locs[0]], #first 'location_to_id': locations[locs[-1]], #last 'patient_id': obj.id, + 'patient_type_id': obj.type_id.id, 'note': obj.note, 'date': date, } diff --git a/netforce_clinic/models/report_hdcase_summary.py b/netforce_clinic/models/report_hdcase_summary.py index 3a3a5d7..66476c6 100644 --- a/netforce_clinic/models/report_hdcase_summary.py +++ b/netforce_clinic/models/report_hdcase_summary.py @@ -30,6 +30,7 @@ class ReportHDCaseSummaryV2(Model): def get_report_data(self, ids, context={}): user_id=get_active_user() + user=get_model('base.user').browse(user_id) defaults=self.default_get(context=context) month=defaults.get("month") y,m,d=month.split("-") @@ -96,7 +97,10 @@ class ReportHDCaseSummaryV2(Model): 'titles': medical_titles, 'date': month, 'can_edit': False, + 'date_print': time.strftime("%Y-%m-%d %H:%M:%S"), + 'user_name': user.name, } + #TODO separate next month by patient type data2=get_model("clinic.patient.move").get_data(date=month, department_id=department_id) data.update(data2) @@ -105,9 +109,6 @@ class ReportHDCaseSummaryV2(Model): data.update({ 'can_edit': True, }) - - from pprint import pprint - pprint(data) return data ReportHDCaseSummaryV2.register() diff --git a/netforce_clinic/reports/report_hdcase_summary.xlsx b/netforce_clinic/reports/report_hdcase_summary.xlsx index 8a209fd55d6548cb32641d0617e570f026640103..c67a76e31c67f9a5c215b2253f43129e30946ade 100644 GIT binary patch delta 5808 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

aZV&<*@-sO2WwpV$5|W%`#vOLeMLT+ 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จำนวนครั้งการทำ Hemodialysis{{month_thai}}เท่ากับ{{total_hdcase}}ครั้ง - จำนวนผู้ป่วยยกมาจากเดือน{{prev_month_thai}}เท่ากับ{{prev_month}}ครั้ง + จำนวนผู้ป่วยยกมาจากเดือน{{prev_month_thai}}เท่ากับ{{prev_month}}คน - จำนวนผู้ป่วยรับใหม่เดือน{{current_month_thai}}เท่ากับ{{current_month}}ครั้ง + จำนวนผู้ป่วยรับใหม่เดือน{{current_month_thai}}เท่ากับ{{current_month}}คน - จำนวนผู้ป่วยจำหน่ายเดือน{{dispose_month_thai}}เท่ากับ{{dispose_month}}ครั้ง + จำนวนผู้ป่วยจำหน่ายเดือน{{dispose_month_thai}}เท่ากับ{{dispose_month}}คน - จำนวนผู้ป่วยยกไปเดือน{{next_month_thai}}เท่ากับ{{next_month}}ครั้ง + จำนวนผู้ป่วยยกไปเดือน{{next_month_thai}}เท่ากับ{{next_month}}คน + {{#each type_lines}} + + {{name}}เท่ากับ{{qty}}คน + + {{/each}}