162 lines
4.9 KiB
Python
162 lines
4.9 KiB
Python
|
import time
|
||
|
|
||
|
from netforce.model import Model, fields, get_model
|
||
|
from netforce.access import get_active_company
|
||
|
from netforce.utils import get_file_path
|
||
|
|
||
|
from . import utils
|
||
|
|
||
|
class ImportPayment(Model):
|
||
|
_name="clinic.import.payment"
|
||
|
_transient=True
|
||
|
|
||
|
_fields={
|
||
|
'date': fields.DateTime("Date"),
|
||
|
'file': fields.File("File"),
|
||
|
'result': fields.Text("Success"),
|
||
|
'hcode': fields.Char("Hospital Code"),
|
||
|
}
|
||
|
|
||
|
def get_hcode(self,context={}):
|
||
|
settings=get_model("settings").browse(1)
|
||
|
hcode=settings.hospital_code or ""
|
||
|
return hcode
|
||
|
|
||
|
_defaults={
|
||
|
'date': lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"),
|
||
|
'hcode': get_hcode,
|
||
|
}
|
||
|
|
||
|
|
||
|
def import_uc(self,ids,context={}):
|
||
|
obj=self.browse(ids)[0]
|
||
|
fname=obj.file
|
||
|
fpath=get_file_path(fname)
|
||
|
if not fpath:
|
||
|
raise Exception("Please select file")
|
||
|
lines=utils.read_xml(fpath,node='HDBills')
|
||
|
if not lines:
|
||
|
raise Exception("Wrong file")
|
||
|
data_uc=get_model("clinic.data.uc")
|
||
|
uc_ids=data_uc.search([])
|
||
|
data_uc.delete(uc_ids)
|
||
|
result=""
|
||
|
result+="Match: %s"%(50)
|
||
|
result+="\n"
|
||
|
result+="*"*50
|
||
|
for line in lines:
|
||
|
# TODO need to check match or not
|
||
|
data_uc.create(line)
|
||
|
line['type']='success'
|
||
|
print(line)
|
||
|
result+="\n"
|
||
|
result+="Not Match: %s"%(40)
|
||
|
result+="\n"
|
||
|
result+="*"*50
|
||
|
obj.write({
|
||
|
'result': result,
|
||
|
})
|
||
|
|
||
|
def import_sc(self,ids,context={}):
|
||
|
obj=self.browse(ids)[0]
|
||
|
fname=obj.file
|
||
|
fpath=get_file_path(fname)
|
||
|
lines=utils.read_excel(fpath)
|
||
|
if not lines:
|
||
|
raise Exception("Wrong File")
|
||
|
|
||
|
patients={}
|
||
|
for pt in get_model("clinic.patient").search_read([[]],['hn_num','name']):
|
||
|
hn=pt['hn_num']
|
||
|
if not hn:
|
||
|
continue
|
||
|
patients[hn]={
|
||
|
'id': pt['id'],
|
||
|
'name': pt['name'],
|
||
|
}
|
||
|
|
||
|
def get_hn_nu(hn=""):
|
||
|
return ''.join(x for x in hn if x.isdigit())
|
||
|
|
||
|
for line in lines:
|
||
|
hcode=line.get('hcode18','0')
|
||
|
if not hcode:
|
||
|
hcode='0'
|
||
|
hcode=int(hcode)
|
||
|
hcode=str(hcode)
|
||
|
if obj.hcode==hcode:
|
||
|
invno=line.get("invno","")
|
||
|
name=line.get("name14")
|
||
|
hn=line.get('hn',"")
|
||
|
hn_num=get_hn_nu(hn)
|
||
|
hct=line.get("HCT","")
|
||
|
amount=line.get("amount23",0)
|
||
|
dttran=line.get("dttran","")
|
||
|
|
||
|
vals=patients.get(hn_num)
|
||
|
if vals:
|
||
|
#print(vals)
|
||
|
pass
|
||
|
else:
|
||
|
print('not found ', hn, hn_num, name)
|
||
|
#print(dttran, invno, hcode, hn, name, hct, amount)
|
||
|
|
||
|
def clear_sc(self,ids,context={}):
|
||
|
sc_ids=get_model("clinic.data.sc").search([])
|
||
|
get_model("clinic.data.sc").delete(sc_ids)
|
||
|
obj=self.browse(ids)[0]
|
||
|
obj.write({
|
||
|
'result': 'Clear OK',
|
||
|
})
|
||
|
|
||
|
def match_invoice_sc(self,ids,context={}):
|
||
|
obj=self.browse(ids)[0]
|
||
|
for sc in get_model("clinic.data.sc").search_browse([['type','=','match']]):
|
||
|
for invoice in sc.hd_case_id.invoices:
|
||
|
print(invoice.number)
|
||
|
|
||
|
obj.write({
|
||
|
'result': 'Match OK',
|
||
|
})
|
||
|
|
||
|
def approve_sc(self,ids,context={}):
|
||
|
settings=get_model("settings").browse(1)
|
||
|
account_id=settings.ap_sc_id.id
|
||
|
if not account_id:
|
||
|
raise Exception("No Account payment for Social Security")
|
||
|
obj=self.browse(ids)[0]
|
||
|
vals={
|
||
|
'partner_id': '',
|
||
|
"company_id": get_active_company(),
|
||
|
"type": "in",
|
||
|
"pay_type": "invoice",
|
||
|
"date": obj.date or time.strftime("%Y-%m-%d"),
|
||
|
"account_id": account_id,
|
||
|
'invoice_lines': [],
|
||
|
}
|
||
|
invoice_ids=[]
|
||
|
partner_id=None
|
||
|
for sc in get_model("clinic.data.sc").search_browse([['type','=','match']]):
|
||
|
if not partner_id:
|
||
|
partner_id=sc.hd_case_id.fee_partner_id.id
|
||
|
for invoice in sc.hd_case_id.invoices:
|
||
|
invoice_ids.append(invoice.id)
|
||
|
vals['invoice_lines'].append(('create',{
|
||
|
'invoice_id': invoice.id,
|
||
|
'amount': invoice.amount_due or 0.0,
|
||
|
}))
|
||
|
sc.delete() #XXX
|
||
|
vals['partner_id']=partner_id
|
||
|
payment_id=get_model("account.payment").create(vals,context={"type":"in"})
|
||
|
#get_model("account.payment").browse(payment_id).post()
|
||
|
return {
|
||
|
'next': {
|
||
|
'name': 'payment',
|
||
|
'mode': 'form',
|
||
|
'active_id': payment_id,
|
||
|
},
|
||
|
'flash': 'Paid',
|
||
|
}
|
||
|
|
||
|
ImportPayment.register()
|