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