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 0000000..42fcc4e Binary files /dev/null and b/netforce_clinic/reports/dialyzer_drop.xlsx differ diff --git a/netforce_clinic/reports/hd_report.xlsx b/netforce_clinic/reports/hd_report.xlsx new file mode 100644 index 0000000..26528a1 Binary files /dev/null and b/netforce_clinic/reports/hd_report.xlsx differ diff --git a/netforce_clinic/reports/round.odt b/netforce_clinic/reports/round.odt index 1aee725..a17141b 100644 Binary files a/netforce_clinic/reports/round.odt and b/netforce_clinic/reports/round.odt differ diff --git a/netforce_clinic/templates/report_dialyzer_drop.hbs b/netforce_clinic/templates/report_dialyzer_drop.hbs new file mode 100644 index 0000000..a990eac --- /dev/null +++ b/netforce_clinic/templates/report_dialyzer_drop.hbs @@ -0,0 +1,58 @@ +
+

+ 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}} +