89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
from netforce.model import Model, fields, get_model
|
|
from netforce.utils import get_file_path
|
|
from . import utils
|
|
|
|
class ImportUC(Model):
|
|
_name="clinic.import.uc"
|
|
_transient=True
|
|
|
|
_fields={
|
|
"payment_id": fields.Many2One("account.payment","Payment",required=True,on_delete="cascade"),
|
|
"file": fields.File("File", required=True),
|
|
'type_id': fields.Many2One("clinic.patient.type","Type", required=True),
|
|
}
|
|
|
|
def _get_payment_id(self,context={}):
|
|
payment_id=context.get("refer_id")
|
|
if not payment_id:
|
|
return None
|
|
return int(payment_id)
|
|
|
|
def _get_type(self,context={}):
|
|
st=get_model("clinic.setting").browse(1)
|
|
return st.imp_patient_type_id.id
|
|
|
|
_defaults={
|
|
'payment_id': _get_payment_id,
|
|
'type_id': _get_type,
|
|
}
|
|
|
|
def do_import(self,ids,context):
|
|
obj=self.browse(ids)[0]
|
|
partner=obj.type_id.contact_id
|
|
if not partner:
|
|
raise Exception("No partner")
|
|
account_id=partner.account_income_id.id
|
|
if not account_id:
|
|
raise Exception("No account income")
|
|
|
|
vals={
|
|
'direct_lines':[],
|
|
}
|
|
patients={}
|
|
for p in get_model("clinic.patient").search_browse([]):
|
|
patients[p.hn_num]=p.name
|
|
|
|
if obj.type_id.code=='U':
|
|
fname=obj.file
|
|
fpath=get_file_path(fname)
|
|
node='EPOBills'
|
|
lines=utils.read_xml(fpath,node=node)
|
|
#hcode_impt=fname.split("_")[0]
|
|
epoadm=0
|
|
for line in lines:
|
|
hn=line.get('hn')
|
|
hn_num=''.join(x for x in hn if x.isdigit()) #XXX
|
|
epoadm=line.get("epoadm")
|
|
lines2=line.get("epos").get('EPO',[])
|
|
name='%s %s'%(hn,patients.get(hn_num,""))
|
|
for l2 in lines2:
|
|
if type(l2)==type(''):
|
|
continue
|
|
desc=l2.get('@desc')
|
|
if '-' in desc:
|
|
continue
|
|
name+=desc
|
|
vals['direct_lines'].append(('create',{
|
|
'description': name,
|
|
'qty': 1,
|
|
'unit_price': epoadm,
|
|
'amount': epoadm,
|
|
'account_id': account_id,
|
|
}))
|
|
|
|
for dline in obj.payment_id.direct_lines:
|
|
dline.delete()
|
|
obj.payment_id.write(vals)
|
|
|
|
return {
|
|
'next': {
|
|
'name': 'payment',
|
|
'mode': 'form',
|
|
'active_id': obj.payment_id.id,
|
|
},
|
|
'flash': 'Import successfully',
|
|
}
|
|
|
|
ImportUC.register()
|
|
|