improve visit
parent
b4b7d511a7
commit
ffda3a2549
|
@ -1,5 +1,5 @@
|
|||
<action>
|
||||
<field name="string">Dialyzer</field>
|
||||
<field name="string">Dialyzers</field>
|
||||
<field name="view_cls">multi_view</field>
|
||||
<field name="model">clinic.dialyzer</field>
|
||||
<field name="tabs">[["All",[]],["New",[["state","=","new"]]],["Active",[["state","=","active"]]],["Drop",[["state","=","drop"]]],["Expire",[["state","=","expire"]]],["Cancelled",[["state","=","cancelled"]]]]</field>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<action>
|
||||
<field name="string">HD Case Treatments</field>
|
||||
<field name="string">Treatments</field>
|
||||
<field name="view_cls">multi_view</field>
|
||||
<field name="model">clinic.hd.case</field>
|
||||
<field name="tabs">[["All",[]],["Draft",[["state","=","draft"]]],["Confirmed",[["state","=","confirmed"]]],["Approved",[["state","=","approved"]]],["Paid",[["state","=","paid"]]],["Cancelled",[["state","=","cancelled"]]]]</field>
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
<action>
|
||||
<field name="string">Import Payments From Government</field>
|
||||
<field name="view_cls">multi_view</field>
|
||||
<field name="model">clinic.import.payment</field>
|
||||
<field name="menu">clinic_menu</field>
|
||||
</action>
|
|
@ -2,7 +2,7 @@
|
|||
<field name="string">Visits</field>
|
||||
<field name="view_cls">multi_view</field>
|
||||
<field name="model">clinic.visit</field>
|
||||
<field name="tabs">[["All",[]],["Pending",[["state","=","pending"]]],["Confirmed",[["state","=","confirmed"]]],["Cancelled",[["state","=","cancelled"]]]]</field>
|
||||
<field name="tabs">[["All",[]],["Draft",[["state","=","draft"]]],["Waiting Treatment",[["state","=","waiting_treatment"]]],["Treatment",[["state","=","treatment"]]],["Cancelled",[["state","=","cancelled"]]]]</field>
|
||||
<field name="modes">list,calendar,form</field>
|
||||
<field name="menu">clinic_menu</field>
|
||||
</action>
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
<field name="name"/>
|
||||
<field name="identification"/>
|
||||
<field name="expiry_card"/>
|
||||
<field name="department_id"/>
|
||||
<field name="birthday"/>
|
||||
<field name="department_id"/>
|
||||
</group>
|
||||
<group span="6" columns="1">
|
||||
<field name="picture"/>
|
||||
|
@ -30,6 +30,9 @@
|
|||
<field name="prof_license"/>
|
||||
<field name="prof_license_date"/>
|
||||
</tab>
|
||||
<tab string="Others">
|
||||
<field name="note"/>
|
||||
</tab>
|
||||
</tabs>
|
||||
<related>
|
||||
<field name="visits"/>
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<form model="clinic.import.payment" attrs='{"readonly":[["state","in",["success"]]]}'>
|
||||
<head>
|
||||
<field name="state"/>
|
||||
</head>
|
||||
<field name="name"/>
|
||||
<field name="date_import"/>
|
||||
<separator string="Medical Government"/>
|
||||
<field name="mg_file"/>
|
||||
<group span="6">
|
||||
<field name="mg_payment_id" readonly="1"/>
|
||||
<button string="Undo" type="danger" method="undo_mg" attrs='{"invisible":[["state","in",["success"]]]}'/>
|
||||
</group>
|
||||
<separator string="Social Security"/>
|
||||
<field name="sc_file"/>
|
||||
<group span="6">
|
||||
<field name="sc_payment_id" readonly="1"/>
|
||||
<button string="Undo" type="danger" method="undo_sc" attrs='{"invisible":[["state","in",["success"]]]}'/>
|
||||
</group>
|
||||
<separator string="NHSO (30฿)"/>
|
||||
<field name="nhso_file"/>
|
||||
<group span="6">
|
||||
<field name="nhso_payment_id" readonly="1"/>
|
||||
<button string="Undo" type="danger" method="undo_nhso" attrs='{"invisible":[["state","in",["success"]]]}'/>
|
||||
</group>
|
||||
<foot>
|
||||
<button string="Import" type="success" icon="arrow-right" method="import_payment" attrs='{"invisible":[["state","in",["success"]]]}'/>
|
||||
<button string="Close" type="danger" method="close_import" attrs='{"invisible":[["state","in",["success"]]]}'/>
|
||||
</foot>
|
||||
</form>
|
|
@ -0,0 +1,5 @@
|
|||
<list model="clinic.import.payment">
|
||||
<field name="name"/>
|
||||
<field name="date_import"/>
|
||||
<field name="state"/>
|
||||
</list>
|
|
@ -3,25 +3,29 @@
|
|||
<item string="Personal">
|
||||
<item string="Doctors" action="clinic_doctor"/>
|
||||
<item string="Nurses" action="clinic_nurse"/>
|
||||
</item>
|
||||
<item string="Patients">
|
||||
<item string="Patients" action="clinic_patient"/>
|
||||
<item string="Dialyzers" action="clinic_dialyzer"/>
|
||||
<divider/>
|
||||
<header string="OPTIONS"/>
|
||||
<item string="Races" action="clinic_race"/>
|
||||
<item string="Nationalities" action="clinic_nation"/>
|
||||
<item string="Graduations" action="clinic_grade"/>
|
||||
<item string="Cause Chronics" action="clinic_cause_chronic"/>
|
||||
<item string="Comorbidities" action="clinic_comorbidity"/>
|
||||
<item string="Morbidities" action="clinic_morbidity"/>
|
||||
</item>
|
||||
<item string="Visits" action="clinic_visit"/>
|
||||
<item string="Treatments" action="clinic_hd_case"/>
|
||||
<item string="Dialyzer" action="clinic_dialyzer"/>
|
||||
<item string="Reports">
|
||||
<item string="Report1" action="report1"/>
|
||||
</item>
|
||||
<item string="Imports">
|
||||
<item string="JE" action="clinic_je"/>
|
||||
<item string="Import Payments" action="clinic_import_payment"/>
|
||||
</item>
|
||||
<item string="Settings">
|
||||
<item string="Departments" action="clinic_department"/>
|
||||
<item string="Graduations" action="clinic_grade"/>
|
||||
<item string="Nationalities" action="clinic_nation"/>
|
||||
<item string="Races" action="clinic_race"/>
|
||||
<item string="Cause Chronics" action="clinic_cause_chronic"/>
|
||||
<item string="Comorbidities" action="clinic_comorbidity"/>
|
||||
<item string="Morbidities" action="clinic_morbidity"/>
|
||||
<item string="Clinic Settings" action="clinic_setting"/>
|
||||
</item>
|
||||
</menu>
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
<field name="name"/>
|
||||
<field name="identification"/>
|
||||
<field name="expiry_card"/>
|
||||
<field name="department_id"/>
|
||||
<field name="birthday"/>
|
||||
<field name="department_id"/>
|
||||
</group>
|
||||
<group span="6" columns="1">
|
||||
<field name="picture"/>
|
||||
|
@ -30,6 +30,9 @@
|
|||
<field name="prof_license"/>
|
||||
<field name="prof_license_date"/>
|
||||
</tab>
|
||||
<tab string="Others">
|
||||
<field name="note"/>
|
||||
</tab>
|
||||
</tabs>
|
||||
<related>
|
||||
<field name="visits"/>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<calendar model="clinic.visit" states='pending' date_field="visit_date" colors='{"#090":[["cycle","=",1]],"#2400ff":[["cycle","=",2]],"#ebff00":[["cycle","=",3]],"#f20000":[["cycle","=",4]]}'>
|
||||
<calendar model="clinic.visit" states='waiting_treatment' date_field="visit_date" colors='{"#090":[["cycle","=",1]],"#2400ff":[["cycle","=",2]],"#ebff00":[["cycle","=",3]],"#f20000":[["cycle","=",4]]}'>
|
||||
<field name="patient_id"/>
|
||||
<field name="cycle"/>
|
||||
<field name="number"/>
|
||||
|
|
|
@ -23,9 +23,10 @@
|
|||
</tab>
|
||||
</tabs>
|
||||
<foot>
|
||||
<button string="Confirm" type="success" method="confirm" states="pending" />
|
||||
<button string="Reopen" type="default" method="reopen" states="cancelled" />
|
||||
<button string="Cancel" type="danger" method="cancel" states="confirmed" confirm="Are you sure to cancel HD case?"/>
|
||||
<button string="Confirm" type="success" method="confirm" states="draft" />
|
||||
<button string="Do Treatment" type="success" method="do_treatment" icon="arrow-right" states="waiting_treatment" />
|
||||
<button string="Re Visit" type="default" method="reopen" states="cancelled" />
|
||||
<button string="Cancel Visit" type="danger" method="cancel" states="waiting_treatment" confirm="Are you sure to cancel HD case?"/>
|
||||
</foot>
|
||||
<related>
|
||||
<field name="comments"/>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<list model="clinic.visit">
|
||||
<list model="clinic.visit" colors='{"#EF4D4D":[["late_visit","=",1]]}'>
|
||||
<field name="late_visit" invisible="1"/>
|
||||
<field name="number"/>
|
||||
<field name="visit_date"/>
|
||||
<field name="cycle"/>
|
||||
|
|
|
@ -22,3 +22,4 @@ from . import je
|
|||
from . import input_line
|
||||
from . import file_sheet
|
||||
from . import payment
|
||||
from . import import_payment
|
||||
|
|
|
@ -31,8 +31,8 @@ class Doctor(Model):
|
|||
"mobile": fields.Char("Mobile",required=False,search=True),
|
||||
"phone": fields.Char("Phone",search=True),
|
||||
'email': fields.Char("Email"),
|
||||
"prof_license" : fields.Char("Professional License."),
|
||||
"prof_license_date" : fields.Date("Professional License Date"),
|
||||
"prof_license" : fields.Char("License."),
|
||||
"prof_license_date" : fields.Date("License Date"),
|
||||
"birthday": fields.Date("BirthDay",search=True),
|
||||
"department_id": fields.Many2One("clinic.department", "Department",search=True),
|
||||
"patients": fields.Many2Many("clinic.patient","Patients"),
|
||||
|
@ -43,6 +43,7 @@ class Doctor(Model):
|
|||
"company_id": fields.Many2One("company","Company"),
|
||||
"user_id": fields.Many2One("base.user","User"),
|
||||
'picture': fields.File("Picture"),
|
||||
'note': fields.Text("Note"),
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ from netforce.access import get_active_company
|
|||
|
||||
class HDcase(Model):
|
||||
_name="clinic.hd.case"
|
||||
_string="HD Case Treatment"
|
||||
_string="Treatment"
|
||||
_audit_log=True
|
||||
_name_field="number"
|
||||
_multi_company=True
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
import time
|
||||
import xlrd
|
||||
from datetime import datetime
|
||||
|
||||
from netforce.model import Model, fields, get_model
|
||||
from netforce.access import get_active_company
|
||||
from netforce.access import get_active_user, set_active_user
|
||||
from netforce.utils import get_file_path
|
||||
from netforce.utils import get_data_path
|
||||
|
||||
PAMENT_TYPE={
|
||||
"mg":"Medical Government",
|
||||
"sc":"Social Security",
|
||||
"nhso":"NHSO (30฿)",
|
||||
"personal": "Personal",
|
||||
"others": "Others",
|
||||
}
|
||||
|
||||
class ImportPayment(Model):
|
||||
_name="clinic.import.payment"
|
||||
_string="Import Payment"
|
||||
|
||||
_fields={
|
||||
'name': fields.Char("Name"),
|
||||
'date_import': fields.DateTime("Date"),
|
||||
'mg_file': fields.File("File"),
|
||||
'sc_file': fields.File("File"),
|
||||
'nhso_file': fields.File("File"),
|
||||
'mg_payment_id': fields.Many2One("account.payment","Payment"),
|
||||
'sc_payment_id': fields.Many2One("account.payment","Payment"),
|
||||
'nhso_payment_id': fields.Many2One("account.payment","Payment"),
|
||||
"state": fields.Selection([("draft","Draft"),("success","Succes"),("fail","Fail")],"Status"),
|
||||
'note': fields.Text("Note"),
|
||||
}
|
||||
|
||||
_order="date_import desc"
|
||||
|
||||
def _get_name(self,context={}):
|
||||
timenow=time.strftime("%Y-%m-%d")
|
||||
return 'Import Payment - %s'%timenow
|
||||
|
||||
_defaults={
|
||||
'date_import': lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
'name': _get_name,
|
||||
'state': 'draft',
|
||||
}
|
||||
|
||||
ImportPayment.register()
|
|
@ -31,8 +31,8 @@ class Nurse(Model):
|
|||
"mobile": fields.Char("Mobile",required=False,search=True),
|
||||
"phone": fields.Char("Phone",search=True),
|
||||
'email': fields.Char("Email"),
|
||||
"prof_license" : fields.Char("Professional License."),
|
||||
"prof_license_date" : fields.Date("Professional License Date"),
|
||||
"prof_license" : fields.Char("License."),
|
||||
"prof_license_date" : fields.Date("License Date"),
|
||||
"birthday": fields.Date("BirthDay",search=True),
|
||||
"department_id": fields.Many2One("clinic.department", "Department",search=True),
|
||||
"patients": fields.Many2Many("clinic.patient","Patients"),
|
||||
|
@ -43,6 +43,7 @@ class Nurse(Model):
|
|||
"company_id": fields.Many2One("company","Company"),
|
||||
"user_id": fields.Many2One("base.user","User"),
|
||||
'picture': fields.File("Picture"),
|
||||
'note': fields.Text("Note"),
|
||||
}
|
||||
|
||||
def _get_number(self,context={}):
|
||||
|
|
|
@ -10,6 +10,17 @@ class Visit(Model):
|
|||
_audit_log=True
|
||||
_name_field="number"
|
||||
_multi_company=True
|
||||
|
||||
def _get_visit_late(self,ids,context={}):
|
||||
res={}
|
||||
datenow=time.strftime("%Y-%m-%d")
|
||||
for obj in self.browse(ids):
|
||||
late=0
|
||||
if datenow > obj.visit_date and obj.state=='waiting_treatment':
|
||||
late=1
|
||||
res[obj.id]=late
|
||||
return res
|
||||
|
||||
_fields={
|
||||
"number": fields.Char("Number",required=True,search=True),
|
||||
"patient_id": fields.Many2One("clinic.patient","Patient",required=True,search=True),
|
||||
|
@ -18,10 +29,11 @@ class Visit(Model):
|
|||
"visit_date": fields.Date("Visit Date",required=True,search=True),
|
||||
"department_id": fields.Many2One("clinic.department", "Department",search=True),
|
||||
"cycle": fields.Selection([("1","One"),("2","Two"),("3","Tree"),("4","Four")],"Cycle",required=True),
|
||||
"state": fields.Selection([("pending","Pending"),("confirmed","Confirmed"),("cancelled","Cancelled")],"Status",required=True),
|
||||
"state": fields.Selection([("draft","Draft"),("waiting_treatment","Waiting Treatment"),('treatment','Treatment'),("cancelled","Cancelled")],"Status",required=True),
|
||||
"comments": fields.One2Many("message","related_id","Comments"),
|
||||
"company_id": fields.Many2One("company","Company"),
|
||||
'time_use': fields.Integer("Time Use(hrs)"),
|
||||
'late_visit': fields.Integer("Late Vist",function="_get_visit_late"),
|
||||
}
|
||||
|
||||
def _get_number(self,context={}):
|
||||
|
@ -47,25 +59,42 @@ class Visit(Model):
|
|||
return None
|
||||
|
||||
_defaults={
|
||||
"state": "pending",
|
||||
"state": "draft",
|
||||
"cycle": "1",
|
||||
'visit_date': time.strftime("%Y-%m-%d"),
|
||||
"number": _get_number,
|
||||
"number": "/",
|
||||
"company_id": lambda *a: get_active_company(),
|
||||
'nurse_id': _get_nurse,
|
||||
'time_use': 1,
|
||||
}
|
||||
_order="number desc"
|
||||
_order="id desc"
|
||||
|
||||
def get_dialyzer(self):
|
||||
return
|
||||
|
||||
def confirm(self,ids,context={}):
|
||||
obj=self.browse(ids)[0]
|
||||
obj=self.browse(ids[0])
|
||||
number=obj.number
|
||||
if number=="/":
|
||||
number=self._get_number(context)
|
||||
vals={
|
||||
'number': number,
|
||||
'state': 'waiting_treatment',
|
||||
}
|
||||
obj.write(vals)
|
||||
|
||||
def do_treatment(self,ids,context={}):
|
||||
hd_case_obj=get_model("clinic.hd.case")
|
||||
dt=datetime.datetime
|
||||
fmt_date="%Y-%m-%d %H:%M:%S"
|
||||
timenow=dt.now().strftime("%H:%M:%S")
|
||||
datenow=dt.now().strftime("%Y-%m-%d")
|
||||
|
||||
obj=self.browse(ids)[0]
|
||||
# cannot treatment if current date is not same visit date
|
||||
if obj.visit_date!=datenow:
|
||||
raise Exception("Today is not treament date!")
|
||||
|
||||
fmt_date="%Y-%m-%d %H:%M:%S"
|
||||
date_from=dt.strptime("%s %s"%(obj.visit_date,timenow),fmt_date)
|
||||
seconds=(obj.time_use or 1)*3600
|
||||
date_to=date_from+datetime.timedelta(seconds=seconds)
|
||||
|
@ -130,9 +159,9 @@ class Visit(Model):
|
|||
"ultrafittration": dlz.ultrafittration,
|
||||
}))
|
||||
if not vals['dialyzers']:
|
||||
raise Exception("%s don't have dialyzer for treatment" % obj.patient_id.name)
|
||||
raise Exception("%s don't have dialyzer for treatment yet" % obj.patient_id.name)
|
||||
hd_case_id=hd_case_obj.create(vals)
|
||||
obj.write({"state":"confirmed"})
|
||||
obj.write({"state":"treatment"})
|
||||
return {
|
||||
'next': {
|
||||
'name': 'clinic_hd_case',
|
||||
|
@ -148,7 +177,7 @@ class Visit(Model):
|
|||
|
||||
def reopen(self,ids,context={}):
|
||||
obj=self.browse(ids)[0]
|
||||
obj.write({"state":"pending"})
|
||||
obj.write({"state":"draft"})
|
||||
|
||||
def onchange_patient(self,context={}):
|
||||
data=context['data']
|
||||
|
@ -195,5 +224,11 @@ class Visit(Model):
|
|||
'flash': 'Visit %s is copy to %s'%(obj.number,new_obj.number),
|
||||
}
|
||||
|
||||
|
||||
def delete(self,ids,context={}):
|
||||
for obj in self.browse(ids):
|
||||
if obj.state!='draft':
|
||||
raise Exception("Can not delete visit %s because state is not draft!"%obj.number)
|
||||
super().delete(ids,context=context)
|
||||
|
||||
Visit.register()
|
||||
|
|
|
@ -1,3 +1,47 @@
|
|||
======
|
||||
- main
|
||||
- create journal entry from file import
|
||||
- detail (if have some time need to approve)
|
||||
- defind state for each step
|
||||
- visit
|
||||
- treatment
|
||||
- dializer
|
||||
- defind flow of each step
|
||||
- patient
|
||||
- new
|
||||
- load default data
|
||||
- visit
|
||||
-> state
|
||||
- draft
|
||||
- confirmed
|
||||
- should dialyzer before treament
|
||||
- buttons
|
||||
- confirm
|
||||
- state : draft -> waiting treatment
|
||||
- do treatment
|
||||
- state : waiting treatment ->
|
||||
- cancel visit
|
||||
- print visit
|
||||
- plaining visit
|
||||
- day [monday, tueday, wedsday, thursday, friday]
|
||||
- time
|
||||
|
||||
- treament
|
||||
- time start/stop
|
||||
- only time
|
||||
- date treament
|
||||
- color (check state)
|
||||
- if fail -> red
|
||||
- cancelled
|
||||
- make next appointment
|
||||
- make payment
|
||||
- state
|
||||
- draft
|
||||
- confirm
|
||||
- many2one for dializer
|
||||
- dialyzer
|
||||
|
||||
=======
|
||||
sequence (support multi company) -> ok
|
||||
- visit
|
||||
- hd case
|
||||
|
|
Loading…
Reference in New Issue