From a3078369185f254f798a786834b352907ed3c1ec Mon Sep 17 00:00:00 2001 From: "chayut.s" Date: Mon, 13 Oct 2014 15:10:20 +0700 Subject: [PATCH] Treatment_Summary & Dialyzer_Drop [Report] --- netforce_clinic/actions/clinic_cycle.xml | 6 ++ .../actions/clinic_dialyzer_report.xml | 8 ++ .../actions/clinic_round_report.xml | 6 ++ netforce_clinic/actions/clinic_visit.xml | 2 +- netforce_clinic/layouts/clinic_cycle_form.xml | 3 + netforce_clinic/layouts/clinic_cycle_list.xml | 3 + .../layouts/clinic_dialyzer_report.xml | 5 ++ .../layouts/clinic_hd_case_form.xml | 16 ++-- .../layouts/clinic_hd_case_list.xml | 3 +- netforce_clinic/layouts/clinic_hd_report.xml | 6 +- netforce_clinic/layouts/clinic_menu.xml | 9 +- .../layouts/clinic_visit_calendar.xml | 2 +- netforce_clinic/layouts/clinic_visit_form.xml | 2 +- netforce_clinic/layouts/clinic_visit_list.xml | 2 +- netforce_clinic/models/__init__.py | 57 ++++++------ netforce_clinic/models/__init__.py~ | 36 ++++++++ netforce_clinic/models/cycle.py | 11 +++ netforce_clinic/models/dialyzer.py | 18 +++- netforce_clinic/models/hd_case.py | 34 +++---- .../models/report_dialyzer_drop.py | 39 ++++++++ netforce_clinic/models/report_hd.py | 32 +++++-- netforce_clinic/models/visit.py | 84 ++++++++++++------ netforce_clinic/reports/dialyzer_drop.xlsx | Bin 0 -> 5172 bytes netforce_clinic/reports/hd_report.xlsx | Bin 0 -> 5289 bytes netforce_clinic/reports/round.odt | Bin 11232 -> 11404 bytes .../templates/report_dialyzer_drop.hbs | 58 ++++++++++++ .../templates/report_dialyzer_drop.hbs~ | 63 +++++++++++++ .../templates/report_hd_report.hbs | 64 ++++++++++++- 28 files changed, 469 insertions(+), 100 deletions(-) create mode 100644 netforce_clinic/actions/clinic_cycle.xml create mode 100644 netforce_clinic/actions/clinic_dialyzer_report.xml create mode 100644 netforce_clinic/actions/clinic_round_report.xml create mode 100644 netforce_clinic/layouts/clinic_cycle_form.xml create mode 100644 netforce_clinic/layouts/clinic_cycle_list.xml create mode 100644 netforce_clinic/layouts/clinic_dialyzer_report.xml create mode 100644 netforce_clinic/models/__init__.py~ create mode 100644 netforce_clinic/models/cycle.py create mode 100644 netforce_clinic/models/report_dialyzer_drop.py create mode 100644 netforce_clinic/reports/dialyzer_drop.xlsx create mode 100644 netforce_clinic/reports/hd_report.xlsx create mode 100644 netforce_clinic/templates/report_dialyzer_drop.hbs create mode 100644 netforce_clinic/templates/report_dialyzer_drop.hbs~ diff --git a/netforce_clinic/actions/clinic_cycle.xml b/netforce_clinic/actions/clinic_cycle.xml new file mode 100644 index 0000000..c763fad --- /dev/null +++ b/netforce_clinic/actions/clinic_cycle.xml @@ -0,0 +1,6 @@ + + Cycle + multi_view + clinic.cycle + clinic_menu + diff --git a/netforce_clinic/actions/clinic_dialyzer_report.xml b/netforce_clinic/actions/clinic_dialyzer_report.xml new file mode 100644 index 0000000..9d4532c --- /dev/null +++ b/netforce_clinic/actions/clinic_dialyzer_report.xml @@ -0,0 +1,8 @@ + + Dialyzer + report + report.dialyzer.drop + report_dialyzer_drop + dialyzer_drop + clinic_menu + diff --git a/netforce_clinic/actions/clinic_round_report.xml b/netforce_clinic/actions/clinic_round_report.xml new file mode 100644 index 0000000..1b6b265 --- /dev/null +++ b/netforce_clinic/actions/clinic_round_report.xml @@ -0,0 +1,6 @@ + + report_odt + clinic.round.report + get_data + round + diff --git a/netforce_clinic/actions/clinic_visit.xml b/netforce_clinic/actions/clinic_visit.xml index bdb81f1..46b2daa 100644 --- a/netforce_clinic/actions/clinic_visit.xml +++ b/netforce_clinic/actions/clinic_visit.xml @@ -3,6 +3,6 @@ multi_view clinic.visit [["All",[]],["Draft",[["state","=","draft"]]],["Waiting Treatment",[["state","=","waiting_treatment"]]],["Treatment",[["state","=","treatment"]]],["Cancelled",[["state","=","cancelled"]]]] - list,calendar,form + list,calendar,form clinic_menu diff --git a/netforce_clinic/layouts/clinic_cycle_form.xml b/netforce_clinic/layouts/clinic_cycle_form.xml new file mode 100644 index 0000000..2070692 --- /dev/null +++ b/netforce_clinic/layouts/clinic_cycle_form.xml @@ -0,0 +1,3 @@ +
+ + diff --git a/netforce_clinic/layouts/clinic_cycle_list.xml b/netforce_clinic/layouts/clinic_cycle_list.xml new file mode 100644 index 0000000..d1bbdaa --- /dev/null +++ b/netforce_clinic/layouts/clinic_cycle_list.xml @@ -0,0 +1,3 @@ + + + diff --git a/netforce_clinic/layouts/clinic_dialyzer_report.xml b/netforce_clinic/layouts/clinic_dialyzer_report.xml new file mode 100644 index 0000000..98b8c28 --- /dev/null +++ b/netforce_clinic/layouts/clinic_dialyzer_report.xml @@ -0,0 +1,5 @@ +
+ + + +
diff --git a/netforce_clinic/layouts/clinic_hd_case_form.xml b/netforce_clinic/layouts/clinic_hd_case_form.xml index c60767d..fd39749 100644 --- a/netforce_clinic/layouts/clinic_hd_case_form.xml +++ b/netforce_clinic/layouts/clinic_hd_case_form.xml @@ -8,16 +8,17 @@ + - - + + + - - + @@ -44,7 +45,7 @@ - + @@ -64,7 +65,6 @@ ->>>>>>> e1240368c0b451851115891dd7ace7423682a225 @@ -84,9 +84,7 @@ - - - + diff --git a/netforce_clinic/layouts/clinic_hd_case_list.xml b/netforce_clinic/layouts/clinic_hd_case_list.xml index 637e2b4..6196303 100644 --- a/netforce_clinic/layouts/clinic_hd_case_list.xml +++ b/netforce_clinic/layouts/clinic_hd_case_list.xml @@ -1,9 +1,8 @@ - - + diff --git a/netforce_clinic/layouts/clinic_hd_report.xml b/netforce_clinic/layouts/clinic_hd_report.xml index 36cfd2a..d3fe7e1 100644 --- a/netforce_clinic/layouts/clinic_hd_report.xml +++ b/netforce_clinic/layouts/clinic_hd_report.xml @@ -1,4 +1,6 @@
- - + + + + diff --git a/netforce_clinic/layouts/clinic_menu.xml b/netforce_clinic/layouts/clinic_menu.xml index b5777e0..865b96c 100644 --- a/netforce_clinic/layouts/clinic_menu.xml +++ b/netforce_clinic/layouts/clinic_menu.xml @@ -23,15 +23,18 @@ - - +
+ +
+ - + + diff --git a/netforce_clinic/layouts/clinic_visit_calendar.xml b/netforce_clinic/layouts/clinic_visit_calendar.xml index 252622f..98c7104 100644 --- a/netforce_clinic/layouts/clinic_visit_calendar.xml +++ b/netforce_clinic/layouts/clinic_visit_calendar.xml @@ -1,7 +1,7 @@ - + diff --git a/netforce_clinic/layouts/clinic_visit_form.xml b/netforce_clinic/layouts/clinic_visit_form.xml index 484d199..d4fb44a 100644 --- a/netforce_clinic/layouts/clinic_visit_form.xml +++ b/netforce_clinic/layouts/clinic_visit_form.xml @@ -12,7 +12,7 @@ - + diff --git a/netforce_clinic/layouts/clinic_visit_list.xml b/netforce_clinic/layouts/clinic_visit_list.xml index 60b2d33..dffe4c5 100644 --- a/netforce_clinic/layouts/clinic_visit_list.xml +++ b/netforce_clinic/layouts/clinic_visit_list.xml @@ -2,7 +2,7 @@ - + diff --git a/netforce_clinic/models/__init__.py b/netforce_clinic/models/__init__.py index dad4132..2c59bd3 100644 --- a/netforce_clinic/models/__init__.py +++ b/netforce_clinic/models/__init__.py @@ -1,36 +1,37 @@ -from . import comorbidity -from . import morbidity -from . import education -from . import setting -from . import graduation -from . import nation -from . import race from . import cause_chronic -from . import schedule +from . import comorbidity +from . import cycle +from . import department +from . import dialyzer +from . import dialyzer_line +from . import doctor +from . import education +from . import file_sheet +from . import graduation +from . import hd_case +from . import hd_case_line +from . import hd_case_discont +from . import import_payment +from . import morbidity +from . import nation +from . import nurse from . import patient from . import patient_schedule from . import patient_cause_line from . import patient_comorbidity_line from . import patient_morbidity_line -from . import department -from . import doctor -from . import nurse +from . import race +from . import report_hd +from . import report_dialyzer_drop +from . import schedule +from . import setting from . import visit from . import visit_plan -from . import clinic_round -from . import clinic_round_report -from . import report_hd -from . import hd_case -from . import hd_case_line -from . import hd_case_discont -from . import dialyzer -from . import department -from . import education -from . import setting -from . import graduation -from . import nation -from . import race -from . import cause_chronic -from . import dialyzer_line -from . import import_payment -from . import file_sheet + + + + + + + + diff --git a/netforce_clinic/models/__init__.py~ b/netforce_clinic/models/__init__.py~ new file mode 100644 index 0000000..b97e624 --- /dev/null +++ b/netforce_clinic/models/__init__.py~ @@ -0,0 +1,36 @@ +from . import comorbidity +from . import morbidity +from . import education +from . import setting +from . import graduation +from . import nation +from . import race +from . import cycle +from . import cause_chronic +from . import schedule +from . import patient +from . import patient_schedule +from . import patient_cause_line +from . import patient_comorbidity_line +from . import patient_morbidity_line +from . import department +from . import doctor +from . import nurse +from . import visit +from . import visit_plan +from . import report_hd +from . import hd_case +from . import hd_case_line +from . import hd_case_discont +from . import dialyzer +from . import report_dialyzer_drop +from . import department +from . import education +from . import setting +from . import graduation +from . import nation +from . import race +from . import cause_chronic +from . import dialyzer_line +from . import import_payment +from . import file_sheet diff --git a/netforce_clinic/models/cycle.py b/netforce_clinic/models/cycle.py new file mode 100644 index 0000000..2a0e18b --- /dev/null +++ b/netforce_clinic/models/cycle.py @@ -0,0 +1,11 @@ +from netforce.model import Model, fields + +class Cycle(Model): + _name="clinic.cycle" + _string="Cycle" + + _fields={ + "name": fields.Char("Name",required=True,search=True), + } + +Cycle.register() diff --git a/netforce_clinic/models/dialyzer.py b/netforce_clinic/models/dialyzer.py index 766bb5d..81b85af 100644 --- a/netforce_clinic/models/dialyzer.py +++ b/netforce_clinic/models/dialyzer.py @@ -32,7 +32,10 @@ class Dialyzer(Model): def _get_number(self,context={}): while 1: - seq_id=get_model("sequence").find_sequence(name="Clinic Dializer") + seq_name='Clinic Dialyzer' + seq_id=get_model("sequence").find_sequence(name=seq_name) + if not seq_id: + raise Exception("Can not found sequence %s"%seq_name) num=get_model("sequence").get_next_number(seq_id,context=context) if not num: return None @@ -61,7 +64,8 @@ class Dialyzer(Model): _defaults={ "state": "new", "date": lambda *a: time.strftime("%Y-%m-%d"), - "number": _get_number, + #"number": _get_number, + 'number': '/', "max_use_time": 10, "use_time": 0, "company_id": lambda *a: get_active_company(), @@ -105,7 +109,7 @@ class Dialyzer(Model): cust_loc_id=res[0] prod=obj.product_id - wh_loc_id=prod.location_id.id + wh_loc_id=prod.location_id.id # product -> tab inventory -> warehouse filed if not wh_loc_id: res=get_model("stock.location").search([["type","=","internal"]]) if not res: @@ -127,7 +131,13 @@ class Dialyzer(Model): pick_id=picking_obj.create(pick_vals,context={"pick_type": "out"}) pick=picking_obj.browse(pick_id) pick.set_done([pick_id]) - obj.write({"state": "active"}) + number=obj.number.replace("/","") + if not number: + number=self._get_number(context) + obj.write({ + "number": number, + "state": "active", + }) return { 'next':{ 'name': 'clinic_dialyzer', diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index 95bf9ff..691a3ef 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -27,9 +27,8 @@ class HDcase(Model): "patient_id": fields.Many2One("clinic.patient","Patient",required=True,search=True), "doctor_id": fields.Many2One("clinic.doctor","Doctor", required=True,search=True), "nurse_id": fields.Many2One("clinic.nurse","Nurse", required=True,search=True), - "date_start": fields.DateTime("Time start",required=True,search=True), - "date_stop": fields.DateTime("Time stop",required=True,search=True), "department_id": fields.Many2One("clinic.department", "Department",search=True), + "cycle_id" : fields.Many2One("clinic.cycle","Cycle", required=True), "wh_start": fields.Float("Wt.Kg start"), "wh_stop": fields.Float("Wt.Kg stop"), "bp_start": fields.Integer("BP mmHG start"), @@ -81,13 +80,17 @@ class HDcase(Model): return num get_model("sequence").increment_number(seq_id,context=context) + def _get_nurse(self,context={}): user_id=get_active_user() print("user_id ",user_id) nurse_ids=get_model("clinic.nurse").search([['user_id','=',user_id]]) if nurse_ids: return nurse_ids[0] - return None + return None + + + _defaults={ "state": "draft", @@ -97,7 +100,6 @@ class HDcase(Model): 'nurse_id': _get_nurse, "number": _get_number, "company_id": lambda *a: get_active_company(), - "fee": 1500, } _order="date desc,number desc" @@ -162,18 +164,20 @@ class HDcase(Model): line['amount']=amt total+=amt data['total']=total - return data + return data + + def onchange_hct(self,context={}): + data=context['data'] + hct=data['hct'] + if (hct>39): + print ("Test1") + else: + print ("Test3") - def onchange_htc(self,context={}): - data=context['htc'] - total=0.0 - if (htc > 39): - data['htc']=total - return data def cancelled(self,ids,context={}): obj=self.browse(ids)[0] - obj.write({"state":"cancelled"}) + obj.write({" state":"cancelled"}) def make_invoices(self,ids,context={}): setting=get_model("settings").browse(1) @@ -382,7 +386,7 @@ class HDcase(Model): 'mode': 'form', 'form_view_xml': 'clinic_hd_case_form', 'active_id': ids[0], - } + } def delete(self,ids,context={}): for obj in self.browse(ids): @@ -475,7 +479,7 @@ class HDcase(Model): 'active_id': visit_id, }, 'flash': "New visit is created", - } + } def onchange_dateplane(self,context={}): data=context["data"] @@ -498,7 +502,7 @@ class HDcase(Model): if not line.get('state'): line['state']='open' - return data + return data HDcase.register() diff --git a/netforce_clinic/models/report_dialyzer_drop.py b/netforce_clinic/models/report_dialyzer_drop.py new file mode 100644 index 0000000..1b6e36b --- /dev/null +++ b/netforce_clinic/models/report_dialyzer_drop.py @@ -0,0 +1,39 @@ +import time + +from netforce.model import Model, fields, get_model + +class DialyzerDrop(Model): + _name="report.dialyzer.drop" + _string="Dialyzer [Drop]" + _transient=True + + _fields={ + "date": fields.Date("Date"), + } + + _defaults={ + 'date': lambda *a: time.strftime("%Y-%m-%d"), + "state" : "drop", + } + + def get_report_data(self,ids,context={}): + lines=[] + + dialyzer_ids=get_model("clinic.dialyzer").search([["state","=","drop"]]) + hd_cases=get_model("clinic.dialyzer").search_browse([]) + for dialyzer_ids in hd_cases: + lines.append({ + 'number' : dialyzer_ids.number, + 'usetime': dialyzer_ids.use_time, + 'maxuse' : dialyzer_ids.max_use_time, + 'createdate' : dialyzer_ids.date, + 'expdate' : dialyzer_ids.exp_date, + 'patient' : dialyzer_ids.patient_id.name, + }) + + data={ + 'lines': lines or "Dialyzer Drop [Empty]", + } + return data + +DialyzerDrop.register() diff --git a/netforce_clinic/models/report_hd.py b/netforce_clinic/models/report_hd.py index 29e5755..c90e4b7 100644 --- a/netforce_clinic/models/report_hd.py +++ b/netforce_clinic/models/report_hd.py @@ -1,6 +1,6 @@ import time -from netforce.model import Model, fields +from netforce.model import Model, fields, get_model class HDReport(Model): _name="clinic.hd.report" @@ -9,21 +9,39 @@ class HDReport(Model): _fields={ "date": fields.Date("Date"), - "cycle": fields.Selection([("1","One"),("2","Two"),("3","Three"),("4","Four")],"Cycle"), + "cycle_id": fields.Many2One("clinic.cycle","Cycle"), } _defaults={ 'date': lambda *a: time.strftime("%Y-%m-%d"), } + + _order="cycle_id desc" def get_report_data(self,ids,context={}): - print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>.") - if not ids: - return {} - obj=self.browse(ids)[0] + lines=[] + + hd_case_ids=get_model("clinic.dialyzer").search([["state","=","completed"]]) + hd_cases=get_model("clinic.hd.case").search_browse([]) + for hd_case_ids in hd_cases: + lines.append({ + 'cycle' : hd_case_ids.cycle_id.name, + 'patient': hd_case_ids.patient_id.name, + 'doctor' : hd_case_ids.doctor_id.name, + #'Patient_Type' : patient.type, + 'total' : hd_case_ids.fee, + 'rc_no' : hd_case_ids.number, + #'dz' : hd_case.dialyzers, + 'nurse' : hd_case_ids.nurse_id.name, + }) + #get_model('clinic.patient').search + #[{'name': 1}, {'name': 2}] data={ - 'cycle': obj.cycle or "Empty Cyle" + 'cycle_id': hd_case_ids.cycle or "Empty Cyle", + #'patient_id' : obj.patient or "", + #'doctor_id' : obj.doctor or "", + 'lines': lines, } return data diff --git a/netforce_clinic/models/visit.py b/netforce_clinic/models/visit.py index bf5d40b..1bcfef9 100644 --- a/netforce_clinic/models/visit.py +++ b/netforce_clinic/models/visit.py @@ -31,7 +31,7 @@ class Visit(Model): "doctor_id": fields.Many2One("clinic.doctor","Doctor",search=True), "nurse_id": fields.Many2One("clinic.nurse","Nurse",search=True), "department_id": fields.Many2One("clinic.department", "Department",search=True), - "cycle": fields.Selection([("1","One"),("2","Two"),("3","Tree"),("4","Four")],"Cycle",required=True), + "cycle_id" : fields.Many2One("clinic.cycle","Cycle",required=True), "state": fields.Selection([("draft","Draft"),("waiting_treatment","Waiting Treatment"),('treatment','Treatment'),("cancelled","Cancelled")],"Status",required=True), "comments": fields.One2Many("message","related_id","Comments"), "company_id": fields.Many2One("company","Company"), @@ -45,9 +45,12 @@ class Visit(Model): 'hd_cases': fields.One2Many('clinic.hd.case','visit_id',"HD Cases",readonly=True), } - def _get_number(self,context={}): + def _get_number( self,context={}): while 1: - seq_id=get_model("sequence").find_sequence(name="Clinic Visit") + seq_name='Clinic Visit' + seq_id=get_model("sequence").find_sequence(name=seq_name) + if not seq_id: + raise Exception("Can not found sequence %s"%seq_name) num=get_model("sequence").get_next_number(seq_id,context=context) if not num: return None @@ -65,8 +68,25 @@ class Visit(Model): nurse_ids=get_model("clinic.nurse").search([['user_id','=',user_id]]) if nurse_ids: return nurse_ids[0] + return None + + def _get_doctor(self,context={}): + user_id=get_active_user() + print("user_id",user_id) + doctor_ids=get_model("clinic.doctor").search([['user_id','=',user_id]]) + if doctor_ids: + return doctor_ids[0] return None + def _get_cycle(self,context={}): + user_id=get_active_user() + print("user_id",user_id) + cycle_ids=get_model("clinic.cycle").search([['user_id','=',user_id]]) + if cycle_ids: + return cycle_ids[0] + return None + + def _get_time_start(self,context={}): now=datetime.datetime.now() starttime=now.strftime("%Y-%m-%d %H:%M:%S") @@ -80,13 +100,15 @@ class Visit(Model): _defaults={ "state": "draft", - "cycle": "1", + #"cycle": "One", 'date_visit': lambda *a: time.strftime("%Y-%m-%d"), 'time_start': _get_time_start, 'time_stop': _get_time_stop, "number": "/", "company_id": lambda *a: get_active_company(), 'nurse_id': _get_nurse, + 'doctor_id' : _get_doctor, + 'cycle_id' : _get_cycle , 'time_use': 1, } _order="id desc" @@ -127,6 +149,7 @@ class Visit(Model): 'department_id': obj.department_id.id, 'time_start': obj.time_start, 'time_stop': obj.time_stop, + 'cycle_id' : obj.cycle_id.id, 'visit_id': obj.id, 'fee': include_fee and 1500.00 or 0.0, 'fee_type': obj.patient_id.type, @@ -145,7 +168,7 @@ class Visit(Model): categ_name=patient_type.get(obj.patient_id.type) categ_ids=get_model("partner.categ").search([['name','=',categ_name]]) if not categ_ids: - raise Exception("Category: %s not found"%categ_name) + raise Exception("Partner Category: %s not found"%categ_name) partner_id=None if obj.patient_id.type in ("mg","sc","nhso"): partner_obj=get_model("partner") @@ -184,9 +207,10 @@ class Visit(Model): obj=self.browse(ids)[0] obj.write({"state":"cancelled"}) - def reopen(self,ids,context={}): + def reopen(self,ids,context={ }): obj=self.browse(ids)[0] - obj.write({"state":"draft"}) + obj.write({"state":"draf t"}) + def onchange_patient(self,context={}): data=context['data'] @@ -204,9 +228,29 @@ class Visit(Model): else: data['doctor_id']=None data['department_id']=None - return data + + return data - def copy(self,ids,context={}): + def onchange_cycle(self,context={}): + data=context['data'] + cycle_id=data['cycle_id'] + visits=self.search_browse([['cycle_id','=',cycle_id]],order="number desc") + if visits: + visit=visits[0] + data['doctor_id']=visit.doctor_id.id + data['patient']=visit.patient_id.id + cycle=int(visit.cycle)+1 + data['cycle']=str(cycle) + if cycle>4: + data['cycle']='1' + else: + data['doctor_id']=None + data['patient_id']=None + data['department_id']=None + + return data + + def copy(self,ids,context={}) : obj=self.browse(ids[0]) vals={ 'patient_id': obj.patient_id.id, @@ -230,20 +274,10 @@ class Visit(Model): 'mode': 'form', 'active_id': new_id, }, + 'flash': 'Visit %s is copy to %s'%(obj.number,new_obj.number), } - - - def get_visit_demo(self,context={}): - if not context.get('number'): - return {} - visit_id=int(context['number']) - visit=self.browse(visit_id) - - data={ - 'number' : visit.number - } - return data + def delete(self,ids,context={}): for obj in self.browse(ids): @@ -257,7 +291,7 @@ class Visit(Model): return {} ref_id=int(ref_id) obj=self.browse(ref_id) - cycle_list={'1': 'One','2': 'Two','3': 'Tree','4': 'Four'} + #cycle_list={'1': 'One','2': 'Two','3': 'Tree','4': 'Four'} data={ 'number': obj.number, 'date_visit': obj.date_visit, @@ -265,10 +299,10 @@ class Visit(Model): 'patient_name': obj.patient_id.name or "", 'doctor_name': obj.doctor_id.name or "", 'nurse_name': obj.nurse_id.name or "", - 'cycle': cycle_list.get(obj.cycle,""), + 'cycle_name': obj.cycle_id.name or "", 'print_date': time.strftime("%d/%m/%Y"), } - return data + return data def onchange_dialyzer(self,context={}): data=context["data"] @@ -288,7 +322,7 @@ class Visit(Model): line["bid_flow_rate"]=dialyzer.bid_flow_rate line["ultrafittration"]=dialyzer.ultrafittration line["state"]=dialyzer.state - return data + return data def onchange_timeuse(self,context={}): data=context["data"] diff --git a/netforce_clinic/reports/dialyzer_drop.xlsx b/netforce_clinic/reports/dialyzer_drop.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..42fcc4e0fcdc9f549313cd77c085e3dea3332356 GIT binary patch literal 5172 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 literal 0 HcmV?d00001 diff --git a/netforce_clinic/reports/round.odt b/netforce_clinic/reports/round.odt index 1aee72550cb4d06f82e421453d4802ff1940d6f0..a17141b9acb8006a463e8578334c7b4af1116d72 100644 GIT binary patch delta 5288 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 delta 5108 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 Tj`DA+&e#D +

+ Dialyzers [Drop] +

+ + + + + + + + + + + + + + {{#each lines context=context}} + + + + + + + + + {{/each}} + + + + + + +
+ Number + + Use (Time) + + Max Use (Time) + + Create Date + + Expire Date + + Patient +
+ {{number}} + + {{usetime}} + + {{maxuse}} + + {{createdate}} + + {{expdate}} + + {{patient}} +
diff --git a/netforce_clinic/templates/report_dialyzer_drop.hbs~ b/netforce_clinic/templates/report_dialyzer_drop.hbs~ new file mode 100644 index 0000000..343f8eb --- /dev/null +++ b/netforce_clinic/templates/report_dialyzer_drop.hbs~ @@ -0,0 +1,63 @@ +
+

+ HD Case Report +

+
+ + + + + + + + + + + + + {{#each lines context=context}} + + + + + + + + + + + + {{/each}} + + + + + + +
+ Cycle + + Patient + + Doctor + + HD Fee + + RC.No + + Nurse +
+ {{cycle}} +
+ + + {{patient}} + + {{doctor}} + + {{total}} + + {{rc_no}} + + {{nurse}} +
diff --git a/netforce_clinic/templates/report_hd_report.hbs b/netforce_clinic/templates/report_hd_report.hbs index 7cf8355..343f8eb 100644 --- a/netforce_clinic/templates/report_hd_report.hbs +++ b/netforce_clinic/templates/report_hd_report.hbs @@ -1 +1,63 @@ -

Cycle {{cycle}}

+
+

+ HD Case Report +

+
+ + + + + + + + + + + + + {{#each lines context=context}} + + + + + + + + + + + + {{/each}} + + + + + + +
+ Cycle + + Patient + + Doctor + + HD Fee + + RC.No + + Nurse +
+ {{cycle}} +
+ + + {{patient}} + + {{doctor}} + + {{total}} + + {{rc_no}} + + {{nurse}} +