From 0c2b6adc278279a385c26824811d42dd691ef812 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Sun, 31 May 2015 14:14:32 +0700 Subject: [PATCH 01/22] share location --- .../actions/clinic_share_location.xml | 6 + .../layouts/clinic_patient_form.xml | 5 +- .../layouts/clinic_share_location.xml | 20 ++++ netforce_clinic/models/__init__.py | 1 + netforce_clinic/models/patient.py | 7 +- netforce_clinic/models/share_location.py | 107 ++++++++++++++++++ 6 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 netforce_clinic/actions/clinic_share_location.xml create mode 100644 netforce_clinic/layouts/clinic_share_location.xml create mode 100644 netforce_clinic/models/share_location.py diff --git a/netforce_clinic/actions/clinic_share_location.xml b/netforce_clinic/actions/clinic_share_location.xml new file mode 100644 index 0000000..ba67009 --- /dev/null +++ b/netforce_clinic/actions/clinic_share_location.xml @@ -0,0 +1,6 @@ + + Share Location + form_popup + clinic.share.location + _popup + diff --git a/netforce_clinic/layouts/clinic_patient_form.xml b/netforce_clinic/layouts/clinic_patient_form.xml index fabca02..7549ce7 100644 --- a/netforce_clinic/layouts/clinic_patient_form.xml +++ b/netforce_clinic/layouts/clinic_patient_form.xml @@ -2,7 +2,7 @@ @@ -17,6 +17,7 @@ + @@ -95,6 +96,7 @@ --> + diff --git a/netforce_clinic/layouts/clinic_share_location.xml b/netforce_clinic/layouts/clinic_share_location.xml new file mode 100644 index 0000000..8da396c --- /dev/null +++ b/netforce_clinic/layouts/clinic_share_location.xml @@ -0,0 +1,20 @@ +
+ + + + + + + + diff --git a/netforce_clinic/layouts/clinic_share_location.xml b/netforce_clinic/layouts/clinic_share_location.xml index 8da396c..8b38a02 100644 --- a/netforce_clinic/layouts/clinic_share_location.xml +++ b/netforce_clinic/layouts/clinic_share_location.xml @@ -1,14 +1,5 @@ -
+ - diff --git a/netforce_clinic/models/share_location.py b/netforce_clinic/models/share_location.py index dc0e50c..555624d 100644 --- a/netforce_clinic/models/share_location.py +++ b/netforce_clinic/models/share_location.py @@ -11,7 +11,7 @@ class ShareLocation(Model): _fields={ 'patient_id': fields.Many2One("clinic.patient","Patient",required=True), 'location': fields.Char("Location"), - "loc_select": fields.Selection([],"Departments"), + "loc_select": fields.Selection([],"Select Location"), } def get_location_user(self,patient_id=None,patient_only=False): From 157454f03b4006e5cdd0f98086d351aecfb59556 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Sun, 31 May 2015 22:13:58 +0700 Subject: [PATCH 04/22] xxx --- netforce_clinic/layouts/clinic_patient_form.xml | 2 +- netforce_clinic/layouts/clinic_share_location.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/netforce_clinic/layouts/clinic_patient_form.xml b/netforce_clinic/layouts/clinic_patient_form.xml index 088af69..aa70254 100644 --- a/netforce_clinic/layouts/clinic_patient_form.xml +++ b/netforce_clinic/layouts/clinic_patient_form.xml @@ -2,7 +2,7 @@ diff --git a/netforce_clinic/layouts/clinic_share_location.xml b/netforce_clinic/layouts/clinic_share_location.xml index 8b38a02..776114e 100644 --- a/netforce_clinic/layouts/clinic_share_location.xml +++ b/netforce_clinic/layouts/clinic_share_location.xml @@ -1,4 +1,4 @@ - + From 1a61b83116814dab39ea1c08791760b1ef0f2b93 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Wed, 3 Jun 2015 11:39:08 +0700 Subject: [PATCH 05/22] improvement --- netforce_clinic/layouts/clinic_staff_form.xml | 14 ---------- netforce_clinic/models/cycle_item_line.py | 4 +++ netforce_clinic/models/hd_case.py | 2 -- netforce_clinic/models/labor_cost.py | 1 - netforce_clinic/models/labor_cost_line.py | 2 +- netforce_clinic/models/patient.py | 2 +- netforce_clinic/models/staff.py | 27 +++++-------------- netforce_clinic/templates/clinic_page.hbs | 6 ----- 8 files changed, 13 insertions(+), 45 deletions(-) diff --git a/netforce_clinic/layouts/clinic_staff_form.xml b/netforce_clinic/layouts/clinic_staff_form.xml index 30411c6..75073c1 100644 --- a/netforce_clinic/layouts/clinic_staff_form.xml +++ b/netforce_clinic/layouts/clinic_staff_form.xml @@ -85,20 +85,6 @@ - - - - - - - - - - - - - - diff --git a/netforce_clinic/models/cycle_item_line.py b/netforce_clinic/models/cycle_item_line.py index 729899a..d838077 100644 --- a/netforce_clinic/models/cycle_item_line.py +++ b/netforce_clinic/models/cycle_item_line.py @@ -1,4 +1,5 @@ from netforce.model import Model, fields +from netforce.access import get_active_user, set_active_user class CycleItemLine(Model): _name="clinic.cycle.item.line" @@ -6,6 +7,8 @@ class CycleItemLine(Model): def _get_all(self,ids,context={}): res={} + user_id=get_active_user() + set_active_user(1) for obj in self.browse(ids): citem=obj.cycle_item_id pt_total=len([hdcase for hdcase in citem.hd_cases if hdcase.state in ('waiting_payment','paid')]) @@ -13,6 +16,7 @@ class CycleItemLine(Model): 'cstate': citem.state, 'pt_total': pt_total, } + set_active_user(user_id) return res _fields={ diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index 35a64b8..f8ba59c 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -1458,8 +1458,6 @@ class HDCase(Model): vals=self.get_hct(vals,patient_id) new_id=super().create(vals,**kw) self.function_store([new_id]) - #obj=self.browse(new_id) - #self.check_hct(obj) return new_id def check_hct(self,obj): diff --git a/netforce_clinic/models/labor_cost.py b/netforce_clinic/models/labor_cost.py index b55bce8..61a8f69 100644 --- a/netforce_clinic/models/labor_cost.py +++ b/netforce_clinic/models/labor_cost.py @@ -410,7 +410,6 @@ class LaborCost(Model): doctor_lines.append(('create',line)) else: nurse_lines.append(('create',line)) - obj.write({ 'doctor_lines': doctor_lines, 'nurse_lines': nurse_lines, diff --git a/netforce_clinic/models/labor_cost_line.py b/netforce_clinic/models/labor_cost_line.py index 4907889..cba0634 100644 --- a/netforce_clinic/models/labor_cost_line.py +++ b/netforce_clinic/models/labor_cost_line.py @@ -31,7 +31,7 @@ class LaborCostLine(Model): _fields={ "labor_cost_id": fields.Many2One("clinic.labor.cost","Labor Cost",required=True,on_delete="cascade"), - "type": fields.Selection([('staff','Staff'),("doctor","Doctor"),('nurse','Nurse')],"Staff Type",required=True,search=True,function="_get_store",function_multi=True), + "type": fields.Selection([('staff','Staff'),("doctor","Doctor"),('nurse','Nurse')],"Staff Type",required=True,search=True,function="_get_store",function_multi=True,store=True), 'staff_id': fields.Many2One("clinic.staff", "Staff",search=True), 'level_id': fields.Many2One("clinic.staff.level", "Level",search=True), 'cycle_id': fields.Many2One("clinic.cycle", "Cycle",search=True), diff --git a/netforce_clinic/models/patient.py b/netforce_clinic/models/patient.py index becc123..e05be52 100644 --- a/netforce_clinic/models/patient.py +++ b/netforce_clinic/models/patient.py @@ -175,7 +175,7 @@ class Patient(Model): "vascular_acc": fields.Many2One("clinic.vascular.access","Vascular Ac."), 'state': fields.Selection([['admit','Admit'],['dispose','Dispose']],'State'), 'walkin': fields.Selection([['yes','Yes'],['no','No']],"Walkin"), - 'department_names': fields.Text("Departments",function="_get_department_names"), + #'department_names': fields.Text("Departments",function="_get_department_names"), 'location': fields.Char("Location"), #to filter } diff --git a/netforce_clinic/models/staff.py b/netforce_clinic/models/staff.py index dd5c08e..57b4196 100644 --- a/netforce_clinic/models/staff.py +++ b/netforce_clinic/models/staff.py @@ -99,8 +99,12 @@ class Staff(Model): def _get_location(self,ids,context={}): res={} + user_id=get_active_user() + set_active_user(1) for obj in self.browse(ids): - res[obj.id]=",".join([d.code for d in obj.departments]) + st_codes=set([d.code for d in obj.departments]) + res[obj.id]=",".join([dcode for dcode in sorted(st_codes)]) + set_active_user(user_id) return res def _get_department_names(self,ids,context={}): @@ -108,26 +112,11 @@ class Staff(Model): user_id=get_active_user() set_active_user(1) for obj in self.browse(ids): - res[obj.id]=','.join([dpt.name for dpt in obj.departments]) + dpt_st=set([dpt.name for dpt in obj.departments]) + res[obj.id]=','.join([dpt_name for dpt_name in sorted(dpt_st)]) set_active_user(user_id) return res - def _get_all(self,ids,context={}): - res={} - for obj in self.browse(ids): - pt_ids=[] - if obj.type=='doctor': - pt_ids=get_model("clinic.patient").search([['doctor_id','=',obj.id]]) - elif obj.type=='nurse': - p=set() - for cline in obj.cycle_item_lines: - citem=cline.cycle_item_id - for hdcase in citem.hd_cases: - p.update({hdcase.patient_id.id}) - pt_ids=list(p) - res[obj.id]=pt_ids - return res - _fields={ 'employee_id': fields.Many2One("hr.employee","Employee"), "number": fields.Char("Number",required=True,search=True), @@ -154,8 +143,6 @@ class Staff(Model): "prof_license_expiry" : fields.Date("Expired License"), "birthday": fields.Date("BirthDay",search=True), "department_id": fields.Many2One("clinic.department", "Department",search=True), - #"patients": fields.One2Many("clinic.patient","doctor_id","Patients"), - "patients": fields.Many2Many("clinic.patient","Patients",function="_get_all"), "addresses": fields.One2Many("address","staff_id","Addresses"), "comments": fields.One2Many("message","related_id","Comments"), "nurse_visits": fields.One2Many("clinic.visit","nurse_id","Visits"), diff --git a/netforce_clinic/templates/clinic_page.hbs b/netforce_clinic/templates/clinic_page.hbs index 2d53b83..c4ce238 100644 --- a/netforce_clinic/templates/clinic_page.hbs +++ b/netforce_clinic/templates/clinic_page.hbs @@ -75,12 +75,6 @@ - -

{{t "HD Cases"}}

From a1be6b9bccffc6903207390b71e3fdcd9f256277 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Fri, 12 Jun 2015 06:42:08 +0700 Subject: [PATCH 06/22] fix --- netforce_clinic/models/patient_cycle.py | 1 + netforce_clinic/models/visit_popup_confirm.py | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/netforce_clinic/models/patient_cycle.py b/netforce_clinic/models/patient_cycle.py index 85886df..9e11139 100644 --- a/netforce_clinic/models/patient_cycle.py +++ b/netforce_clinic/models/patient_cycle.py @@ -3,6 +3,7 @@ from netforce.model import Model, fields class PatientCycle(Model): _name="clinic.patient.cycle" _string="Patient Cycle" + _audit_log=True _fields={ "patient_id": fields.Many2One('clinic.patient',"Patient",required=True,on_delete="cascade",search=True,domain=[['state','=','admit']]), diff --git a/netforce_clinic/models/visit_popup_confirm.py b/netforce_clinic/models/visit_popup_confirm.py index f1ea43d..950bdf7 100644 --- a/netforce_clinic/models/visit_popup_confirm.py +++ b/netforce_clinic/models/visit_popup_confirm.py @@ -87,13 +87,18 @@ class VisitPopupConfirm(Model): obj=self.browse(ids)[0] board=obj.visitboard_id count=0 + + user_id=get_active_user() + nurse_ids=get_model("clinic.staff").search([['user_id','=',user_id],['type','=','nurse']]) + vals={} + if nurse_ids: + vals['nurse_id']=nurse_ids[0] for line in obj.lines: vs=line.visit_id dt=line.doctor_id if dt: - vs.write({ - 'doctor_id': dt.id, - }) + vals['doctor_id']=dt.id + vs.write(vals) vs.confirm() count+=1 return { From 0c9ef4b33ed6e5e89cd86ad5ba14c08d4da17c94 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Fri, 12 Jun 2015 10:35:33 +0700 Subject: [PATCH 07/22] add report cycle setting --- .../actions/clinic_report_cycle_setting.xml | 8 + netforce_clinic/layouts/clinic_menu.xml | 1 + .../layouts/clinic_report_cycle_setting.xml | 5 + netforce_clinic/models/__init__.py | 1 + .../models/report_cycle_setting.py | 154 ++++++++++++++++++ .../reports/report_cycle_setting.xlsx | Bin 0 -> 6735 bytes .../templates/report_cycle_setting.hbs | 41 +++++ netforce_clinic/todo.txt | 15 +- 8 files changed, 212 insertions(+), 13 deletions(-) create mode 100644 netforce_clinic/actions/clinic_report_cycle_setting.xml create mode 100644 netforce_clinic/layouts/clinic_report_cycle_setting.xml create mode 100644 netforce_clinic/models/report_cycle_setting.py create mode 100644 netforce_clinic/reports/report_cycle_setting.xlsx create mode 100644 netforce_clinic/templates/report_cycle_setting.hbs diff --git a/netforce_clinic/actions/clinic_report_cycle_setting.xml b/netforce_clinic/actions/clinic_report_cycle_setting.xml new file mode 100644 index 0000000..e205637 --- /dev/null +++ b/netforce_clinic/actions/clinic_report_cycle_setting.xml @@ -0,0 +1,8 @@ + + Report Cycle Setting + report + clinic.report.cycle.setting + report_cycle_setting + report_cycle_setting + clinic_menu + diff --git a/netforce_clinic/layouts/clinic_menu.xml b/netforce_clinic/layouts/clinic_menu.xml index 42b66db..6f37415 100644 --- a/netforce_clinic/layouts/clinic_menu.xml +++ b/netforce_clinic/layouts/clinic_menu.xml @@ -45,6 +45,7 @@ + diff --git a/netforce_clinic/layouts/clinic_report_cycle_setting.xml b/netforce_clinic/layouts/clinic_report_cycle_setting.xml new file mode 100644 index 0000000..d5d2505 --- /dev/null +++ b/netforce_clinic/layouts/clinic_report_cycle_setting.xml @@ -0,0 +1,5 @@ +
+ + + + diff --git a/netforce_clinic/models/__init__.py b/netforce_clinic/models/__init__.py index 2b18ad9..4e65f51 100644 --- a/netforce_clinic/models/__init__.py +++ b/netforce_clinic/models/__init__.py @@ -136,5 +136,6 @@ from . import num2word from . import province from . import change_visit from . import share_location +from . import report_cycle_setting #from . import district #from . import subdistrict diff --git a/netforce_clinic/models/report_cycle_setting.py b/netforce_clinic/models/report_cycle_setting.py new file mode 100644 index 0000000..b9e1e99 --- /dev/null +++ b/netforce_clinic/models/report_cycle_setting.py @@ -0,0 +1,154 @@ +from netforce.model import Model, fields, get_model + +class ReportCycleSetting(Model): + _name="clinic.report.cycle.setting" + _transient=True + + _fields={ + 'department_id': fields.Many2One("clinic.department","Department"), + 'branch_id': fields.Many2One("clinic.branch","Branch"), + 'cycle_id': fields.Many2One("clinic.cycle","Cycle"), + } + + def _get_branch(self,context={}): + res=get_model('select.company').get_select() + if res: + return res['branch_id'] + + def _get_department(self,context={}): + res=get_model('select.company').get_select() + if res: + if res.get("department_ids"): + return res['department_ids'][0] + else: + return res['department_id'] + + def default_get(self,field_names=None,context={},**kw): + defaults=context.get("defaults",{}) + branch_id=defaults.get('branch_id') + if branch_id: + branch_id=int(branch_id) + else: + branch_id=self._get_branch(context=context) + + department_id=defaults.get('department_id') + if department_id: + department_id=int(department_id) + else: + department_id=self._get_department(context=context) + res={ + 'branch_id': branch_id, + 'department_id': department_id, + } + print('report.cycle.item.setting', res) + return res + + def get_report_data(self,ids,context={}): + defaults=self.default_get(context=context) + department_id=defaults.get('department_id',None) + branch_id=defaults.get('branch_id',None) + cycle_id=defaults.get('cycle_id',None) + if ids: + obj=self.browse(ids)[0] + department_id=obj.department_id.id + branch_id=obj.branch_id.id + cycle_id=obj.cycle_id.id + pts={} + dom=[] + dom.append(['patient_id.state','=','admit']) + if department_id: + dom.append(['department_id','=',department_id]) + if cycle_id: + dom.append(['cycle_id','=',cycle_id]) + pcs=get_model("clinic.patient.cycle").search_browse(dom) + if not pcs: + # Create patient cycle with that department + for pt in get_model("clinic.patient").search_browse([['department_id','=',department_id]]): + if pt.walkin=='yes': + continue + for pc in pt.cycles: + vals={ + 'patient_id': pt.id, + 'department_id': pt.department_id.id, + 'cycle_id': pc.cycle_id.id, + 'day': pc.day, + } + res=get_model("clinic.patient.cycle").search([[ + ['patient_id','=',pt.id], + ['day','=',pc.day], + ['cycle_id','=',pc.cycle_id.id], + ['department_id','=', pt.department_id.id], + ]]) + if not res: + pcycle_id=get_model("clinic.patient.cycle").create(vals) + print("create ", pcycle_id) + else: + print("exist ", res) + pcs=get_model("clinic.patient.cycle").search_browse(dom) + if not pcs: + raise Exception("Please go to menu 'Patients -> Patient Cycles' and import data for %s"%(department_id)) + for pc in pcs: + patient=pc.patient_id + dpt=pc.department_id + branch=dpt.branch_id + if not branch: + continue + if branch_id and branch_id!=branch.id: + continue + key=(patient.id,dpt.id) + if not pts.get(key): + pts[key]={ + 'patient_name': patient.name, + 'department_name': dpt.name, + 'mon_cycle_id': None, + 'tue_cycle_id': None, + 'wed_cycle_id': None, + 'thu_cycle_id': None, + 'fri_cycle_id': None, + 'sat_cycle_id': None, + 'sun_cycle_id': None, + } + cycle=pc.cycle_id + day=pc.day or '' + if day=='mon': + pts[key]['mon_cycle_id']=cycle.name + elif day=='tue': + pts[key]['tue_cycle_id']=cycle.name + elif day=='wed': + pts[key]['wed_cycle_id']=cycle.name + elif day=='thu': + pts[key]['thu_cycle_id']=cycle.name + elif day=='fri': + pts[key]['fri_cycle_id']=cycle.name + elif day=='sat': + pts[key]['sat_cycle_id']=cycle.name + else: + pts[key]['sun_cycle_id']=cycle.name + + lines=[] + no=1 + for k, vals in pts.items(): + pt_id, dpt_id=k + if pt_id: + vals['patient_id']=pt_id + if not dpt_id: + pt=get_model("clinic.patient").browse(pt_id) + dpt_id=pt.department_id.id + if dpt_id: + vals['department_id']=dpt_id + vals['no']=no + lines.append(vals) + no+=1 + + data={ + 'lines': lines, + 'department_id': department_id, + } + return data + + def onchange_branch(self,context={}): + data=context['data'] + data['department_id']=None + return data + +ReportCycleSetting.register() diff --git a/netforce_clinic/reports/report_cycle_setting.xlsx b/netforce_clinic/reports/report_cycle_setting.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2a18e2acef84046bc48775dd2bb1835f3bf82b6b GIT binary patch literal 6735 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%0A6q)#wkTa|1!g^RWOVG-st5rP)*8-e z*HVF}N~-?|OX%=xZFbGw&D-A1+Y%n&Vee%@*k-*+eXG?W4(j^2XO!BgneBQfx@HP9 zTX_D#AZ^Ojg-QN7(Sfy=J;Tc|8gtKLF)F@2bjwD(bN>O>xtfa0WJ5>-+;tI9)KukW zaW`r~Cm6g~ZBRc=mKW>Hexo2>!dye6AyU_14j|KP60i!NH!|yq{6= zkVxpg_PS55D_=TMgucsc1jaYdqonm*T`$R^g_5?KRw#Vbi2?d>TISo`^bHM-i7|aw zK#pfvqGd|#7;rm`mzAl+4Kz@JKmdZ|{e;0*{h9!NY8Ogo5w`A84r`g?A!kEQjcM%B z+h%{4+(viWoy%RXtx6g0)F<@3R957WCL^^kJ`+9NM!w;WdNdlu-g_dW=$YKe s56_=s{8`3-9sF~Y5-PzD`^xZ_bwOW?49`o5h=BN`A0IVtOoX%l0=uAJ=l}o! literal 0 HcmV?d00001 diff --git a/netforce_clinic/templates/report_cycle_setting.hbs b/netforce_clinic/templates/report_cycle_setting.hbs new file mode 100644 index 0000000..b7b58ae --- /dev/null +++ b/netforce_clinic/templates/report_cycle_setting.hbs @@ -0,0 +1,41 @@ + + + + + + {{#unless department_id}} + + {{/unless}} + + + + + + + + + + {{#each lines }} + + + + {{#unless ../department_id}} + + {{/unless}} + + + + + + + + + {{/each}} + + + +
#PatientDepartmentMondayTuesdayWednesdayThursdayFridaySaturdaySunday
{{no}} + {{view "link" string=patient_name action="clinic_patient" action_options="mode=form" active_id=patient_id}} + {{department_name}}{{mon_cycle_id}}{{tue_cycle_id}}{{wed_cycle_id}}{{thu_cycle_id}}{{fri_cycle_id}}{{sat_cycle_id}}{{sun_cycle_id}}
diff --git a/netforce_clinic/todo.txt b/netforce_clinic/todo.txt index 3ab75b6..610a64a 100644 --- a/netforce_clinic/todo.txt +++ b/netforce_clinic/todo.txt @@ -1,13 +1,2 @@ -> script: - - merge - - staff -> ok - - patient - -> explain nurse - กรณีแก้ไขรายชื่อหมอให้ดูรายชื่อแพทย์ให้ดี - -> note: - แก้ไขยาก หากมาเจอข้อผิดพลาดบางครั้ง - -> report K. boy - total qty of report_labor_cost_staff is not the same report_labor_cost +- show log for each model that use _log=True +- create report patient cycle setting -> link to patient to change cycle setting From 593ffd6248cdd58c8119a4171ecc9fe89d5fab4f Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Fri, 12 Jun 2015 10:43:38 +0700 Subject: [PATCH 08/22] xx --- netforce_clinic/models/report_cycle_setting.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netforce_clinic/models/report_cycle_setting.py b/netforce_clinic/models/report_cycle_setting.py index b9e1e99..5dd0c52 100644 --- a/netforce_clinic/models/report_cycle_setting.py +++ b/netforce_clinic/models/report_cycle_setting.py @@ -95,6 +95,8 @@ class ReportCycleSetting(Model): continue if branch_id and branch_id!=branch.id: continue + if patient.resign_date: + continue key=(patient.id,dpt.id) if not pts.get(key): pts[key]={ From e86640ea4208e85cda4bf17e17d467d1db510443 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Fri, 12 Jun 2015 11:32:37 +0700 Subject: [PATCH 09/22] xxx --- netforce_clinic/models/report_cycle_setting.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/netforce_clinic/models/report_cycle_setting.py b/netforce_clinic/models/report_cycle_setting.py index 5dd0c52..f35239a 100644 --- a/netforce_clinic/models/report_cycle_setting.py +++ b/netforce_clinic/models/report_cycle_setting.py @@ -128,7 +128,6 @@ class ReportCycleSetting(Model): pts[key]['sun_cycle_id']=cycle.name lines=[] - no=1 for k, vals in pts.items(): pt_id, dpt_id=k if pt_id: @@ -138,12 +137,17 @@ class ReportCycleSetting(Model): dpt_id=pt.department_id.id if dpt_id: vals['department_id']=dpt_id - vals['no']=no lines.append(vals) - no+=1 + no=1 + nlines=[] + for line in sorted(lines,key=lambda x:x['patient_name']): + line['no']=no + nlines.append(line) + no+=1 + data={ - 'lines': lines, + 'lines': nlines, 'department_id': department_id, } return data From e5467144d19d8143f878b050559806c39cc3e209 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Fri, 12 Jun 2015 14:22:00 +0700 Subject: [PATCH 10/22] improve report --- netforce_clinic/models/report_cycle_setting.py | 3 +++ netforce_clinic/templates/report_cycle_setting.hbs | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/netforce_clinic/models/report_cycle_setting.py b/netforce_clinic/models/report_cycle_setting.py index f35239a..4c85f42 100644 --- a/netforce_clinic/models/report_cycle_setting.py +++ b/netforce_clinic/models/report_cycle_setting.py @@ -99,7 +99,10 @@ class ReportCycleSetting(Model): continue key=(patient.id,dpt.id) if not pts.get(key): + login=patient.w_uid.login pts[key]={ + 'w_time': patient.w_time, + 'w_uid': login, 'patient_name': patient.name, 'department_name': dpt.name, 'mon_cycle_id': None, diff --git a/netforce_clinic/templates/report_cycle_setting.hbs b/netforce_clinic/templates/report_cycle_setting.hbs index b7b58ae..6f8b970 100644 --- a/netforce_clinic/templates/report_cycle_setting.hbs +++ b/netforce_clinic/templates/report_cycle_setting.hbs @@ -5,6 +5,8 @@ # Patient + Last Update + Update By {{#unless department_id}} Department {{/unless}} @@ -23,6 +25,8 @@ {{view "link" string=patient_name action="clinic_patient" action_options="mode=form" active_id=patient_id}} + {{w_time}} + {{w_uid}} {{#unless ../department_id}} {{department_name}} {{/unless}} From 2c3f578cc611095095326e07ac0e889706a43369 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Fri, 12 Jun 2015 14:38:26 +0700 Subject: [PATCH 11/22] improve report --- netforce_clinic/models/patient.py | 5 ++++- netforce_clinic/models/report_cycle_setting.py | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/netforce_clinic/models/patient.py b/netforce_clinic/models/patient.py index e05be52..5a2958d 100644 --- a/netforce_clinic/models/patient.py +++ b/netforce_clinic/models/patient.py @@ -177,6 +177,8 @@ class Patient(Model): 'walkin': fields.Selection([['yes','Yes'],['no','No']],"Walkin"), #'department_names': fields.Text("Departments",function="_get_department_names"), 'location': fields.Char("Location"), #to filter + 'cw_time': fields.DateTime("Cycle Updated"), + 'cw_uid': fields.Many2One("base.user"," Cycle Edit"), } def _get_number(self,context={}): @@ -354,8 +356,9 @@ class Patient(Model): ['manual','=',False], ] visit_ids=get_model("clinic.visit").search(vdom) - print('removing visit .. ', len(visit_ids)) get_model("clinic.visit").delete(visit_ids) + vals['cw_time']=time.strftime("%Y-%m-%d %H:%M:%S") + vals['cw_uid']=get_active_user() if 'type_id' in vals.keys(): #update patient in hd case which state is condition below diff --git a/netforce_clinic/models/report_cycle_setting.py b/netforce_clinic/models/report_cycle_setting.py index 4c85f42..1929938 100644 --- a/netforce_clinic/models/report_cycle_setting.py +++ b/netforce_clinic/models/report_cycle_setting.py @@ -99,9 +99,11 @@ class ReportCycleSetting(Model): continue key=(patient.id,dpt.id) if not pts.get(key): - login=patient.w_uid.login + login='' + if patient.cw_uid: + login=patient.cw_uid.login pts[key]={ - 'w_time': patient.w_time, + 'w_time': patient.cw_time, 'w_uid': login, 'patient_name': patient.name, 'department_name': dpt.name, From 776859f7bf172528a02d072482189bd138bc269f Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Wed, 17 Jun 2015 22:27:15 +0700 Subject: [PATCH 12/22] improve report pdf --- netforce_clinic/models/report_cycle_item.py | 21 ++++++++++++------ .../models/report_hd_case_summary.py | 5 ++++- .../reports/report_cycle_item.xlsx | Bin 7613 -> 5745 bytes .../reports/report_hd_case_summary.xlsx | Bin 5995 -> 6452 bytes .../templates/report_cycle_item.hbs | 9 +------- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/netforce_clinic/models/report_cycle_item.py b/netforce_clinic/models/report_cycle_item.py index 0566d07..a2793f3 100644 --- a/netforce_clinic/models/report_cycle_item.py +++ b/netforce_clinic/models/report_cycle_item.py @@ -24,9 +24,10 @@ class ReportCycleItem(Model): def default_get(self,field_names=None,context={},**kw): defaults=context.get("defaults",{}) date=defaults.get('date',time.strftime("%Y-%m-%d")) - year,month=time.strftime("%Y-%m").split("-") - date_from=defaults.get('date_from','%s-%s-01'%(year,month)) - date_to=defaults.get('date_to','%s-%s-01'%(year,month)) + #year,month=time.strftime("%Y-%m").split("-") + datenow=time.strftime("%Y-%m-%d") + date_from=defaults.get('date_from',datenow) + date_to=defaults.get('date_to',datenow) branch_id=defaults.get('branch_id') if branch_id: branch_id=int(branch_id) @@ -63,6 +64,7 @@ class ReportCycleItem(Model): branch_id=defaults.get("branch_id") department_id=defaults.get("department_id") ptype_id=defaults.get("ptype_id") + print('date_from ', date_from) month=date_from.split("-")[1] cycle_id=None if ids: @@ -122,9 +124,14 @@ class ReportCycleItem(Model): dpt=hdcase.department_id dlz_use=hdcase.dlz_use or 0 dlz_drop=False - if dlz_use==hdcase.dlz_max: - dlz_use="%sทิ้ง"%dlz_use - dlz_drop=True + #if dlz_use==hdcase.dlz_max: + #dlz_use="%sทิ้ง"%dlz_use + #dlz_drop=True + for dlz_line in hdcase.dialyzers: + dlz=dlz_line.dialyzer_id + if dlz.state in ('drop','expire'): + dlz_use="%sทิ้ง"%dlz_use + dlz_drop=True cancel=False row_color='' if hdcase.state not in ('paid', 'waiting_payment'): @@ -146,7 +153,7 @@ class ReportCycleItem(Model): 'date': hdcase.date, 'epo': hdcase.epo, 'mdc': hdcase.mdc, - 'mdc_name': hdcase.mdc_name, + 'mdc_name': hdcase.mdc_name or hdcase.epo, 'fee': abs(hdcase.fee), 'dlz_name': hdcase.dlz_name, 'dlz_use': dlz_use, diff --git a/netforce_clinic/models/report_hd_case_summary.py b/netforce_clinic/models/report_hd_case_summary.py index 0bc4396..33e74a0 100644 --- a/netforce_clinic/models/report_hd_case_summary.py +++ b/netforce_clinic/models/report_hd_case_summary.py @@ -4,7 +4,7 @@ import urllib.parse as urllib from datetime import datetime from calendar import monthrange from netforce.model import Model, fields, get_model -from netforce.access import get_active_company +from netforce.access import get_active_company, get_active_user from . import utils @@ -271,7 +271,10 @@ class ReportHDCaseSummary(Model): plines=medicals['plines'] prod_titles=medicals['prod_titles'] date_print=time.strftime("%m/%d/%Y %H:%M:%S") + user_id=get_active_user() + user=get_model('base.user').browse(user_id) data={ + 'user_name': user.name, 'hdcase_type': hdcase_type, 'branch_id': branch_id, 'department_id': department_id, diff --git a/netforce_clinic/reports/report_cycle_item.xlsx b/netforce_clinic/reports/report_cycle_item.xlsx index 47be46a0d2cde3ce0490afb4a5dd864666c8e7c3..827ebd24bbd8b539f4215a62812a8a70abe4c013 100644 GIT binary patch delta 5084 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 literal 7613 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 Ak^lez diff --git a/netforce_clinic/reports/report_hd_case_summary.xlsx b/netforce_clinic/reports/report_hd_case_summary.xlsx index 511bf475eae827339544a325e9c2f228571c0854..2882d3a1a471c6367d2941ee11eda99ccb01d136 100644 GIT binary patch delta 5493 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 DEpi9| diff --git a/netforce_clinic/templates/report_cycle_item.hbs b/netforce_clinic/templates/report_cycle_item.hbs index cae8a03..3094f61 100644 --- a/netforce_clinic/templates/report_cycle_item.hbs +++ b/netforce_clinic/templates/report_cycle_item.hbs @@ -1,7 +1,7 @@

{{company_name}}

- ระหว่างวันที่ {{date_from}} ถึง {{date_to}} + รายชื่อผู้ป่วยระหว่างวันที่ {{date_from}} ถึง {{date_to}}

@@ -12,14 +12,10 @@ - - {{#each lines }} @@ -53,9 +49,6 @@ - From 7071d8d5c87fc129da8833c7d440f0fe2725f885 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Wed, 17 Jun 2015 22:42:42 +0700 Subject: [PATCH 13/22] xxxx --- .../reports/report_cycle_item.xlsx | Bin 5745 -> 5737 bytes .../reports/report_hd_case_summary.xlsx | Bin 6452 -> 6448 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/netforce_clinic/reports/report_cycle_item.xlsx b/netforce_clinic/reports/report_cycle_item.xlsx index 827ebd24bbd8b539f4215a62812a8a70abe4c013..dedff2db6ee5cb10292a457cd215cc3822527f56 100644 GIT binary patch delta 1681 zcmV;C25$NBEa@x^P)h>@6aWYa2mtVWu?!ah0`PpZB>@=$0`PpZKmu6-0`PpZn*$gD z0`PpZwFH0y0`Pp3HwPeO~+# zn?^}No`4kRaBRN9()=*_ZFIood%1;>8jK(>$L5yO;>xnh)fQ%dpd8===4@t-Nd_nz zl8sds1cF4|l%Kl$(;_iu?)(Ua!##&hToN!JJAG0#iVl{Bnzm(wvOM3XjBC zqm)AO2`5bU8l)v;a|PJICrG~*VxB(ZM`oy}t;xu$Zk~)1#8%*5F$i3b&1>iCqvLak zK>Uf|p;WGo1IiPBe0U_7!W9+1l$=Jn#fJsk!7c^mk@1$G}te>;cJ1$TS_c*a#KOan0M9!fRyNFB>tjq-01DmK?dk`t@fb<7qb zr&tnHo?w2zgWRi3m^+Bg`kop$8L_>W;+uOR1x3mIT={;Bk_5IP&%h5x!+udNeoOkw zy~Ov661p9eT?rt69Z@G*ikYqwp(8W z!}FNgF6$UNcAso#5Hz_K2A-&BS%RW2XMlpqh~R@kgs9bjuB14V)!HshMRK_v2@+iw zd}YM)NqGQuq6MJOsxxfl>QzNX(Fx3q+-7wb;3*B(5 z8}4+&QZZP}H;sebw;aSDcmJ`2T%p5L9OP&Ysu7KYbi+(H%yq*;H{9xmJKeBU3`Y*~ zF6*GBCv@0<9UcCK1LX@Hz7i-`3se{39V4b)gnx{fbrHcaV%|lB$B0E25gj9LyNLK0 zaVHUhf*2knmR*FSmG;N(GESS^N5Kp(9L%6fDn*$V&1G;R@4^d94ZBjcv|5HIq(&E( z8g->=`F$fHp$gFwd@3Q43ehrrCLys3(NcUaAwv~^qUHFaheb>B+b+b_lKid*qCLTv z-5t4Fwtehj@%l?8zHm_EPEcJfsB;N%?Do$iK9P~b3yU9i#p}=0VMqM%gm`}Xx~O__ z+~WtlM%ztoQcqN_Rvyy|6uwnLHIesL5!E37tupFm(hI2%)G4K2kX}qZo9k3lFVTs5 za^5_D68|4jb-GCzozQma)2QQiwZ$j2UHBk)?Z}g$qaHb2EzfRRQ2RdNbxX#x^>Xm) zQd2-D4lB-ukDfPRYUCd8_Y!F*G6-_{Uz*C6GSjYjz1;6y2z>S&@3*!r>EN(SwD_V{9 zXpJ$Iqrh=uJ7_-js!aN>FbYsW@`Qdu*&0xqfNMlb%3FP(ci9V+@8+V<`mK7euZB&3 zv&}R(?E?`a5`4&?w=jQTduO>s5ZgMC-P8gTN&up!u`A&t_dFys*}H2!{E~vz_v<|Q zwnen*>KX|FN}qJaf;Yt(Zy%Su)tN&zIHMFZ5$5Jv)yalULx1uQP)i30;~QbZ(ggqj6c_*iP)h>@ z6aWYa2mtVWvsVp-0|M}Tv)vHX0Rr%Rv$GO)0Rr%RlPVN90`Pp3V-!3B@O+b@6g>j) ze3Rf5Mgs7BlPDEH4e)%?M&lb{!qNo*02GsT6*&U%e3P&h905a<%@rI1@O+c&6&wM{ blL!_b0`Pp3C>9(6pOZxvCI%D~00000MwlGZ delta 1735 zcmYk-c|6pKAII_UILBlhV-77bsFZPp3^LB#gPDe0V=APzGGpBoCiiWuaUYR0CN?Xr zokVhl$?>2xBn_5OVK%J_?T^Rfw~zh&^ZeueczphSt*URSixcsJLT~^K1_M6Pt>P$< zfKPPW3DD6)%>+CSEfbVIv|Z?y!2fopz9@$7K@OcUkd2+c%-cF&8L_oz0SSYF#Y!Fw zon4K%HV;=fbDjC4uNaaS8#6KgFE6w5}RV4=lY z!3q5BSG#=NcNJ`QUIGqudX)DnCb{m5H-FZjG4y+gppu@f`K6ra(7OI)zk(4c$Bb_H zM3}=JhA_p65q2+KJ*2>}VCO>57HX=i2$5!=a)ghOk7~ET8}yD)MMBl=zz!fk{s>gf zK2!&0goF7elORJj53}A0F9yBti>BT-;R#E|fTH>@syPUrS(mWaoBrj7Mv&g{hVsS0=Aq-N zuBOw5WtpWuRz$0W{yilBu8#LdGA!xLLY})%6h~${%Ao&l2DS$0=<;Z{cboZuq35jtOBwXsnMvq0+q*@M7S`KL zb3c`m2t=L-gcBFza((wth3d%@IQce43N~Bza#>d2~B0oA^BO(f_9Y&Uw4M>r^lDZU1qo;?) zQx#H;E`es#jP! zH#db3tF0{8XVCk;+qhQHE?C<0={&PfBfBD8wod78w)wLe|wXy zvBUkw=#(;=`30;?J6SE%C*+9OHZWg7ls{JE6-OYpx`(AWF0PW@8j3Y#!x9TY!dA%Xs>;z@R?Y2g6M!Q;&m z>F#c8(0X>U(Musr)=!~+dToO?pLIx_G?8izO8EQBUn0wroJd!^koI(Zc|Ee2C?KVmO%+p&UQ#L<;!@;zMR4_Q z%JR@OwEDTrv@MvpT#GO4JUzOz)3H=DDi0a{L(^+)?4H@Z(hf$rkLL&sm8R|)kFoXI;Pgwu^ zlu1Px9t?L8@;E#c0HOl5Lc^j1{X#XPsDVU0NB|D}zd#e#FRg+nE(Jt0{^{< WJfy$69_RM`J6E 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 delta 2088 zcmYk7c{~%0AIHZqGDSFY&FhJix zxW*{^))qgQ@8Ss)O{+O(7kXQ_=UR#06y^t1S#Qhjs!WlXTGt)PFnhwEFzJ+U5aLpi z7bz^O`koY`Ik|>Ddl@?`a=N;~|GspgZ#3II%jXJ5PqlBFMLSc2Hh4a{;)u52pYS$W zea~yAsCV?Gzwh?A6?TVOaB5(S7!0TAbR;PzXu6&&^yLs_adFrxnJBjb|lko^`=!Kq$fN7s(&R4sqD`wthf@{7>03wsBcCy-wpT%P|h;-f@LN@?mvaL{_T_vts+;iXLF1DhDo(+;qW7C9L|Pj% zfYF-Lst@~qoYS_O5KsJM#+T7RPI%<#K>^}Q8sh)tKCs>T7sa}toig57$ zu64zsFHV()uii2T9Ze>JEw z*v-)?dY$cSJM{FD6@!!WG4aIf8a2DN7`)?i?M1BnXPUmowi9e5yUMVGtGWh36`gNj zq~4aIL`GjCewSz~F%3}%o>R!-u-wET`c+xv3m|CCfXV(NiIsJ`MvSC2p0B4C&_Ds( z#c~$AxZ33zL^k(JiyYP1_8D1g8Tr%(+p8Sy{BHjcBuzwLk4kO?>-czT0!yX)2is&C zwojd5Ne0fG=M#*CD2Vijkl$9c=ZQA?M*_ZTwA*)2?=g9v4tJz5>iuW$l5@d5zMd*T zdj)JbDIY$$TPh>B8Hci%PO99Trkm)rhOig@*B<=p?Yj1{N<4X0o43ie`Rt4{{Ol}z znWn1_Xi5y*KD_?=k-2?KE2l`GtaRYTwVEAjrOvE3t6EU~uw3v>C#e2$Q9CshLnO)n7B04~*A9zXakBk>&4=jaW zM-tLx|6t|T0RoVwl%CbUXr1zrQhzdXhR_p2mIUs@5pVzozGkx9p4K1O$stA8Cb z6Xu#fdsos@>{5`s=gkHG!jtxLuHOn;Er*xSHHPxCaeX%lc^`st#JpKt)6Xw6lIkD! zn5kJ;n3}0Yn^YQ6Hr8F$qOE@>7pd9rcvzUrBI!DCHH9%0F*f<}QjGl4x~|Rr`eOc> zd_uO&mx)3Il{?5pSAKEhh^1SK2%Gx0h9war4 z?(_p&mUwYxW@*6AVj(-!k9qw@gSl&?nFZ8c)C|s&AwmlRC9LE8DhcGtS|J!_@O z)3YjYUCCl&Z(130{6QT}i8R>gs#5kyZKqM4J11qKy)&t+eE8owf z4|0>o5mQcE3sqqlPwL%-H8x;nqd7Jnsn^Yb(w~|X4)@LZJ|~2H2vq$ijmTGN9xM9t zAnl>Ls_lCgV~uq>T|(XI#fntTZYVF!YeCf(fSov}M755h@) zgzU=0+EL|ZY zFyj0JZ+{u@b-8c>sh=Sx0;tMc2;eD?5`Zp`7GPf9Qc5m%0R8`?R70q#U~mlz7n-A{ sLg9kq>CfUGwG( Date: Fri, 19 Jun 2015 16:35:29 +0700 Subject: [PATCH 14/22] fix --- .../layouts/clinic_patient_form.xml | 2 +- .../clinic_report_labor_cost_daily.xml | 3 ++- netforce_clinic/models/patient.py | 12 ++++++++++- .../models/report_labor_cost_daily.py | 7 +++++++ .../models/report_labor_cost_detail.py | 17 ++++++++++----- .../models/report_labor_cost_summary.py | 21 ++++++++++++------- .../templates/report_labor_cost_detail.hbs | 10 ++++++++- .../templates/report_labor_cost_summary.hbs | 4 ++-- 8 files changed, 58 insertions(+), 18 deletions(-) diff --git a/netforce_clinic/layouts/clinic_patient_form.xml b/netforce_clinic/layouts/clinic_patient_form.xml index aa70254..6c7d2ae 100644 --- a/netforce_clinic/layouts/clinic_patient_form.xml +++ b/netforce_clinic/layouts/clinic_patient_form.xml @@ -15,7 +15,7 @@ - + diff --git a/netforce_clinic/layouts/clinic_report_labor_cost_daily.xml b/netforce_clinic/layouts/clinic_report_labor_cost_daily.xml index 6647b90..0971e59 100644 --- a/netforce_clinic/layouts/clinic_report_labor_cost_daily.xml +++ b/netforce_clinic/layouts/clinic_report_labor_cost_daily.xml @@ -2,5 +2,6 @@ - + + diff --git a/netforce_clinic/models/patient.py b/netforce_clinic/models/patient.py index 5a2958d..f047da4 100644 --- a/netforce_clinic/models/patient.py +++ b/netforce_clinic/models/patient.py @@ -351,7 +351,7 @@ class Patient(Model): datenow=time.strftime("%Y-%m-%d") vdom=[ ['patient_id','in',ids], - ['visit_date','>',datenow], + ['visit_date','>=',datenow], ['state','=','pending'], ['manual','=',False], ] @@ -564,4 +564,14 @@ class Patient(Model): return data + def onchange_walkin(self,context={}): + data=context['data'] + if data['walkin']=='yes': + res=get_model('clinic.staff').search([['number','=','walkin'],['type','=','doctor']]) + if res: + data['doctor_id']=res[0] + else: + data['doctor_id']=None + return data + Patient.register() diff --git a/netforce_clinic/models/report_labor_cost_daily.py b/netforce_clinic/models/report_labor_cost_daily.py index adc7a4f..4e101e6 100644 --- a/netforce_clinic/models/report_labor_cost_daily.py +++ b/netforce_clinic/models/report_labor_cost_daily.py @@ -13,6 +13,7 @@ class ReportLaborCostDaily(Model): "staff_type": fields.Selection([["doctor","Doctor"],["nurse","Nurse"],["staff","Staff"]],"Type"), 'staff_id': fields.Many2One("clinic.staff","Staff"), 'department_id': fields.Many2One("clinic.department",'Department'), + 'branch_id': fields.Many2One("clinic.branch","Branch"), } def default_get(self,field_names=None,context={},**kw): @@ -21,11 +22,13 @@ class ReportLaborCostDaily(Model): staff_type=defaults.get("staff_type","doctor") staff_id=int(defaults.get('staff_id', "0")) department_id=int(defaults.get('department_id', "0")) + branch_id=int(defaults.get('branch_id', "0")) res={ 'date': date, 'staff_type': staff_type, 'staff_id': staff_id and staff_id or None, 'department_id': department_id and department_id or None, + 'branch_id': branch_id and branch_id or None, } print("res ", res) return res @@ -37,6 +40,7 @@ class ReportLaborCostDaily(Model): date=defaults.get("date") staff_id=defaults.get("staff_id") staff_type=defaults.get("staff_type") + branch_id=defaults.get("branch_id") dpt_id=defaults.get("department_id") dom=[] if ids: @@ -44,6 +48,7 @@ class ReportLaborCostDaily(Model): date=obj.date staff_id=obj.staff_id.id staff_type=obj.staff_type + branch_id=obj.branch_id.id dpt_id=obj.department_id.id dom.append(['date','>=',date]) dom.append(['date','<=',date]) @@ -55,6 +60,8 @@ class ReportLaborCostDaily(Model): dom.append(['staff_id','=',staff_id]) if staff_type: dom.append(['type','=',staff_type]) + if branch_id: + dom.append(['labor_cost_id.cycle_item_id.branch_id','=',branch_id]) if dpt_id: dom.append(['labor_cost_id.cycle_item_id.department_id','=',dpt_id]) print('dom ', dom) diff --git a/netforce_clinic/models/report_labor_cost_detail.py b/netforce_clinic/models/report_labor_cost_detail.py index 8c549f2..58acb1c 100644 --- a/netforce_clinic/models/report_labor_cost_detail.py +++ b/netforce_clinic/models/report_labor_cost_detail.py @@ -128,9 +128,10 @@ class ReportLaborCostDetail(Model): qty=0 if staff.type=='doctor': for hdcase in citem.hd_cases: - doctor_id=hdcase.doctor_id.id - if staff.id==doctor_id: - qty+=1 + if hdcase.state in ('waiting_payment','paid'): + doctor_id=hdcase.doctor_id.id + if staff.id==doctor_id: + qty+=1 elif staff.type=='nurse': qty=citem.pt_total or 0 # qty of patient else: @@ -141,6 +142,7 @@ class ReportLaborCostDetail(Model): 'staff_id': staff.id, 'staff_name': staff.name or "", 'staff_type': staff.type, + 'department_id': department_id, dpt.name: { 'amt': 0, 'qty': 0, @@ -153,6 +155,7 @@ class ReportLaborCostDetail(Model): 'staff_id': staff.id, 'staff_name': staff.name or '', 'staff_type': staff.type, + 'department_id': department_id, dpt.name: { 'amt': 0, 'qty': 0, @@ -199,7 +202,8 @@ class ReportLaborCostDetail(Model): 'date': kdate, 'staff_type': vals.get("staff_type"), 'staff_id': vals.get("staff_id"), - 'labor_cost_id': vals.get("labor_cost_id") + 'labor_cost_id': vals.get("labor_cost_id"), + 'department_id': vals.get('department_id'), } total_qty, total_amt=0, 0 lvals['sub_lines']=[] @@ -229,6 +233,8 @@ class ReportLaborCostDetail(Model): # summary as footer dpt_lines=[{'qty': 0, 'amt': 0} for dpt in dpts] for line in lines: + line['branch_id']=branch_id + line['department_id']=department_id i=0 for sub_line in line['sub_lines']: dpt_lines[i]['qty']+=sub_line['qty'] or 0 @@ -271,7 +277,8 @@ class ReportLaborCostDetail(Model): 'dpt_lines': dpt_lines, 'show_all': show_count <=1 and True or False, } - print('.... ', data['show_name']) + print('department_id ', department_id) + print('branch_id ', branch_id) return data def onchange_date(self,context={}): diff --git a/netforce_clinic/models/report_labor_cost_summary.py b/netforce_clinic/models/report_labor_cost_summary.py index f51030e..79343b5 100644 --- a/netforce_clinic/models/report_labor_cost_summary.py +++ b/netforce_clinic/models/report_labor_cost_summary.py @@ -142,8 +142,9 @@ class ReportLaborCostSummary(Model): if staff.level_id: level=get_model("clinic.staff.level").browse(staff.level_id.id) level_name=level.name or "" - if not staffs.get(staff.name): - staffs[staff.name]={ + staff_name='%s %s'%(staff.first_name, staff.last_name) + if not staffs.get(staff_name): + staffs[staff_name]={ 'number': staff.number or '', 'first_name': staff.first_name or "", 'staff_id': staff.id, @@ -156,14 +157,14 @@ class ReportLaborCostSummary(Model): 'qty': qty, }, } - if not staffs[staff.name].get(dpt.name): - staffs[staff.name].update({ + if not staffs[staff_name].get(dpt.name): + staffs[staff_name].update({ dpt.name: { 'amt': 0, 'qty': qty, }}) - staffs[staff.name][dpt.name]['amt']+=amt - staffs[staff.name][dpt.name]['qty']+=qty + staffs[staff_name][dpt.name]['amt']+=amt + staffs[staff_name][dpt.name]['qty']+=qty if not citems.get(citem.id): qty=0 @@ -252,7 +253,13 @@ class ReportLaborCostSummary(Model): # run no nlines=[] no=1 - for line in sorted(lines, key=lambda x: (x['staff_name'],x['first_name'])): + sort_key='staff_name' + if staff_type=='nurse' and categ_id: + categ=get_model('clinic.staff.categ').browse(categ_id) + if categ.name in ("FT","HP"): + sort_key='number' + + for line in sorted(lines, key=lambda x: (x[sort_key])): line['no']=no nlines.append(line) no+=1 diff --git a/netforce_clinic/templates/report_labor_cost_detail.hbs b/netforce_clinic/templates/report_labor_cost_detail.hbs index 3f6ac8e..9ad3efe 100644 --- a/netforce_clinic/templates/report_labor_cost_detail.hbs +++ b/netforce_clinic/templates/report_labor_cost_detail.hbs @@ -79,7 +79,15 @@ {{/each}} diff --git a/netforce_clinic/templates/report_labor_cost_summary.hbs b/netforce_clinic/templates/report_labor_cost_summary.hbs index 13b5365..0399f71 100644 --- a/netforce_clinic/templates/report_labor_cost_summary.hbs +++ b/netforce_clinic/templates/report_labor_cost_summary.hbs @@ -19,8 +19,8 @@ - {{#ifeq staff_type "nurse"}} + @@ -38,8 +38,8 @@ {{#each lines }} From b4296e54a3db8bfe899f7b8a0c7c70a59c201052 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Fri, 19 Jun 2015 21:31:45 +0700 Subject: [PATCH 15/22] fix --- .../actions/clinic_period_line.xml | 11 ++++++ .../layouts/clinic_period_line_form.xml | 12 ++++++ .../layouts/clinic_period_line_list.xml | 6 +++ .../layouts/clinic_report_labor_cost.xml | 1 + netforce_clinic/models/period_line.py | 39 ++++++++++++++++--- netforce_clinic/models/report_labor_cost.py | 1 + .../models/report_labor_cost_sub_detail.py | 2 + .../templates/report_labor_cost_summary.hbs | 2 + 8 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 netforce_clinic/actions/clinic_period_line.xml create mode 100644 netforce_clinic/layouts/clinic_period_line_form.xml create mode 100644 netforce_clinic/layouts/clinic_period_line_list.xml diff --git a/netforce_clinic/actions/clinic_period_line.xml b/netforce_clinic/actions/clinic_period_line.xml new file mode 100644 index 0000000..cc4e151 --- /dev/null +++ b/netforce_clinic/actions/clinic_period_line.xml @@ -0,0 +1,11 @@ + + Period Line + multi_view + clinic.period.line + account_menu + [ + ["All",[]], + ["Open",[["state","=","open"]]], + ["Close",[["state","=","close"]]] + ] + diff --git a/netforce_clinic/layouts/clinic_period_line_form.xml b/netforce_clinic/layouts/clinic_period_line_form.xml new file mode 100644 index 0000000..ef7f899 --- /dev/null +++ b/netforce_clinic/layouts/clinic_period_line_form.xml @@ -0,0 +1,12 @@ +
+ + + + + + + +
{{else}} + {{/ifeq}} {{#each dpts}} @@ -46,6 +47,7 @@ From a881dfadda68366b787f9d1780366b703da65ddd Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Sat, 20 Jun 2015 17:01:37 +0700 Subject: [PATCH 16/22] fix --- .../layouts/clinic_period_form.xml | 6 +-- .../layouts/clinic_report_labor_cost.xml | 4 +- netforce_clinic/models/period.py | 11 ++++- netforce_clinic/models/period_line.py | 9 ++-- netforce_clinic/models/report_labor_cost.py | 40 ++++++++++++++++++ netforce_clinic/models/setting.py | 24 ++++------- .../reports/report_labor_cost.xlsx | Bin 6941 -> 6817 bytes 7 files changed, 69 insertions(+), 25 deletions(-) diff --git a/netforce_clinic/layouts/clinic_period_form.xml b/netforce_clinic/layouts/clinic_period_form.xml index 656c2e0..d2d7a2f 100644 --- a/netforce_clinic/layouts/clinic_period_form.xml +++ b/netforce_clinic/layouts/clinic_period_form.xml @@ -1,7 +1,7 @@ @@ -15,11 +15,11 @@ - + - {{/each}} From e710105b26d3625ae2cfbfcb485cb0a832413353 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Sun, 21 Jun 2015 22:38:33 +0700 Subject: [PATCH 18/22] reports --- .../models/report_labor_cost_detail.py | 46 +++++++++++++++--- .../models/report_labor_cost_sub_detail.py | 9 ++-- .../models/report_labor_cost_summary.py | 6 +-- .../reports/report_labor_cost_detail.xlsx | Bin 6786 -> 7418 bytes .../reports/report_labor_cost_sub_detail.xlsx | Bin 6828 -> 7105 bytes .../reports/report_labor_cost_summary.xlsx | Bin 7370 -> 7380 bytes .../templates/report_labor_cost_detail.hbs | 10 +++- 7 files changed, 55 insertions(+), 16 deletions(-) diff --git a/netforce_clinic/models/report_labor_cost_detail.py b/netforce_clinic/models/report_labor_cost_detail.py index 58acb1c..4c0638a 100644 --- a/netforce_clinic/models/report_labor_cost_detail.py +++ b/netforce_clinic/models/report_labor_cost_detail.py @@ -108,12 +108,8 @@ class ReportLaborCostDetail(Model): dom.append(['cycle_id','=',cycle_id]) if categ_id: dom.append(['staff_id.categ_id','=',categ_id]) - print('dom ', dom) def replace_quote(dom=""): return dom.replace("'","\"") - #prevent to load more data - #if not staff_id: - #return {} dates={} for line in get_model("clinic.labor.cost.line").search_browse(dom): lcost=line.labor_cost_id @@ -122,8 +118,7 @@ class ReportLaborCostDetail(Model): if not date: continue dpt=citem.department_id - #amt=line.pay_amount or 0 #XXX - amt=line.amount or 0 #XXX + amt=line.amount or 0 staff=line.staff_id qty=0 if staff.type=='doctor': @@ -277,8 +272,43 @@ class ReportLaborCostDetail(Model): 'dpt_lines': dpt_lines, 'show_all': show_count <=1 and True or False, } - print('department_id ', department_id) - print('branch_id ', branch_id) + data['dpts_txt']=[{0: '#', 1: 'วันที่'}] + vals={} + no=0 + dpt_len=len(data['dpts_txt'][0]) + for dpt in dpts: + data['dpts_txt'][0][no+dpt_len]=dpt['name'] + vals[no]=0 + no+=1 + count=1 + items=[] + def int2ths(r): + if type(r)==type(''): + return r + if not r: + return "" + return "{0:,.2f}".format(r) + for i in range(len(data['lines'])): + line=data['lines'][i] + item_vals=vals.copy() + item_vals['no']=count + item_vals['date']=line['date'] + no=0 + for sub_line in line['sub_lines']: + item_vals['item%s_qty'%no]=int2ths(sub_line['qty']) + item_vals['item%s_amt'%no]=int2ths(sub_line['amt']) + no+=1 + item_vals['total_qty']=int2ths(line['total_qty']) + item_vals['total_amt']=int2ths(line['total_amt']) + items.append(item_vals) + count+=1 + data['items']=items + data['total_lines_txt']=[{}] + no=0 + for tline in data['dpt_lines']: + data['total_lines_txt'][0]['item%s_qty'%no]=int2ths(tline['qty']) + data['total_lines_txt'][0]['item%s_amt'%no]=int2ths(tline['amt']) + no+=1 return data def onchange_date(self,context={}): diff --git a/netforce_clinic/models/report_labor_cost_sub_detail.py b/netforce_clinic/models/report_labor_cost_sub_detail.py index 7b648e1..9e0d5b9 100644 --- a/netforce_clinic/models/report_labor_cost_sub_detail.py +++ b/netforce_clinic/models/report_labor_cost_sub_detail.py @@ -38,10 +38,10 @@ class ReportLaborCostSubDetail(Model): date_to=self._get_date_to() staff_type=defaults.get("staff_type","doctor") staff_id=int(defaults.get('staff_id', "0")) - department_id=defaults.get('department_id') + department_id=defaults.get('department_id',None) if department_id: department_id=int(department_id) - branch_id=defaults.get('branch_id') + branch_id=defaults.get('branch_id',None) if branch_id: branch_id=int(branch_id) if not branch_id and department_id: @@ -56,6 +56,7 @@ class ReportLaborCostSubDetail(Model): 'department_id': department_id, 'branch_id': branch_id, } + print('res ', res) return res def get_report_data(self,ids,context={}): @@ -66,8 +67,8 @@ class ReportLaborCostSubDetail(Model): date_to=defaults.get("date_to") staff_type=defaults.get("staff_type") staff_id=defaults.get("staff_id") - branch_id=defaults.get("branch_id") - department_id=defaults.get("department_id") + branch_id=defaults.get("branch_id",None) + department_id=defaults.get("department_id",None) staff_name='' dom=[] if ids: diff --git a/netforce_clinic/models/report_labor_cost_summary.py b/netforce_clinic/models/report_labor_cost_summary.py index c3d2cad..d34bc66 100644 --- a/netforce_clinic/models/report_labor_cost_summary.py +++ b/netforce_clinic/models/report_labor_cost_summary.py @@ -120,8 +120,6 @@ class ReportLaborCostSummary(Model): if type(r)==type(''): return r return "{0:,.0f}".format(r) - - print('--> dom: ', dom) total_hdcase=0 for line in get_model("clinic.labor.cost.line").search_browse(dom): lcost=line.labor_cost_id @@ -283,8 +281,10 @@ class ReportLaborCostSummary(Model): 'staff_type': staff_type, 'branch_id': branch_id, 'department_id': department_id, - 'dpts_txt': [{0: '#', 1: 'รหัส', 2: 'ชื่อ-สกุล',}], } + + # for report xlsx + data['dpts_txt']=[{0: '#', 1: 'รหัส', 2: 'ชื่อ-สกุล',}] items=[] vals={} no=0 diff --git a/netforce_clinic/reports/report_labor_cost_detail.xlsx b/netforce_clinic/reports/report_labor_cost_detail.xlsx index fccee4c3670d3682766e493383c5479b015a1f5c..c16264f08d85ecd40d929dca80485b5e4f435c67 100644 GIT binary patch literal 7418 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 literal 6786 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 R3=Bf_ryKpQyrR0g`XA`Vbvgh5 diff --git a/netforce_clinic/reports/report_labor_cost_sub_detail.xlsx b/netforce_clinic/reports/report_labor_cost_sub_detail.xlsx index ea852c3f316fea001dc14b3676ab138c7a626ca7..24cfb0a426097f988d56a9ff4b299d04d8724a26 100644 GIT binary patch literal 7105 zcmeHMXH=8jvZhKGq*pO<~ z2m;as6cG;i-E;JKzvH^U?yoahYbRMNGuiuD^UOQ*Y%MihJZdaLLPD%sqGjg9OPDgrEfbOKC>k` zVOKMOCXBT^3{0h$%nO+tBCKbvkztM|X1Hh8Ylo3f59bhb-{SNmj=~;QKHX4?@Ln;+ zQIZ;6g61U(9PuatMP6Rf99Go5o5QHl0^p^koucy&v(eZIl}!kENwXKxk7MQonG1Y#AJ^^Y8x&7>e^>SUX#3 zxjDPI11(%!1brMGvPK5a(V@m)Xx0=8bK;J=4Y>WffM=;RCuYUEZQl6;a3{P<7_ zf4a8+Rd9lP#e~3|m~C%YHz*O=2gX%UwtD5t=Dh4aom`Ydtkghn&PK;$&Ar`eA5SC< zlxKxeXd zTT7yjk!HTEz^8sXu~!~4l@q+iZ@RRbn1qH|$eDiHQbs*ujVr&WjGQVz6d&lfSeF=t zAWL-R6|Nh3&+NZjcF4LX)9xhH{+v9?>;f7WwTA<<=Ld&l{|TBazd~c>>;}KU#_@rP za|atWYWs+f@srWbL2+;lozcswBu=}!&G-?ts{Rce#KC-p-qy?#OT^LQVjF;tVAck? zqhP3e4Mvd?{Gd+1=;??}^8l+hZ62r=Q65apaxDkHm9Nn1ji1jxCOCok7A8jB{LNhi zQ@#~FK?A8X^44eL?1zQUl~j91qCwnYGgf5UZ`p}6!y1_4)}B3kU*aJ%e>ntZ ziBJfQ!X67*G7}FOUtA5o*1%pHtxO;>swVj+B1frmqcJbzGGbo7i?sq+w)nI`c)g5+ z%`}_I;!S9zmThxT*7GKg?Xlty2b8-+x#&#U73-EFcO_c~;cxuAt@~gfn9;DzmG}DA zM2tr|bHrnt$IkD~_Xh1Ed&)&Y)9ne4}z6VJhC)t> zh%9#G*bO}FC~#-` z4DZHlnK$cPGxBIP@M^P>-_c0sY_T_RP7ZlQ^LY?vV#{nHECLgx-FmD!7Z4$31S^@& znkxcbeht~m%*P5Z=Si8#*>usc-j{TYy}BdH9j;|Q&Er`vjRoB_@oUIS=Mj|o?hscm z)^R4;#EeNil`#0C^cr}9yrSaJwB&h;hW#-`>Hk9hB01d=aJYv%@W-3Tk7{`r;>;vL z(R>7@kX?Ce2UWEudaW9K4GO{Tq2w>d_RCL2!#a$IP%E&izyOr-mh#Ni=#Oj5u zGbHjimycA@+?5)+hP&$=?@86;bsmpJ2l`H&)~yWqS`>^R%)6en?jvI5G!9oog_??8G3YTgK@ zfehkUX9a%5A|L=-I<@Obdwo-YFXhl&KEI%bB$p+zf|gq{=uAhsHLy*NLE5`|D5?Lw zCl}2f!e=0ou4psOP#M279T%^BF&Vz=yD#h4t{pw-p-pI@95(7}8SVIPee#Oew~RFL z-Sn#E%bxv92i!}MeL`L*WVFc8yTwU+E#VzUiKfitIRMGtCmoxN6@b3Q2I;&{S2(Ei zMsKX#+#T^c8lwIx9+aC#C=Tp+{IAQl;@bA zqk>Jx75PPz0#Vp$lgzpO$>Rftp?S7zyDfyamg$NKFTkS2m$N0}XmGVgFSqd4nJhtG zNAknZ@1ud-FTadYOl?@(})> zzwMJlEM(B`swzmvGDw6yl90l28G~r1iN+h3oFF)DpR3_z@VR04K;D$;Ypq@j>s57_ zklpLdl!kU*bpTy@-_5X@7LAuw+Ga%=u<|d{JH5|ugmU)4!u^!v>eZdD2dbCmkEZcEHFerCOj*pu>74&A!SXK}wdf{F|@Exp{Z z&VOob`x=XiV%qwY)sii|>)=L*X=SzbiN@4npzH?g1?e!29e%*`Qup%GpUT~TAf51k zN%vpU{g-tAzoZkoAYGTiw9~RUMZh+c&~Ks`(`X=J>j8$B6IkQMPtbG;Q4zOL>t)^hAb-br+ zo_%ZqhlZ#R5lpvAvbtLQ9=Is79V){_#3oKIH#52GaB*j&6HKsFYyXB@4;hIBWX?fQE+5GD7bG6)+d* z+byb`th`t&1HREq^5(m>dK*g*=7Mt#>r&mzT70B52^AAd=}C)8_GhG;JRH~aWKTJK zhLNptasbN4Rx7;)10DgfqV{@^Kzs&0h9!dTc?R%vaBw@X!Cj{9_4{|w!#Pwb1+6=D zHZ@|P>Peg<`^;!sot$EVOa+(B&lOGOikB3wn(lF@*J2TAXg?$ZV|Qp{CcG2-I`|6~ z7;e7NK^ZLaC*!0k@dun?owSL>K~?u7=;3TntfrgynLNLa@P@Z20c&*p-j!9yWb*{1 zaz)wq?>*%&*x^iKfuccVco-IpgTB+5v6v|pY zre1CPs*}qJP7lDyD-I+R+mHlAFJU1?H~1=sUI;yFmTtFb_lJ{fG%}oA2YkO>1&o&q zQ2-~%bzCfY7mLj@r(9BTgYI|vW4wdr-0_h^$*P^2&W<8OY0J=ZFQFyj3H!1g$>w$& zql6bep-cB3RcRqU+R-c)rC0gpBYGE84w(rC_1?nJ0bFXsA zmgHlrIt;FD@xCr<>BBzz*E-I;02&Jp(gV~tdes+s4gMe6-}{@I`7Ha+O)i0zhe^XKD(Sa~NOE^%RO7yig9W`!kiZY3;Lm(9?+H>Ku|hw7 zSw!CH>QPRza++CacGYy(JMl}9xQj|N)w>^G)-v=#pWylxvB!ZCJYqs`w`K5+tOm>P zXS+1kPaTwYJbT!^O)h> zOWfB9`DYo(Yg05o(0zb%o8>GcHNXqVE4KF8L^VO%uL)ctO1NAHT~Im>)7&9!b~%KF zVXL&vjBF~2iGJQ*u&T(yso;^ViO)>axt)|5E%Q!8B42HBmZdD+nmD67GDUN1ZmeHB zj|5i%@K2~q+%z;>dE6qXK5wR`8~d$m%^=4g#4N!@9d3GriqYy(+kXxt48!Znyylk$ zu?Q>atVG?|L+S^&D7zMjR`y8SN)Xd(%MFQZedx^qkA& zPC{rn4H?Ur64J0%9gYiU7_^;9q%MXBk6EgaNau3c0Osg@053X%d9zvYH<2Zbgp`84 zp+({Z^j4_w7WGx_d=+!HCNn~6)2DpT6XB!jpYZ!=8J|Ho`1xru0m4_pW(B{*zMY*a zdX|dKL+<2i5T&kCQY@|{U50oC@ZK6Thdxow%1{zpEYf`^<|AW?YEI+s++;RtPBT>p z7SWBxOx_tlw5qkHC6ncx&t4m6A%Q=fMfp6^{I_l7J(N3GsN8!!kr|Wg*&K!u0is z!}9xQbem$QexqQZ%)($`Avh~7^}WIfq< z<%wZ!IQh}R9~hLdZ=a9M0H!}Nh5YB({7+3MP6y&V4I*vchSE0zPgS%y6f*M=+BFeg zucm5kVR=?!)z&KNGoQv2^p^x*MO$+3ZpiIDfMvDTaZTovPfhBqB&%~E3U#NPRCo7x zk2j1tg4=jOLzaL!P~`r>qr2NDb#6`>pgEL|sN$?JB-EiY9OTLZ8+tobe{=H~!YG}P zb1PJ(92~Us&rF|s8YpROVjl(7_ynu*VB19m`5cd|2}T~2VlF+o974I)h(!2q zs)2M0Hjb)VzZKv#%zBO+n?y6J-=v*-acXoBl4Nj&{yHUo*jM(9IL<(A$t6{%SMAq! z3aZEh_d=N%oHNH;GdV%zZ)B`g74Ca)c84aVvcj*T?#SJu>0a1C*YzC~E>JaRO$3NO zsm()?`-o=^cTbRggxoGn`w(-B1Mgjeg|>0cLOy1SAR59>Qkf*@*4l2RupX7?gWiQW z7$X!{UzME9@p8qTg-O=bn(|UL!!abXW;%2s|8nLq zW%4xR6xX8Q&{pe_j)cM$W7iTO8Rtvp_-|JOQuG#Q)WHm?w%n;o~fxys2TD&jrl zK42BC-7tfn6Kl_MH!ohu7z}PiX=pFvO12pKZtAT-jr(&v@-b}1%e&!k=kB-&CA_{p z&?nQKE0!og-EH(vfpg{hEwySD%?Bo}M3iVs-Y|?EjntDF$^EF*Z7_IpT+0zR%QZOB zEID?ZRNtx{gvhyh5M&@ r(fn%z|19IbJO7%c7nR_rSg)KZh6#i{$*(f1Wi9KhFFQ0G2b% literal 6828 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 diff --git a/netforce_clinic/reports/report_labor_cost_summary.xlsx b/netforce_clinic/reports/report_labor_cost_summary.xlsx index 1d4e98674604819939e2c17345743d2a3796b850..9a173518aaece54abfa82fbadf0151f49057c5df 100644 GIT binary patch delta 2994 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 K0rXYuAmV=+^fy@m delta 2937 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 diff --git a/netforce_clinic/templates/report_labor_cost_detail.hbs b/netforce_clinic/templates/report_labor_cost_detail.hbs index 9ad3efe..559c288 100644 --- a/netforce_clinic/templates/report_labor_cost_detail.hbs +++ b/netforce_clinic/templates/report_labor_cost_detail.hbs @@ -10,7 +10,15 @@ {{/if}} + - - - - - + + + From 9cdb2c1510d526f60a7898bb107a731301bb0e24 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Mon, 22 Jun 2015 09:19:04 +0700 Subject: [PATCH 20/22] fix --- .../models/report_labor_cost_daily.py | 2 ++ .../reports/report_labor_cost_daily.xlsx | Bin 6941 -> 7051 bytes .../reports/report_labor_cost_summary.xlsx | Bin 7380 -> 7341 bytes 3 files changed, 2 insertions(+) diff --git a/netforce_clinic/models/report_labor_cost_daily.py b/netforce_clinic/models/report_labor_cost_daily.py index 4e101e6..d81098e 100644 --- a/netforce_clinic/models/report_labor_cost_daily.py +++ b/netforce_clinic/models/report_labor_cost_daily.py @@ -108,6 +108,7 @@ class ReportLaborCostDaily(Model): pt=hdcase.patient_id lines.append({ 'no': no, + 'hdcase_number': hdcase.number, 'cycle_item_name': citem.name or '', 'cycle_item_id': citem.id, 'date': citem.date, @@ -129,6 +130,7 @@ class ReportLaborCostDaily(Model): 'date': date, 'comp_name': comp.name or 0, 'lines': lines, + 'date': date, } return data diff --git a/netforce_clinic/reports/report_labor_cost_daily.xlsx b/netforce_clinic/reports/report_labor_cost_daily.xlsx index 87e827a13ea3dc59994dad94bf375c5f38283773..b63edc9640b8ed9052a30baa075228ee4255b022 100644 GIT binary patch literal 7051 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 literal 6941 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 N>IFyb6{%kf|37(c*Qo#i diff --git a/netforce_clinic/reports/report_labor_cost_summary.xlsx b/netforce_clinic/reports/report_labor_cost_summary.xlsx index 9a173518aaece54abfa82fbadf0151f49057c5df..8abc1cba27b79815f6783b9ce08c71df999a08a1 100644 GIT binary patch delta 2659 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 CXV35e delta 2768 zcmZ8jc{mh$7oM??v6Gmwj5S-b8)3#agl0^Obx1=)jGf7v$*!{1WG~ybWy!vjC41Le zC=ybU$QH?#(M8{LzkBcRk8|GV{hjkX=lt=W=PlQGt-*>lrKRHmFflO!3`lRPSb2f8 zhq*=)$oCuQ(hz=w$F!2a!3dowkerS{>lYflNww7(RT6qh`!ZU*;??FloxTANm!?P+ zlq*=oTUuN`rYkwA5#sumTKm}_oq?`@+qzAon})Sw2wHw)BXEliwO`A|P#!}{fcZxGSu)E)KuYfKbJH=xZ?Vcef#vnCZ5Cz`gf(A6` z;~Lv0wW2}EhD>n)!bfMu2Tpq`96}zk_4=GqbKGp!Z#6jxN#zAs+1Fsyhj&OpiJp8| zdFW`Hlt&hWh=Wk03?!`SHljuzVS^}Q>UqwTRZZ@3UWvTVk?p}$=w%v}GE$f#_|2tT z=})nwx;9naj}j&@ed%8CH{R@d_&bG1R>m3NU%KJ4w{oaq-Ju}=S|#K5PQkb|Up}?9 zrXiQEhf~@;?C=tnNH4~X*bR;}&GRPve_l*q0G-rwko4}e8^H5;1O43lp9-f@@BKkU zDkPBC>R}EW)`b&|ty~SIQYZJgv_9D`n3rwH2es|U#x&YdQq8WlN0|ZF8bz7yXj!!N z_yyJW{j zXk2=d$N~{hs9a z5?USSB1e0pC3@{zQxWKUs*Lk8mDsQXx@Bf7b8qEeA>3M+!8Z7Y!346u+~k$TCD~-E z*wevf(I+xKAQottjd_mJi6+XOX{WL#wP^RALSpA)s^db0skW0#RS@3fGFsoC zw7x?&MNwj(d?4QO@9xW+8ou$7sk9)6p=qywp3hQOx4cc11~y<&^kXuWE`ajOhBU&D ze4nSqpVgkLBmM}@UzIu@i@EIb)pD9lhF2q9+&epE836=A8FUDWBJVimG$7GQ^gugh zR)4#5vqASleFcFXHSyd+n}B>;=grC!lsp$m&%nq_>y}dw*;p!Sf zhdueye6vp0S_bxS5S-)AyJ_sL9oEkr#w)z=Rli9?mr?>HA?f3m2F3)%4CK zMQuO#iakdM83OTxSOClF|6vbmBBP4f{@r|OtV#{x3UH~&;T@=O%-$LU?s#r2G7QWB)Peq z;;~&3nn`j+jrhKgPAx>#RRkDcHI;Pgw?iuL=?6B@xd3Xlp@1= zII41LEk8+CB%3#HIw4shwWBFH}GR!t9)F|{^yTGEn z!kkr$6Ns2w!!^DX)0xZrU|k=ONpI*LjeF3(k5s&C%Z(0c<#Yn$!iEPZb{5~iESeqN za)TEB*hqQ+pp*B%w_KAOM%MM5gz>ekS;AIJAE_8m_Ikg$F{t8_QKFVCiPpqIUljAn z!Q7|pkqY&WMPDtPm%f%Efb0QUNQA=M_vwtsi zF$b9QGm9BMT0(1UCh#JG$G)3SHitj$VTaY@&4}4QVLhPx!CKwt$>RpL;^!9gtl&x~ z_@YMqOp2BLrf*YV9XV@N1SQi4bU=Hh0>WjE%HA*72nr`%%4%GUO<&RXiZ7|B>~m&= zF}fduIh~1FwAX<%6!s5n7to(F=2;}(rkK&`zSiM1VH%W!tLSiuiToIy@Ysc=xPtW> z9H%|qqPR@mz8*Z&Aitc;2E|oyP%2anbkj~r`Y{!lFR->235*RtpO%!KtEQ zVawn3a=w|^`9#Ux9rHVbJv)AtAd1H$DxXlQV9Pg#obyY@)C!VWbOOEZc3!-8UT?Z? zY{VJ`#XKdFvl%A$E-y@}l(3CIlIgta-^CKFXcjvW%wWmoy23$-v_ zNDpbt+b)ZD-bFoKN{QDbOyEE@7THqoY%D~7r4r7Np-!HCH3u!bFGUAKlvkcPQZO3z z(283rG4Dd%Tg!+|p$OkQvgRvB#-x^vHVE^8eUbFO>j8EogQ#w*cLI-+wlbl@ig-)o z>x_MSD0Ink5#A9_&m~xQRu77cC0R?1!6gM8Y4q0Jey^@V>YQB{&bn0!YGtp`fNK=Z z4UA5+=B Date: Mon, 22 Jun 2015 09:35:00 +0700 Subject: [PATCH 21/22] xxx --- .../reports/report_labor_cost_detail.xlsx | Bin 7418 -> 7418 bytes .../reports/report_labor_cost_sub_detail.xlsx | Bin 7105 -> 7130 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/netforce_clinic/reports/report_labor_cost_detail.xlsx b/netforce_clinic/reports/report_labor_cost_detail.xlsx index c16264f08d85ecd40d929dca80485b5e4f435c67..15b37d92d93964e34598272554605b11119847e8 100644 GIT binary patch delta 1752 zcmZ9NeLNHT9>+H`7I)<_Y^srmd8jid#B?}eI9n!m7O}IJ)uFn`nJEu#R*6j^*A@%q zbc)px$J1*i4{K+#3Ok2Gx}G)`l7~cW9Ol;Cd+zJrKfbTe`}O&Kzu(_~-_M%onkV!q z4y0`YfIuJsEt6Mu(49cgCvC6;ns32jt(Yx%0J75nr&qfVRPhkNc>oq#z-hG>2|xhA zUmF1UpG6Iqbdo`zH*qfM*l^@xCbsg(>vGI<`8kwPB8IOt3
    *2c(I(Ji*G;^{9m=brUg@2CzP^Im-0PZGcG*?S z1wZzjp53&1W_@UZ{esYzSpdsLbO%o6_r^ybUrpCFE=c)7hajjI*#NoU6;|IkrF}UF zY0Ipe7(D+Q7JvLsc4jY!)d zgY&!z{l|AqZNb--sMu2R{Rb({e3zj&YR|NGD#kzreJ$aZJ{5@Xarf|?_8yoR%eSzV zs&*30C3|V(ypEESiRR2-;$T7)etrNEE270WQ(KMR{mf;h0dIdGw^v0>xP4?ZKNy=) z$))xosUq=hAUQG1v=Yes2&iyd`Y~-EF>jp}WD-@i_&ldn*jd(%!PFTctwrM*(6n!F zQqJ1D;%*ro-2J7D_Tj}{gG}cs>i!c#zfkQNuD#s;E=7hkm3cBIL&w!WvF8ISWz-hL z0z-0su4dPh;n9Hu&ESSA$~-e=z1A#sge=ov-JW=IML#w~Y?-`DYZof732vepU956YG^9{t2pu*j=X$e|K>f9^tr{R0yY_B z*l0+|fxy_cdAu8J$3(v4hTtWM*n}ohxn$w7b7x)ASQg{hxwg~E+}lz2(KrW4DH>~5 zgJnmuT9+o9Q^HtM{gh03OE#FF-TJ%LSQ=D61WI5=`TMQ~vj_JYjW?d|+uuXs3Lf`G zlPaK-=-jpF9!g)}we5GkNy)sL-V^9tSqJ@72kMJtb6Y8HS3u4ZmNh*SSIr!aoDn|p zYFeIZJW_Ugs4{Iuzw%a@(@^E|y3+eN+Wr(`dBtlVYSd@BeEZ#%avfSP6P-J#slVVq z#%G1)@>OlUlwq^KPq)}F<|x|QK${c5)%=*zQDyvZK26pAsf;6te_nM6kuLnnT~y%w z99c916J>nrJSJm$$0U07hR@?yFA~>9r*5rZ^ND!-2FI*5N~&_F9qNK$rxWY~3OlxI zdE=^COy*Gf0v|h1*$Bwpww6WE8+SP3V3QZV46-q)4l#4~93g4dW8xJNxw>75nA>M~AyCC*de26ucUnJvnSSv&1B!52*o#vx;x&8LEgn z$wvhU8-4bnyhnA_xInEoJ*#vTvg5uvV=Ft5Fn3KTP+(pfEr%V_ z=qL;W`4kobpYw#{1V?Mk8aSMj2}k~${h*&4{`!@phI?vW(3Tz=J!iQ!Rc{&eFH*rS AzyJUM delta 1752 zcmZ9Ndpr|*AIGUOBPJtZ@`>_fgAM{-Tzl$DnY4Pj>28tRtw3*Ni`Ekud#$M;92UYMRCpf zWM+v;3V`yV#A814r6FJ0f%yuBDLll^!&QbB%j0ZNn1z@t>1nL31NU6cor2!bs*Jm0 z&l}$`-;5@=&!)D}3!n^mudAd~cs2OaN20Q70Vz)2>sdpm0k9~bu;g|)h=xTXsP%KB z$^C8sx3k^maI@*QG1JjD?Fk(fmggBv@LuFGhskmio37LK{I4vYAs-dg#&rlLXejzs zQ#m`b^1=wNR>KD_1hdy!2#%&^Esdd<~5 z3udfuq@7F2_edme>B*p^((3@4k3SwNC zQ%LJd)oSb|3=REsa)1?`uvK(I+@zm9rJ)njb2fO4;MtQexP9yHN?aF1C7g28h%s{u z9ghp;*V`~!N33&$v<%l^`x~dw&wgzR+>_+p!*2$8Na14d+7;;a4yx2nGd{4`(1Xn5 zmjVN0v(z5}SsxTCtoKw-s$l~TZRuHdYS!Qq7A5a2qZ096wF)`DoEJf-5Bd=AjX`=n zD?4)O0+~N$1=Rt6ney=FZ}0GGJlh3`wEOEQ^9vS<4H@x9M$GoJ#i~XX{IQFFT3>6)ojE#F;tiqTJh=$~wYe?8B zeD>_+^rF|e^9=Ux;0N-pz=e_whX|_}|yL-{a`(CZRwUfr4GwPZ? zx!Ah}TL^b~&YJYk}{cQ^t}@N!*fPlDi= zIHcE$7QG_i+sNn-;)I8<+ z)A70{wv6?!2MI&;oBKrGemMI3F;>4VLq$@tue>9rf{%<3Try8fd;Evl<)}}ZBt!0I z;hle~Mvqzbr$2w%m>4$pv~+9O(0zV+@571oO7L@8<)(-*v?&ViTlb*jWnT{UKk_$b zyjPnXv1Q0`rU9!?_VMHYB2BfPfKPG+W3s^IkA~dup>_EX13L>zxAta%XF4SUJ4cRL zR3?fAPhQk*@ca#fq#02q8_#tq!fppyM#Z_7mEBQ#+{j~He8&Bv31SE`Vp(rWG<1D~ z%B^vwR?i+Bj_qLG4?|d zW`Z$X!kNtZcsBl$(hM#`G@(*Y%JiTv@DD!Xn(V4&D}(?62^04S7>MJL)jo9d%zOHk z!{Mn(Y~4`KNBcA7v8hfqRdojr46q)?_$pSSrf25Z%BQ`M$ocB&$U8*s5U%Fi(7UC6 z4Lohy9PHb@v;LX=*#pThJz1W-pyCTTvE{!l`f`6EXP0C9=w0s|3x6)l=_mO*>|?c1 z9U+2T>l4~Ral3?*t!=;R$vYiYWY6T(bq`cWpvtWztrjaRE%92(ebc6YToidEU;4xk z-mp3EzFT3QBlmqL7y!7Y_5Z8?x~jwWrf+Q4SlG#q@3hi(vI7Y{z8wk#sNFWppeMFD z0d-dR92PEL@`QN=X1iT{0)sI#V93Axw9=Oc|DDR*grT=@Y;{oEOw!r;)u4m@6Dtr& AX8-^I diff --git a/netforce_clinic/reports/report_labor_cost_sub_detail.xlsx b/netforce_clinic/reports/report_labor_cost_sub_detail.xlsx index 24cfb0a426097f988d56a9ff4b299d04d8724a26..4e1e5727ae793ab92a7b27a16f0394ae4b6e5e83 100644 GIT binary patch delta 2389 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 Date: Mon, 22 Jun 2015 21:23:06 +0700 Subject: [PATCH 22/22] xxx --- netforce_clinic/models/visit_board.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netforce_clinic/models/visit_board.py b/netforce_clinic/models/visit_board.py index 7ff7aa8..6eba335 100644 --- a/netforce_clinic/models/visit_board.py +++ b/netforce_clinic/models/visit_board.py @@ -122,6 +122,9 @@ class VisitBoard(Model): for pc in pt.cycles: w=DAYS.get(pc.day,0) #default monday cycle=pc.cycle_id + if not cycle: + continue + #raise Exception('cycle setting for %s is not correct!'%(pt.name)) department=pc.department_id if weekday==w: dom2=[

ชื่อ-สกุล แพทย์ สิทธ์ ยาฉีด DZ N/U พยาบาล
{{pname}} {{dname}} {{tname}} {{mdc_name}} {{dlz_name}} {{dlz_use}} - {{currency total_qty zero=""}} + {{#if ../../department_id}} + {{currency total_qty zero=""}} + {{else}} + {{#if ../../branch_id}} + {{currency total_qty zero=""}} + {{else}} + {{currency total_qty zero=""}} + {{/if}} + {{/if}} {{currency total_amt zero=""}}
#รหัสรหัส ชื่อ-สกุล ตำแหน่ง หมวดหมู่
{{no}} - {{number}} {{#ifeq ../staff_type "nurse"}} + {{number}} {{view "link" string=staff_name action="clinic_staff" action_options="mode=form" active_id=staff_id}} ตำแหน่ง หมวดหมู่ ชื่อ-สกุล{{staff_level}} {{categ_name}} {{else}} + {{view "link" string=staff_name action="clinic_staff" action_options="mode=form" active_id=staff_id}} {{name}} - {{currency amount}} + {{amount}}
{{#if show_all}} - {{comp_name}} + {{#if department_id}} + {{comp_name}} + {{else}} + {{#if branch_id}} + {{comp_name}} + {{else}} + {{comp_name}} + {{/if}} + {{/if}} {{else}} {{comp_name}} {{/if}} From 9276d1aa6cadfae2914cf7a50fd1c50a04e22d53 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Sun, 21 Jun 2015 23:05:47 +0700 Subject: [PATCH 19/22] report overtime --- .../layouts/clinic_compute_labor_cost.xml | 11 +++--- netforce_clinic/models/compute_labor_cost.py | 33 +++++++++++++++--- .../models/report_labor_cost_overtime.py | 6 ++++ .../reports/report_labor_cost_overtime.xlsx | Bin 7270 -> 7812 bytes .../templates/report_labor_cost_overtime.hbs | 13 +++---- 5 files changed, 45 insertions(+), 18 deletions(-) diff --git a/netforce_clinic/layouts/clinic_compute_labor_cost.xml b/netforce_clinic/layouts/clinic_compute_labor_cost.xml index b8b5173..ea2d654 100644 --- a/netforce_clinic/layouts/clinic_compute_labor_cost.xml +++ b/netforce_clinic/layouts/clinic_compute_labor_cost.xml @@ -1,9 +1,10 @@ - - - - - + + + + + + {{max_cycle}}{{currency max_cycle zero=""}} {{view "link" string=cycle_qty action="clinic_labor_cost_item" action_options=action_options}} {{ot_qty}} + {{currency ot_qty zero=""}} {{currency ot_per_cycle zero=""}} {{currency ot_amount zero=""}} {{currency staff_wage zero=""}} @@ -51,9 +48,9 @@ รวม {{currency total_amount zero=""}}{{total_max_cycle}}{{total_cycle_qty}}{{total_ot_qty}}{{currency total_max_cycle zero=""}}{{currency total_cycle_qty zero=""}}{{currency total_ot_qty zero=""}} {{currency total_ot_per_cycle zero=""}} {{currency total_ot_amount zero=""}} {{currency total_wage zero=""}}