145 lines
5.9 KiB
Python
145 lines
5.9 KiB
Python
|
from netforce.model import get_model
|
||
|
from netforce import migration
|
||
|
from netforce.utils import get_file_path
|
||
|
from netforce.access import get_active_user, set_active_user, set_active_company, get_active_company
|
||
|
from . import utils
|
||
|
|
||
|
class Migration(migration.Migration):
|
||
|
_name="import.pks"
|
||
|
_version="2.10"
|
||
|
|
||
|
def import_visit(self,lines):
|
||
|
visits={}
|
||
|
cycles=[(c['id'],'%s:00'%c['time_start'],'%s:00'%c['time_stop']) for c in get_model("clinic.cycle").search_read([[]],['time_start','time_stop'])]
|
||
|
for line in lines:
|
||
|
hcode=line.get('hcode18')
|
||
|
if not hcode:
|
||
|
hcode='0'
|
||
|
hcode=int(hcode)
|
||
|
hcode=str(hcode)
|
||
|
hcode_impt='23869'
|
||
|
if hcode_impt==hcode:
|
||
|
name=line.get("name14")
|
||
|
patient_ids=get_model("clinic.patient").search([['name','=',name]])
|
||
|
if patient_ids:
|
||
|
patient_id=patient_ids[0]
|
||
|
patient=get_model("clinic.patient").browse(patient_id)
|
||
|
doctor=patient.doctor_id
|
||
|
department=patient.department_id
|
||
|
vals={
|
||
|
'patient_id': patient.id,
|
||
|
'doctor_id': doctor.id,
|
||
|
'department_id': department.id,
|
||
|
'state': 'pending',
|
||
|
}
|
||
|
# find cycle
|
||
|
dttran=line.get("dttran")
|
||
|
date=dttran[0:10]
|
||
|
time=dttran[11:]
|
||
|
if not time:
|
||
|
continue
|
||
|
cycle_id=None
|
||
|
for cycle in cycles:
|
||
|
time_start=cycle[1]
|
||
|
time_stop=cycle[2]
|
||
|
if time >= time_start:
|
||
|
cycle_id=cycle[0]
|
||
|
vals['cycle_id']=cycle_id
|
||
|
vals['time_start']='%s %s'%(date,time_start)
|
||
|
vals['time_stop']='%s %s'%(date,time_stop)
|
||
|
if not cycle_id:
|
||
|
raise Exception("not found cycle on this time %s %s %s"%(dttran, time_start,time_stop))
|
||
|
visit_ids=get_model("clinic.visit").search([['visit_date','=',date],['patient_id','=',patient_id]])
|
||
|
visit_id=None
|
||
|
if not visit_ids:
|
||
|
vals['visit_date']=date
|
||
|
visit_id=get_model('clinic.visit').create(vals)
|
||
|
#print('create visit ', visit_id, date)
|
||
|
else:
|
||
|
visit_id=visit_ids[0]
|
||
|
#print('already ', date, ' ', name)
|
||
|
if visit_id:
|
||
|
visits.update({
|
||
|
visit_id: {
|
||
|
'hct': line.get('hct'),
|
||
|
'epoadm29':line.get("epoadm29"), # SRV
|
||
|
'amount23':line.get("amount23"), # FEE
|
||
|
'allow37':line.get("allow37"), # EPO
|
||
|
}
|
||
|
})
|
||
|
else:
|
||
|
print("found ", name)
|
||
|
return visits
|
||
|
|
||
|
def confirm_visit(self,visits):
|
||
|
st=get_model("clinic.setting").browse(1)
|
||
|
st.write({
|
||
|
'auto_gen': True,
|
||
|
})
|
||
|
hd_case_ids=[]
|
||
|
visit_ids=visits.keys()
|
||
|
for visit in get_model('clinic.visit').browse(visit_ids):
|
||
|
if visit!='confirmed':
|
||
|
hd_case_id=visit.confirm()['next']['active_id']
|
||
|
hd_case=get_model("clinic.hd.case").browse(hd_case_id)
|
||
|
# lines
|
||
|
vals={
|
||
|
'hct': visits[visit.id]['hct'] or 0,
|
||
|
'lines': [],
|
||
|
}
|
||
|
for st_prod in st.products:
|
||
|
if st_prod.patient_type_id.id==3:
|
||
|
prod=st_prod.product_id
|
||
|
price=st_prod.price
|
||
|
qty=st_prod.qty
|
||
|
categ=st_prod.product_categ_id
|
||
|
if categ.code=='FEE':
|
||
|
amt=visits[visit.id]['amount23'] or 0
|
||
|
elif categ.code=='SRV':
|
||
|
amt=visits[visit.id]['epoadm29'] or 0
|
||
|
elif categ.code=='EPO':
|
||
|
amt=visits[visit.id]['allow37'] or 0
|
||
|
else:
|
||
|
amt=0
|
||
|
vals['lines'].append(('create',{
|
||
|
'product_id': prod.id,
|
||
|
'uom_id': st_prod.uom_id.id,
|
||
|
'product_categ_id': categ.id,
|
||
|
'description': st_prod.description,
|
||
|
'price': price,
|
||
|
'qty': qty,
|
||
|
'reimbursable': st_prod.reimbursable,
|
||
|
'amount': amt,
|
||
|
}))
|
||
|
hd_case.write(vals)
|
||
|
hd_case_ids.append(hd_case.id)
|
||
|
st.write({
|
||
|
'auto_gen': False,
|
||
|
})
|
||
|
return hd_case_ids
|
||
|
|
||
|
|
||
|
def hdc_done(self,hd_case_ids):
|
||
|
done_ids=[]
|
||
|
for hd_case in get_model("clinic.hd.case").browse(hd_case_ids):
|
||
|
if hd_case.state=='waiting_treatment':
|
||
|
hd_case.complete()
|
||
|
done_ids.append(hd_case.id)
|
||
|
return done_ids
|
||
|
|
||
|
def migrate(self):
|
||
|
fname='pks.xls'
|
||
|
fpath=get_file_path(fname)
|
||
|
lines=utils.read_excel(fpath,show_datetime=True)
|
||
|
set_active_company(1)
|
||
|
visits=self.import_visit(lines)
|
||
|
print("visit ", len(visits))
|
||
|
hd_case_ids=self.confirm_visit(visits)
|
||
|
print('hd case ', len(hd_case_ids))
|
||
|
hd_case_ids=self.hdc_done(hd_case_ids)
|
||
|
print('Done ', len(hd_case_ids))
|
||
|
set_active_company(1)
|
||
|
return True
|
||
|
|
||
|
Migration.register()
|