diff --git a/netforce_clinic/layouts/clinic_hd_case_form.xml b/netforce_clinic/layouts/clinic_hd_case_form.xml
index d03cdb9..7bdc242 100644
--- a/netforce_clinic/layouts/clinic_hd_case_form.xml
+++ b/netforce_clinic/layouts/clinic_hd_case_form.xml
@@ -26,8 +26,10 @@
-
+
+
+
diff --git a/netforce_clinic/models/__init__.py b/netforce_clinic/models/__init__.py
index a58cdde..51e1022 100644
--- a/netforce_clinic/models/__init__.py
+++ b/netforce_clinic/models/__init__.py
@@ -30,8 +30,9 @@ from . import file_sheet
from . import cycle
from . import gen_visit
from . import gen_visit_line
-from . import report_hd_dialy
-from . import report_hd_monthly
+from . import report_hd_detail
+from . import report_hd_summary
from . import payment
from . import payment_line
from . import input_data
+from . import report_hd_madical
diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py
index 95df288..5a32949 100644
--- a/netforce_clinic/models/hd_case.py
+++ b/netforce_clinic/models/hd_case.py
@@ -1,6 +1,6 @@
import time
-from datetime import datetime
+from datetime import datetime
from netforce.model import Model, fields, get_model
from netforce.utils import get_data_path
from netforce.access import get_active_user,set_active_user
@@ -22,6 +22,7 @@ class HDcase(Model):
res[obj.id]=total_time
return res
+
_fields={
"number": fields.Char("Number",required=True,search=True),
"time_start": fields.DateTime("Time start",required=True,search=True),
@@ -41,9 +42,9 @@ class HDcase(Model):
"epo_tn" : fields.Char("EpoTn (Drug name)"),
"epo_unit" : fields.Integer("EpoUnit (Unit of Used drug)"),
"hct": fields.Integer("HCT %", required=True),
+ "hct_alert" : fields.Char("",function="onchange_hct",readonly=True,function_multi=True),
"check_goverment_pay" : fields.Boolean("The Government Pay"),
"check_personal_pay" : fields.Boolean("Pay yourself"),
- "hct": fields.Integer("HCT %(>39)"),
"state": fields.Selection([("draft","Draft"),("in_progress","In Progress"),("completed","Completed"),("discountinued","Discountinued"),("in_completed","In completed")],"Status",required=True),
"dialyzers": fields.One2Many("clinic.dialyzer.line","hd_case_id","Dialyzers"),
"lines": fields.One2Many("clinic.hd.case.line","hd_case_id","Lines"),
@@ -95,8 +96,7 @@ class HDcase(Model):
"time_stop": lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"),
'nurse_id': _get_nurse,
"number": _get_number,
- "company_id": lambda *a: get_active_company(),
- "fee": 1500,
+ "company_id": lambda *a: get_active_company()
}
_order="date desc,number desc"
@@ -171,13 +171,6 @@ class HDcase(Model):
data['total']=total
return data
- def onchange_hct(self,context={}):
- data=context['data']
- hct=data['hct']
- if(hct<=39):
- data['hct']=0
- return data
-
def cancelled(self,ids,context={}):
obj=self.browse(ids)[0]
obj.write({" state":"cancelled"})
@@ -460,6 +453,19 @@ class HDcase(Model):
else:
data['fee']=0.0
return data
+
+ def onchange_hct(self,context={}):
+ data=context['data']
+ hct_alert=data.get("hct","")
+ if(hct_alert<=36):
+ data['hct_alert']="Reimbursement of medicines : 1,125/Week"
+ elif(36<=hct_alert<=39):
+ data['hct_alert']="Reimbursement of medicines : 750/Week"
+ elif(hct_alert>39):
+ data['hct_alert']="Can not be drawn"
+ else:
+ data['hct_alert']=""
+ return data
def undo(self,ids,context={}):
obj=self.browse(ids)[0]
@@ -484,6 +490,6 @@ class HDcase(Model):
'active_id': obj.id,
},
'flash': '%s has been undo'%obj.number,
- }
+ }
HDcase.register()
diff --git a/netforce_clinic/models/report_hd_detail.py b/netforce_clinic/models/report_hd_detail.py
new file mode 100644
index 0000000..9ee6aec
--- /dev/null
+++ b/netforce_clinic/models/report_hd_detail.py
@@ -0,0 +1,152 @@
+import time
+import pprint
+
+from netforce.model import Model, fields, get_model
+
+class ReportHDDetail(Model):
+ _name="clinic.report.hd.detail"
+ _string="Hemodialysis Report Detail"
+ _transient=True
+
+ _fields={
+ "patient_id" : fields.Many2One("clinic.patient","Patient"),
+ "doctor_id" : fields.Many2One("clinic.doctor","Doctor"),
+ "nurse_id" : fields.Many2One("clinic.nurse","Nurse"),
+ "date_from": fields.Date("From"),
+ "date_to": fields.Date("To"),
+ "cycle_id": fields.Many2One("clinic.cycle","Cycle"),
+ }
+
+ _defaults={
+ 'date_from': lambda *a: time.strftime("%Y-%m-%d"),
+ 'date_to': lambda *a: time.strftime("%Y-%m-%d"),
+ }
+
+ _order="cycle_id desc"
+
+
+ def get_report_data(self,ids,context={}):
+ # context=> dict
+ # inside context => keys => defaults => type => dict
+ # dict => key: value => '', 1, [], {}
+ # context['default'] => defaults(dict) => key => inside key => value => '2014-10-22'
+ date_from=time.strftime("%Y-%m-%d")
+ date_to=time.strftime("%Y-%m-%d")
+ # print('date_from ',date_from)
+ defaults=context.get("defaults")
+ if defaults:
+ if defaults.get("date_from"):
+ date_from=defaults['date_from']
+ if defaults.get("date_to"):
+ date_to=defaults['date_to']
+ # date_to=context['date_to']
+ # default => key => dataults
+ # date_from=context['date_from']
+ # print(context['date_from'])
+ #'2014-10-13'
+ # print('date_from ',date_from)
+ # print('date_to ',date_to)
+ PATIENT_TYPE={
+ "mg":"Medical Government",
+ "sc":"Social Security",
+ "nhso":"NHSO (30฿)",
+ "personal": "Personal",
+ "others": "Others",
+ }
+
+ dom=[]
+ dom.append(['state','=','completed'])
+ if ids:
+ obj=self.browse(ids)[0]
+ if obj.date_from:
+ date_from=obj.date_from
+ if obj.date_to:
+ date_to=obj.date_to
+ if obj.cycle_id:
+ dom.append([
+ 'cycle_id','=',obj.cycle_id.id,
+ ])
+ if obj.patient_id:
+ dom.append([
+ 'patient_id','=',obj.patient_id.id,
+ ])
+ if obj.doctor_id:
+ dom.append([
+ 'doctor_id','=',obj.doctor_id.id,
+ ])
+
+ dom.append(['time_start', ">=", date_from+" 00:00:00"])
+ dom.append(['time_stop',"<=", date_to+" 23:59:59"])
+ lines=[]
+ cycles=[]
+ index=0
+ no_patient=0
+ for hd_case in get_model("clinic.hd.case").search_browse(dom,order="cycle_id.sequence"):
+ patient_type=hd_case.patient_id.type
+ patient_type=PATIENT_TYPE.get(patient_type)
+ #dialyzer_name=hd_case.dialyzers.id
+ #dialyzer_name=DIALYZER_NAME.get(dialyzer_name)
+ cycle_name=hd_case.cycle_id.name or ""
+ show_cycle=False
+ if not cycle_name in cycles:
+ cycles.append(cycle_name)
+ show_cycle=True
+ vals={
+ 'color': 'success',
+ 'show_cycle': False,
+ 'cycle' : "",
+ 'patient': "",
+ 'no_patient': no_patient,
+ 'patient_type' : "",
+ 'doctor' : "",
+ 'total' : "",
+ 'rc_no' : "",
+ 'dialyzer_name' : "",
+ 'nurse' : "",
+ }
+ lines.append(vals)
+ no_patient=1
+ else:
+ no_patient+=1
+ index+=1
+ vals={
+ 'show_cycle': show_cycle,
+ 'cycle' : cycle_name,
+ 'patient': hd_case.patient_id.name,
+ 'patient_type' : patient_type,
+ 'no_patient': 0,
+ 'doctor' : hd_case.doctor_id.name,
+ 'total' : hd_case.total,
+ 'rc_no' : hd_case.number,
+ 'dialyzer_name' : 'DZ-xxx',
+ 'nurse' : hd_case.nurse_id.name,
+ }
+ lines.append(vals)
+
+ # XXX
+ if lines:
+ vals={
+ 'color': 'success',
+ 'show_cycle': False,
+ 'cycle' : "",
+ 'patient': "",
+ 'no_patient': no_patient,
+ 'patient_type' : "",
+ 'doctor' : "",
+ 'total' : "",
+ 'rc_no' : "",
+ 'dialyzer_name' : "",
+ 'nurse' : "",
+ }
+ lines.append(vals)
+ #XXX
+ del lines[0]
+ data={
+ 'lines': lines,
+ 'same_date': date_from==date_to,
+ 'date_from': date_from,
+ 'date_to': date_to,
+ }
+ return data
+
+ReportHDDetail.register()
diff --git a/netforce_clinic/models/report_hd_madical.py b/netforce_clinic/models/report_hd_madical.py
new file mode 100644
index 0000000..b316a13
--- /dev/null
+++ b/netforce_clinic/models/report_hd_madical.py
@@ -0,0 +1,153 @@
+import time
+
+from datetime import datetime
+from calendar import monthrange
+from netforce.model import Model,fields
+
+class ReportHDMadical(Model):
+ _name="clinic.report.hd.madical"
+ _string="Hemodialysis Report Madical Summary"
+ _transient=True
+
+ _fields={
+ "date": fields.Date("Month", required=True),
+ }
+
+ _defaults={
+ 'date': lambda *a: time.strftime("%Y-%m-%d"),
+ }
+
+ def get_report_data(self,ids,context={}):
+ date=datetime.now().strftime("%Y-%m-%d")
+ #datemonth=datetime.now().strftime("%m")
+ if ids:
+ obj=self.browse(ids)[0]
+ date=obj.date
+ year=int(date[0:4])
+ month=int(date[5:7])
+ month_str=datetime.strptime(date,'%Y-%m-%d').strftime("%B")
+
+ next_month = str(month + 1)
+ if next_month == 13:
+ next_month = 12
+ #next_month_str=datetime.strptime(next_month,'%m').strftime("%B")
+ previous_month = str(month - 1)
+ if previous_month == 0:
+ previous_month = 12
+ #previous_month_str=datetime.strptime(previous_month,'%m').strftime("%B")
+
+ #madical=get_model("clinic.hd.case.gm.line").search_browse()
+ #patients_mg=get_model("clinic.patient").search_browse(['type','=','mg'])
+
+ weekday, total_day=monthrange(year, month)
+ time_start='2014-%s-01 00:00:00'%(month)
+ time_stop='2014-%s-%s 23:59:59'%(month,total_day)
+
+ dom=[]
+ dom.append(['state','=','completed'])
+ dom.append(['time_start','>=',time_start])
+ dom.append(['time_stop','<=',time_stop])
+ #hd_cases=get_model("clinic.hd.case.gm.line").search_browse(dom)
+
+ lines=[
+ {
+ 'madical' : 'H4',
+ 'sc': '437',
+ 'uc': '',
+ 'buy' : '4',
+ 'total' : '441',
+ },
+ {
+ 'madical' : 'H2',
+ 'sc': '',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '',
+ },
+ {
+ 'madical' : 'Epr4',
+ 'sc': '216',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '216',
+ },
+ {
+ 'madical' : 'Epr2',
+ 'sc': '',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '',
+ },
+ {
+ 'madical' : 'Epk4',
+ 'sc': '70',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '70',
+ },
+ {
+ 'madical' : 'Epk2',
+ 'sc': '',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '',
+ },
+ {
+ 'madical' : 'Epg4',
+ 'sc': '98',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '98',
+ },
+ {
+ 'madical' : 'Epg2',
+ 'sc': '',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '',
+ },
+ {
+ 'madical' : 'Rng4',
+ 'sc': '34',
+ 'uc': '',
+ 'buy' : '9',
+ 'total' : '43',
+ },
+ {
+ 'madical' : 'Rng2',
+ 'sc': '',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '',
+ },
+ {
+ 'madical' : 'Epi4',
+ 'sc': '264',
+ 'uc': '',
+ 'buy' : '9',
+ 'total' : '43',
+ },
+ {
+ 'madical' : 'Epi2',
+ 'sc': '',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '',
+ },
+ {
+ 'madical' : 'Vnf',
+ 'sc': '',
+ 'uc': '',
+ 'buy' : '',
+ 'total' : '',
+ },
+ ]
+
+ data={
+ 'month': month_str,
+ 'year': year,
+ 'lines': lines,
+ }
+ return data
+
+ReportHDMadical.register()
diff --git a/netforce_clinic/models/report_hd_summary.py b/netforce_clinic/models/report_hd_summary.py
new file mode 100644
index 0000000..bd4d8ce
--- /dev/null
+++ b/netforce_clinic/models/report_hd_summary.py
@@ -0,0 +1,145 @@
+import time
+
+from datetime import datetime
+from calendar import monthrange
+from netforce.model import Model, fields, get_model
+
+class ReportHDSummary(Model):
+ _name="clinic.report.hd.summary"
+ _string="Hemodialysis Report Summary"
+ _transient=True
+
+ _fields={
+ "date": fields.Date("Month", required=True),
+ }
+
+ _defaults={
+ 'date': lambda *a: time.strftime("%Y-%m-%d"),
+ }
+
+ def get_report_data(self,ids,context={}):
+ date=datetime.now().strftime("%Y-%m-%d")
+ dom=[]
+ if ids:
+ obj=self.browse(ids)[0]
+ date=obj.date
+
+ month=int(date[5:7])
+ year=int(date[0:4])
+ weekday, total_day=monthrange(year, month)
+ #date_from="%s-%s-01"%(year,month)
+ #date_to="%s-%s-%s"%(year,month,total_day)
+ month_str=datetime.strptime(date,'%Y-%m-%d').strftime("%B")
+ next_month = str(month + 1)
+ if next_month == 13:
+ next_month = 12
+ next_month_str=datetime.strptime(next_month,'%m').strftime("%B")
+
+ previous_month = month-1
+ if previous_month == 0:
+ previous_month = 12
+ #tip previous_month=str(month-1 == 0 and 12 or month)
+ previous_month_str=datetime.strptime('%s'%previous_month,'%m').strftime("%B")
+
+ patients=get_model("clinic.patient").search_browse(['type','=','All'])
+ patients_mg=get_model("clinic.patient").search_browse(['type','=','mg'])
+ patients_sc=get_model("clinic.patient").search_browse(['type','=','sc'])
+ patients_nhso=get_model("clinic.patient").search_browse(['type','=','nhso'])
+ patients_pn=get_model("clinic.patient").search_browse(['type','=','personal'])
+
+ new_patients=len(patients)
+
+ time_start='2014-%s-01'%(month) # 2014-10-20
+ time_stop='2014-%s-%s'%(month,total_day)
+
+ dom=[]
+ dom.append(['state','=','completed'])
+ dom.append(['time_start','>=',time_start])
+ dom.append(['time_stop','<=',time_stop])
+ cur_total_case=len(get_model("clinic.hd.case").search(dom))
+
+ weekday, prev_total_day=monthrange(year, previous_month)
+ time_start_pre='2014-%s-01'%(previous_month) # 2014-10-20
+ time_stop_pre='2014-%s-%s'%(previous_month,prev_total_day)
+
+ dom=[]
+ dom.append(['state','=','completed'])
+ dom.append(['time_start','>=',time_start_pre])
+ dom.append(['time_stop','<=',time_stop_pre])
+ prev_total_case=len(get_model("clinic.hd.case").search(dom))
+
+ lines=[
+ {
+ 'topic': 'The number of times the Hemodialysis',
+ 'month': month_str,
+ 'amount': cur_total_case,
+ 'date_from': time_start,
+ 'date_to': time_stop,
+ },
+ {
+ 'topic':'The number of cases brought',
+ 'month': previous_month_str,
+ 'amount': prev_total_case,
+ 'date_from': time_start_pre,
+ 'date_to': time_stop_pre,
+ },
+ {
+ 'topic':'Number of new patients',
+ 'month': month_str,
+ 'amount': new_patients,
+ 'date_from': time_start,
+ 'date_to': time_stop,
+ },
+ {
+ 'topic':'Number of patients discharged',
+ 'month': month_str,
+ 'amount': 'N/A',
+ 'date_from': time_start,
+ 'date_to': time_stop,
+ },
+ {
+ 'topic':'The number of cases brought',
+ 'month': next_month_str,
+ 'amount': 0,
+ 'date_from': time_start,
+ 'date_to': time_stop,
+ },
+ {
+ 'topic':'Number of patients withdrawn Social Security',
+ 'month': '',
+ 'amount': len(patients_sc),
+ 'date_from': "",
+ 'date_to': "",
+ },
+ {
+ 'topic':'Number of patients withdrawn Medical Government',
+ 'month':'',
+ 'amount': len(patients_mg),
+ 'date_from': "",
+ 'date_to': "",
+ },
+ {
+ 'topic':'Number of patients withdrawn NHSO(30B)',
+ 'month':'',
+ 'amount': len(patients_nhso),
+ 'date_from': "",
+ 'date_to': "",
+ },
+ {
+ 'topic':'Many patients pay themselves',
+ 'month': '',
+ 'amount': len(patients_pn),
+ 'date_from': "",
+ 'date_to': "",
+ },
+ ]
+
+ data={
+ 'month': month_str,
+ 'year': year,
+ 'lines': lines,
+ }
+ #print("data", data)
+ return data
+
+ReportHDSummary.register()
diff --git a/netforce_clinic/models/visit.py b/netforce_clinic/models/visit.py
index af14153..962f045 100644
--- a/netforce_clinic/models/visit.py
+++ b/netforce_clinic/models/visit.py
@@ -13,7 +13,7 @@ class Visit(Model):
_name_field="number"
_multi_company=True
- def _get_visit_date(self,ids,context):
+ def _get_visit_date(self,ids,context={}):
res={}
for obj in self.browse(ids):
res[obj.id]=obj.time_start[0:10]